Extension d'un disque LVM en environnement SAN

Alors ça ça ronfle comme titre ! Un SAN c’est super, c’est efficace, performant, tu peux étendre tes disques à chaud, gérer ton RAID au clic, faire de la haute dispo, te la raconter à la cafét’, bref c’est merveilleux. LVM aussi, c’est super : ça apporte pas mal de souplesse dans un environnement mouvant, et quand on fait de l’informatique professionnelle, c’est bien souvent le cas.

En gros, voici le topo : on a un volume logique (que certains appelleront abusivement “un(e) LUN”) ld_disk, mappé à un serveur server. Côté serveur, ce disque s’appellera directement (par comodité) ld_disk, donc via multipathd son nom sera /dev/mpath/ld_appli. Derrière on a monté directement l’artillerie LVM, sans partitionner (ce qui aurait été plus souple/facile/intelligent) : ce disque a été déclaré comme volume physique (PV), on a fait dessus un groupe de volumes (VG) vg_appli, sur lequel on a bêtement fait un seul volume logique (LV) sobrement appelé lv_appli. Ce volume fait initialement 300Go. Les besoins changent, et on vous demande de passer le tout à 500Go. L’OS est une RHEL 5, mais ça n’a pas d’importance a priori. Bon, on commence logiquement par étendre le disque logique côté SAN. Et on espère qu’on va pouvoir prendre en compte l’extension au niveau système sans perdre de données.

Mais comme trop de choses en ce bas monde, il est difficile de trouver des infos récentes sur le web. 99% des liens trouvés via Google vont dire que c’est impossible, ou que LVM ne le permet pas encore, qu’on n’a qu’à formatter ou recopier sur un autre disque. Quelques posts assez anciens (2004?) sur des forums dont j’ai perdu la référence hélas vont expliquer qu’il faut d’abord étendre la partition via fdisk. Seulement moi, je n’ai pas de partition, aïe.

Voici donc la marche à suivre :

# on cherche et on note le(s) chemin(s) vers notre disque au sens SCSI (exemple: 3:0:0:0 et 4:0:0:0)
multipath -ll
# on met le volume offline
vgchange -a n vg_appli
# on rescanne le périphérique au niveau SCSI
echo "1" > /sys/class/scsi_device/3\:0\:0\:0/device/rescan
echo "1" > /sys/class/scsi_device/4\:0\:0\:0/device/rescan
# on relance la découverte coté multipathd
multipath -F
multipath -v2
# puis on étend au niveau de LVM ; exemple :
pvscan
#=> PV /dev/mpath/ld_appli   VG vg_appli   lvm2 [300,00 GB / 0    free]
pvresize /dev/mpath/ld_appli
pvscan
#=> PV /dev/mpath/ld_appli   VG vg_appli   lvm2 [500,00 GB / 200,00 GB free]
# on réactive le VG
vgchange -a y vg_appli
# et on étend le LV via la taille :
lvextend -L +200G /dev/vg_appli/lv_appli
#ou via le nombre d'extents :
lvextend -l +123456 /dev/vg_appli/lv_appli
# il reste à faire l'extension au niveau EXT3 (attention, ces deux étapes sont très longues)
e2fsck -f /dev/vg_appli/lv_appli
resize2fs /dev/vg_appli/lv_appli

Hope this helps!