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!