Au tout début, lorsque j’ai commencé à laisser Linux créer des Volumes Group par défaut à l’installation, je trouvais ça compliqué. Mais en fait, après quelques années, LVM n’arrête pas de me surprendre. Ce système est génial!
Dernièrement, le disque de 2TB contenant l’intégralité des données (/home) commençait à montrer de sérieux signes de faiblesses. Il était temps de le remplacer avant de tout perdre. Ceux qui ont déjà remplacé un disque sans LVM dont une partition abritai le /home seront certainement d’accord avec moi: c’est chiant. Avec LVM2, c’est presque trop facile.
Voici comment procéder (toutes les commandes sont lancées avec l’utilisateur root):
Mettre dans le serveur le nouveau disque d’une taille égale ou supérieur au disque à remplacer, ou au moins au volume de données présente sur le disque. Ce qui n’est spécialement facile à savoir si votre Volume Groupe (VG) est composé de plusieurs Extends. Bref dans mon cas, j’ai ajouté un disque de taille équivalente.
afin de connaitre les informations du nouveau disque, lancer:
# fdisk -l
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes 255 heads, 63 sectors/track, 243201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes 255 heads, 63 sectors/track, 243201 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
on obtient la liste des disques et partitions. 2 disques de 2 TB sont présentés.
Pour savoir quels disques sont intégrés à des Volume Groups, lancer:
# pvs
PV VG Fmt Attr PSize PFree /dev/sda2 vg_server lvm2 a-- 148.52g 0 /dev/sdb vg_server lvm2 a-- 1.82t 0
/dev/sdb faisant partie du VG « vg_server », le nouveau disque est /dev/sdc
Initaliser le disque en Volume Physique LVM2 (PV)
# pvcreate /dev/sdc
L’initialisation du volume physique n’est plus nécessaire depuis la version 2.02.54 (l’initialisation s’exécute automatiquement si nécessaire). Cependant, je trouve préalable de l’initialiser manuellement afin de diagnostiquer plus facilement les éventuels problèmes lié à l’initialisation (surtout si le disque n’est pas neuf et comporte déjà des partitions), ou conserver la compatibilité avec les anciennes versions de LVM.
Intégrer le nouveau PV au VG:
# vgextend vg_server /dev/sdc
Si tout va bien, on obtient le message:
Volume group « vg_server » successfully extended
Pour vérifier le nombre d’extends, relancer:
# pvs
PV VG Fmt Attr PSize PFree /dev/sda2 vg_server lvm2 a-- 148.52g 0 /dev/sdb vg_server lvm2 a-- 1.82t 0 /dev/sdc vg_server lvm2 a-- 1.82t 1.82t
Pour déplacer les données du disque à retirer vers le nouveau disque, lancer:
# pvmove -b /dev/sdb /dev/sdc
-b : background mode (lance le déplacement en tâche de fond).
/dev/sdb : disque source
/dev/sdc : disque de destination
Le déplacement étant lancé en tâche de fond, la commande suivante peut être lancée si l’on désire suivre l’avancement du déplacement (et surtout savoir si c’est terminé):
# pvmove -i5 /dev/sdb
La commande rafraichi l’affichage toutes les 5 secondes (i5). Je vous laisse deviner le paramètre à remplacer si vous voulez rafraichir toutes les 10 secondes…
Une fois le déplacement terminé, l’ancien disque peut être retiré du volume group:
# vgreduce /dev/sdb
Si tout va bien, on obtient le message:
Removed « /dev/sdb » from volume group « vg_server »
A nouveau, on peux vérifier le nombre d’Extends dans le VG:
# pvs
PV VG Fmt Attr PSize PFree /dev/sda2 vg_server lvm2 a-- 148.52g 0 /dev/sdc vg_server lvm2 a-- 1.82t 0
Il ne reste plus qu’à retirer le disque défectueux, de préférence à froid, et à l’envoyer au recyclage.