Rajouter un disque (SSD) dans un groupe de volumes LVM

Je viens de profiter des soldes pour muscler une fois de plus ma station de travail. enterprise passe donc à 8Go de RAM mais surtout possède à présent 64Go de disque SSD en SATA III. L'occasion pour moi de faire un article sur comment rajouter un disque dans un groupe de volumes et comment y déplacer les partitions qui vont bien.

Remarques :

  • Je possède 2 groupes de volumes : VG00 et VG01, dans cette article VG01 ne rentre pas en compte. Je l'ignore donc volontairement.
  • J'utilise system-config-lvm pour illustrer mes propos. Bien évidement vous pouvez passer par gparted et system-config-lvm pour faire tout ce que je décris ici, mais c'est quand même moins sport et puis le jour où vous administrerez un serveur j'espère que vous n'aurez pas ces GUI sous la main !
  • Merci à Remi Collet pour ses conseils sur le LVM et pour son article LVM c'est quand même bien qui m'a servi de base.
  • Pour ceux qui ne connaissent que Windows, ils vont avoir un choc : avec LVM on peut déplacer une partition d'un disque dur vers un autre à chaud et cela même si la partition est la partition système !

Préambule

Ma carte mère gère le SATA III, j'ai donc choisi un disque SSD SATA III de la marque Crucial. Lors du premier boot, je n'ai pas trouvé mon nouveau disque. Pour cela j'ai du passer l'option "Marvell Controller" de IDE vers AHCI, si vous rencontrez le même problème je vous invite à lire le mode d'emploi de votre carte mère.

Partitionnement du disque

Maintenant que le disque dur est visible il faut le partitionner. La Commande fdisk -l me retourne moult informations mais surtout m'indique que mon disque se prénomme /dev/sda. Je vais donc le partitionner en 2 :

  • 512Mo pour le /boot,
  • le reste pour mon LVM.

Il est possible de faire ceci avec parted ou même gparted, je me le suis fait à l'ancienne (fdisk) :

root@enterprise ~> fdisk /dev/sda
Le périphérique ne contient pas une table de partitions DOS ou Sun, SGI, OSF valide
Création d'une nouvelle étiquette DOS avec id de disque 0x51d8c6f2.
Les modifications restent en mémoire jusqu'à ce que vous les écriviez.
Après quoi, bien sûr, le contenu précédent sera irrécupérable.
 
AVERTISSEMENT: fanion 0x0000 non valide dans la table de partitions 4, sera corrigé par w(écriture)
 
Commande (m pour l'aide): m
Commande d'action
   a   bascule le fanion d'amorce
   b   éditer l'étiquette BSD du disque
   c   basculer le fanion de compatibilité DOS
   d   supprimer la partition
   l   lister les types de partitions connues
   m   afficher ce menu
   n   ajouter une nouvelle partition
   o   créer une nouvelle table vide de partitions DOS
   p   afficher la table de partitions
   q   quitter sans enregistrer les changements
   s   créer une nouvelle étiquette vide pour disque de type Sun
   t   modifier l'id de système de fichiers d'une partition
   u   modifier les unités d'affichage/saisie
   v   vérifier la table de partitions
   w   écrire la table sur le disque et quitter
   x   fonctions avancées (pour experts seulement)
 
Commande (m pour l'aide): n
Commande d'action
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4, par défaut 1): 
Premier secteur (2048-125045423, par défaut 2048): 
Utilisation de la valeur par défaut 2048
Dernier secteur, +secteurs or +taille{K,M,G} (2048-125045423, par défaut 125045423): +512M
 
Commande (m pour l'aide): n
Commande d'action
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4, par défaut 2): 
Utilisation de la valeur par défaut 2
Premier secteur (1050624-125045423, par défaut 1050624): 
Utilisation de la valeur par défaut 1050624
Dernier secteur, +secteurs or +taille{K,M,G} (1050624-125045423, par défaut 125045423): 
Utilisation de la valeur par défaut 125045423
 
Commande (m pour l'aide): w
La table de partitions a été altérée!
 
Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.

A ce moment j'ai donc 1 groupe de volume (VG00) étalé sur 1 volume physique (/dev/sdb2) : LVM : 1 VG pour 1 PV

La prochaine étape sera donc de rajouter mon disque SSD à VG00.

Création du volume physique et affectation au groupe de volumes VG00

Nous allons créer un volume physique à partir de /dev/sda2 et le rajouter au groupe VG00 :

root@enterprise ~> pvcreate /dev/sda2
  Physical volume "/dev/sda2" successfully created
root@enterprise ~> vgextend VG00 /dev/sda2
  Volume group "VG00" successfully extended

A cette instant j'ai 1 groupe de volumes (VG00) réparti sur 2 volumes physique (/dev/sda2, /dev/sdb2) : LVM : 1 VG pour 2 PV

Déplacement des partitions systèmes sur le nouveau PV

Le SSD c'est bien mais c'est cher ! Comptez environs 120€ pour 64Go. A ce prix là on ne peut pas avoir un PC 100% SSD. Nous allons donc déplacer sur le SSD les partitions systèmes qui doivent être les plus rapides :

  • Le système (LV_root),
  • le swap (LV_swap),
  • le tmp (LV_tmp),
root@enterprise ~> pvmove -v -n LV_root /dev/sdb2 /dev/sda2
    Finding volume group "VG00"
    Archiving volume group "VG00" metadata (seqno 37).
    Creating logical volume pvmove0
    Moving 640 extents of logical volume VG00/LV_root
    Found volume group "VG00"
    activation/volume_list configuration setting not defined, checking only host tags for VG00/LV_root
    Updating volume group metadata
    Found volume group "VG00"
    Found volume group "VG00"
    Suspending VG00-LV_root (253:2) with device flush
    Found volume group "VG00"
    activation/volume_list configuration setting not defined, checking only host tags for VG00/pvmove0
    Creating VG00-pvmove0
    Loading VG00-pvmove0 table (253:7)
    Resuming VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Loading VG00-pvmove0 table (253:7)
    Suppressed VG00-pvmove0 identical table reload.
    Loading VG00-LV_root table (253:2)
    Resuming VG00-LV_root (253:2)
    Creating volume group backup "/etc/lvm/backup/VG00" (seqno 38).
    Checking progress before waiting every 15 seconds
  /dev/sdb2: Moved: 0,2%
  /dev/sdb2: Moved: 4,8%
  /dev/sdb2: Moved: 9,2%
  /dev/sdb2: Moved: 13,9%
  /dev/sdb2: Moved: 18,1%
  /dev/sdb2: Moved: 22,7%
  /dev/sdb2: Moved: 27,3%
  /dev/sdb2: Moved: 31,7%
  /dev/sdb2: Moved: 36,1%
  /dev/sdb2: Moved: 40,5%
  /dev/sdb2: Moved: 45,0%
  /dev/sdb2: Moved: 49,4%
  /dev/sdb2: Moved: 53,6%
  /dev/sdb2: Moved: 58,3%
  /dev/sdb2: Moved: 62,5%
  /dev/sdb2: Moved: 66,4%
  /dev/sdb2: Moved: 70,8%
  /dev/sdb2: Moved: 75,3%
  /dev/sdb2: Moved: 79,7%
  /dev/sdb2: Moved: 83,6%
  /dev/sdb2: Moved: 88,3%
  /dev/sdb2: Moved: 92,7%
  /dev/sdb2: Moved: 96,6%
  /dev/sdb2: Moved: 100,0%
    Found volume group "VG00"
    Found volume group "VG00"
    Loading VG00-LV_root table (253:2)
    Suspending VG00-LV_root (253:2) with device flush
    Suspending VG00-pvmove0 (253:7) with device flush
    Found volume group "VG00"
    Found volume group "VG00"
    Found volume group "VG00"
    Resuming VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Resuming VG00-LV_root (253:2)
    Found volume group "VG00"
    Removing VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Removing temporary pvmove LV
    Writing out final volume group after pvmove
    Creating volume group backup "/etc/lvm/backup/VG00" (seqno 40).

LVM : LV_root sur le disque SSD

root@enterprise ~> pvmove -v -n LV_swap /dev/sdb2 /dev/sda2
    Finding volume group "VG00"
    Archiving volume group "VG00" metadata (seqno 40).
    Creating logical volume pvmove0
    Moving 64 extents of logical volume VG00/LV_swap
    Found volume group "VG00"
    activation/volume_list configuration setting not defined, checking only host tags for VG00/LV_swap
    Updating volume group metadata
    Found volume group "VG00"
    Found volume group "VG00"
    Suspending VG00-LV_swap (253:6) with device flush
    Found volume group "VG00"
    activation/volume_list configuration setting not defined, checking only host tags for VG00/pvmove0
    Creating VG00-pvmove0
    Loading VG00-pvmove0 table (253:7)
    Resuming VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Loading VG00-pvmove0 table (253:7)
    Suppressed VG00-pvmove0 identical table reload.
    Loading VG00-LV_swap table (253:6)
    Resuming VG00-LV_swap (253:6)
    Creating volume group backup "/etc/lvm/backup/VG00" (seqno 41).
    Checking progress before waiting every 15 seconds
  /dev/sdb2: Moved: 0,0%
  /dev/sdb2: Moved: 43,8%
  /dev/sdb2: Moved: 87,5%
  /dev/sdb2: Moved: 100,0%
    Found volume group "VG00"
    Found volume group "VG00"
    Loading VG00-LV_swap table (253:6)
    Suspending VG00-LV_swap (253:6) with device flush
    Suspending VG00-pvmove0 (253:7) with device flush
    Found volume group "VG00"
    Found volume group "VG00"
    Found volume group "VG00"
    Resuming VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Resuming VG00-LV_swap (253:6)
    Found volume group "VG00"
    Removing VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Removing temporary pvmove LV
    Writing out final volume group after pvmove
    Creating volume group backup "/etc/lvm/backup/VG00" (seqno 43).
root@enterprise ~> pvmove -v -n LV_tmp /dev/sdb2 /dev/sda2
    Finding volume group "VG00"
    Archiving volume group "VG00" metadata (seqno 43).
    Creating logical volume pvmove0
    Moving 64 extents of logical volume VG00/LV_tmp
    Found volume group "VG00"
    activation/volume_list configuration setting not defined, checking only host tags for VG00/LV_tmp
    Updating volume group metadata
    Found volume group "VG00"
    Found volume group "VG00"
    Suspending VG00-LV_tmp (253:5) with device flush
    Found volume group "VG00"
    activation/volume_list configuration setting not defined, checking only host tags for VG00/pvmove0
    Creating VG00-pvmove0
    Loading VG00-pvmove0 table (253:7)
    Resuming VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Loading VG00-pvmove0 table (253:7)
    Suppressed VG00-pvmove0 identical table reload.
    Loading VG00-LV_tmp table (253:5)
    Resuming VG00-LV_tmp (253:5)
    Creating volume group backup "/etc/lvm/backup/VG00" (seqno 44).
    Checking progress before waiting every 15 seconds
  /dev/sdb2: Moved: 0,0%
  /dev/sdb2: Moved: 40,6%
  /dev/sdb2: Moved: 84,4%
  /dev/sdb2: Moved: 100,0%
    Found volume group "VG00"
    Found volume group "VG00"
    Loading VG00-LV_tmp table (253:5)
    Suspending VG00-LV_tmp (253:5) with device flush
    Suspending VG00-pvmove0 (253:7) with device flush
    Found volume group "VG00"
    Found volume group "VG00"
    Found volume group "VG00"
    Resuming VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Resuming VG00-LV_tmp (253:5)
    Found volume group "VG00"
    Removing VG00-pvmove0 (253:7)
    Found volume group "VG00"
    Removing temporary pvmove LV
    Writing out final volume group after pvmove
    Creating volume group backup "/etc/lvm/backup/VG00" (seqno 46).

Maintnant j'ai donc 2 PV, l'un avec mes partitions de stockage (le disque dur), l'autre avec les partitions systèmes (le SSD) : VG00_PV_SSD.png VG00_dd.png

Déplacer le boot sur le SSD

Maintenant nous allons déplacer la dernière partition qui n'est pas un LVM puisque c'est le /boot en ext4, pour ça j'utilise la méthode de Remi :

root@enterprise ~> mke2fs -j -T ext4 -L boot /dev/sda1
root@enterprise ~> mount /dev/sda1 /mnt/tmp
root@enterprise ~> tar cf - -C /boot . | tar xvf - -C /mnt/tmp
root@enterprise ~> umount /mnt/tmp
root@enterprise ~> umount /boot

Ensuite il faut aller modifier le /etc/fstab en mettant à jour le UUID que vous trouverez avec :

root@enterprise ~> ll /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 16 janv. 10:55 10bd9879-81cc-4813-a0a7-4bb33c1a7c5f -> ../../sda1
lrwxrwxrwx 1 root root 10 15 janv. 20:17 128e5cbc-7a29-463a-8710-a2de40b74084 -> ../../dm-1
lrwxrwxrwx 1 root root 10 15 janv. 20:36 240b9e30-190e-48a6-9fcf-0d1edd85d801 -> ../../dm-2
lrwxrwxrwx 1 root root 10 15 janv. 20:40 848181fa-38fd-40e1-87b6-501ac68686fc -> ../../dm-6
lrwxrwxrwx 1 root root 10 15 janv. 20:17 86e1bee2-32d7-4103-b2f8-c654110d5a75 -> ../../dm-4
lrwxrwxrwx 1 root root 10 15 janv. 20:27 b166653c-e4ed-4481-a2b9-81162209696a -> ../../sdb1
lrwxrwxrwx 1 root root 10 15 janv. 20:41 b9665501-2d21-4f0a-af94-cd15ae238d3a -> ../../dm-5
lrwxrwxrwx 1 root root 10 15 janv. 20:17 d776dc2a-174f-46e5-99ca-084caed2da7e -> ../../dm-0
lrwxrwxrwx 1 root root 10 15 janv. 20:17 f6481e9e-a8c5-400c-a35d-4204f4a015d9 -> ../../dm-3

Pour terminer on monte le nouveau boot et on fait un grub-install

root@enterprise ~> mount /booot
root@enterprise ~> grub-install /dev/sda --recheck

Ensuite on récupère l'ancien boot (/dev/sdb1) et on le rajoute à VG00 :

root@enterprise ~> pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
root@enterprise ~> vgextend VG00 /dev/sdb1
  Volume group "VG00" successfully extended

Ce qui nous donne à la fin : VG00_final.png

4 réactions

  • De llaumgui De llaumgui - 17/01/2011, 12:24 #1
    bon g oublié de régénérer le grub...
  • De Oleo De Oleo - 15/02/2011, 16:47 #2

    Bonjour llaumgui,

    Article très intéressant je vous en remercie ! Je pense opter pour cette solution lorsque j'aurai reçu mon ssd.

    Par contre je ne comprends pas bien à la fin pourquoi vous récupérez l'ancien boot (/dev/sdb1) pour le rajouter à VG00. C'est bien la partition sda1 qui va servir de /boot non ? En soit on n'a plus besoin du sdb1 (ou bien je n'ai rien compris ^^). Merci pour vos éclaircissement !

  • De llaumgui De llaumgui - 15/02/2011, 19:00 #3

    En fait je refait un boot, la partition de l'ancien boot ne sert donc plus a rien. Je la remet donc dans le VG.

  • De Oleo De Oleo - 15/02/2011, 19:32 #4

    Ah oui ok il s'agit juste de récupérer l'espace de l'ancienne partition en fait. Merci :)

Attribution - Partage dans les Mêmes Conditions 4.0 International