LVM Linux

De DocUnix.

Sommaire

Physical Volumes

  • pvscan :

Recherche les PVs sur tous les disques.

root@SpaceServer:/tmp> pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- ACTIVE   PV "/dev/cciss/c0d0p2" of VG "rootvg" [67.32 GB / 49.32 GB free]
pvscan -- total: 1 [67.33 GB] / in use: 1 [67.33 GB] / in no VG: 0 [0]
  • pvcreate :

Initialise le disque pour pouvoir être utilisé avec LVM. Si un PV existe déjà on peut utiliser -ff mais dans ce cas il faut être certain de ne pas écraser un disque utilisé ailleurs.

root@SpaceServer:/tmp> pvcreate /dev/emcpowerd
pvcreate -- physical volume "/dev/emcpowerd" successfully created
  • pvdisplay :

Affiche les informations sur un PV (VGs attachés, etc) :

root@SpaceServer:/> pvdisplay /dev/emcpowerf
--- Physical volume ---
PV Name               /dev/emcpowerf
VG Name               vg_col1
PV Size               108.93 GB [228433792 secs] / NOT usable 32.19 MB [LVM: 141 KB]
PV#                   1
PV Status             available
Allocatable           yes (but full)
Cur LV                3
PE Size (KByte)       32768
Total PE              3484
Free PE               0
Allocated PE          3484
PV UUID               pmTDba-3lWV-8WEV-riwI-WkLG-odm3-1QoBpM

RAID Logiciel

Créer un volume raid

Récupérer les disk sur lesquels sont les metadevices (on peut récupérer les infos de ces commandes) :

mdadm --create /dev/md0 -l 1 --raid-devices=2 /dev/<part1_disk1> /dev/<part1_disk2>
mdadm --create /dev/md1 -l 1 --raid-devices=2 /dev/<part2_disk1> /dev/<part2_disk2>

Dans le cas d'un cluster MCServiceGuard Dans le fichier /etc/cmcluster/conf/mdadm.conf rajouter :

DEVICE /dev/<part1_disk1> /dev/<part1_disk2>
DEVICE /dev/<part2_disk1> /dev/<part2_disk2>

Hors cluster Dans le fichier /etc/mdadm.conf rajouter :

DEVICE /dev/<part1_disk1> /dev/<part1_disk2>
DEVICE /dev/<part2_disk1> /dev/<part2_disk2>

Puis pour vérifier :

mdadm --examine --scan -c <PATH>/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=cdeabe60:356153ce:16bed617:874f97db
   devices=/dev/<part1_disk1>,/dev/<part1_disk2>
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=66458bd1:5bb9acd4:18503815:b36812b6
   devices=/dev/<part2_disk1>,/dev/<part2_disk2>

Si tout est ok on peut écrire dans le fichier :

mdadm --examine --scan -c <PATH>/mdadm.conf >> <PATH>/mdadm.conf

Remplacer un disque défectueux

Changer le disque. Créer une partition sur le nouveau disque en type "fd" (Raid auto detect). Puis passer la commande :

mdadm --re-add /dev/mdx /dev/sdx1

Pour contrôler l'état du raid :

cat /proc/mdstat

Augmenter la taille du raid après changement des disques

Pour changer la taille, il faut déterminer la taille de la plus petite partition. Ensuite, il faut calculer la taille en KiloBytes -128 (pour le superblock). Une fois ce paramètre déterminer, il faut passer la commande :

mdadm --grow -z <taille en KB> /dev/mdx

Si on a vu trop large, le système indique qu'il n'a pas suffisamment de place sur le device.

Augmenter la taille du pv pour le lvm2

Une fois la taille du raid augmenté, il faut l'indiquer au lvm2 par la commande :

pvresize /dev/mdx

Volume Groups

  • vgcreate :

Permet de créer un VG sur un disque initialisé avec pvcreate.

root@SpaceServer:/tmp> pvcreate /dev/emcpowerd
pvcreate -- physical volume "/dev/emcpowerd" successfully created

root@SpaceServer:/tmp> vgcreate vg_apps /dev/emcpowerd
vgcreate -- INFO: using default physical extent size 32 MB
vgcreate -- INFO: maximum logical volume size is 2 Terabyte
vgcreate -- doing automatic backup of volume group "vg_apps"
vgcreate -- volume group "vg_apps" successfully created and activated
  • vgextend :

Permet d'ajouter un disque à un VG existant.

root@SpaceServer:/tmp> vgextend vg_apps /dev/emcpowera
vgextend -- INFO: maximum logical volume size is 2 Terabyte
vgextend -- doing automatic backup of volume group "vg_apps"
vgextend -- volume group "vg_apps" successfully extended
  • vgreduce :

Permet de retirer un disque à un VG.

root@SpaceServer:/tmp> vgreduce vg_apps /dev/emcpowera
vgreduce -- doing automatic backup of volume group "vg_apps"
vgreduce -- volume group "vg_apps" successfully reduced by physical volume:
vgreduce -- /dev/emcpowera
  • vgdisplay :

Affiche les infos sur un VG donné, notamment les disques sur lesquels il se trouve.

root@SpaceServer:/etc/postfix> vgdisplay -v vg_dex4
--- Volume group ---
VG Name               vg_dex4
VG Access             read/write
VG Status             available/resizable
VG #                  4
MAX LV                256
Cur LV                9
Open LV               8
MAX LV Size           2 TB
Max PV                256
Cur PV                1
Act PV                1
VG Size               54.41 GB
PE Size               32 MB
Total PE              1741
Alloc PE / Size       1193 / 37.28 GB
Free  PE / Size       548 / 17.12 GB
VG UUID               MQ2P2L-S4Qi-Ig8q-LYW1-0vJN-V4LJ-b2CXcK
 
--- Logical volume ---
truncated 

--- Physical volumes ---
PV Name (#)           /dev/emcpowerc (1)
PV Status             available / allocatable
Total PE / Free PE    1741 / 548
  • vgscan :

Recherche les VGs sur tous les disques et met à jour /etc/lvmtab.

root@SpaceServer:/tmp> vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- found active volume group "rootvg"
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group
  • vgchange :

Permet de changer les attributs d'un VG. En général on utilise vgchange -an rootvg pour désactiver un VG (on doit dans ce cas avoir démonté les FS) et vgchange -ay rootvg pour activer.

  • vgremove :

Permet de supprimer un VG (on doit d'abord le désactiver).

vgremove vg_apps
  • vgrename :

Permet de renommer un VG sans le désactiver. Attention à bien modifer /etc/fstab

vgrename vg_apps vg_appli

Logical Volumes

  • lvcreate :

Permet de créer un LV sur un VG donné.

root@SpaceServer:/tmp> lvcreate -L 2G -n lv_test vg_apps
lvcreate -- doing automatic backup of "vg_apps"
lvcreate -- logical volume "/dev/vg_apps/lv_test" successfully created
  • lvextend :

Permet d'augmenter la taille du LV. Umount d'abord du FS pour faire un fsck si necessaire. Il est possible d'ajouter le disque ou les disques cible en fin de ligne

root@SpaceServer:/tmp> lvextend -L +1G /dev/vg_apps/lv_test [/dev/dsk]
lvextend -- extending logical volume "/dev/vg_apps/lv_test" to 3 GB
lvextend -- doing automatic backup of volume group "vg_apps"
lvextend -- logical volume "/dev/vg_apps/lv_test" successfully extended
  • lvreduce :

Permet de réduire la taille du LV. Attention on réduit d'abord le FS et seulement ensuite on peut réduire le LV.

root@SpaceServer:/tmp> lvreduce -L -1G /dev/vg_apps/lv_test
lvreduce -- WARNING: reducing active logical volume to 2 GB
lvreduce -- THIS MAY DESTROY YOUR DATA (filesystem etc.)
lvreduce -- do you really want to reduce "/dev/vg_apps/lv_test"? [y/n]: y
lvreduce -- doing automatic backup of volume group "vg_apps"
lvreduce -- logical volume "/dev/vg_apps/lv_test" successfully reduced
  • lvdisplay :

Affiche les différentes infos sur le LV. Utilisez -v pour avoir plus d'infos.

root@SpaceServer:/tmp> lvdisplay /dev/vg_apps/lv_test
--- Logical volume ---
LV Name                /dev/vg_apps/lv_test
VG Name                vg_apps
LV Write Access        read/write
LV Status              available
LV #                   1
# open                 0
LV Size                2 GB
Current LE             64
Allocated LE           64
Allocation             next free
Read ahead sectors     1024
Block device           58:9
  • lvremove :

Permet de supprimer un LV.

root@SpaceServer:/tmp> lvremove /dev/vg_apps/lv_test
lvremove -- do you really want to remove "/dev/vg_apps/lv_test"? [y/n]: y
lvremove -- doing automatic backup of volume group "vg_apps"
lvremove -- logical volume "/dev/vg_apps/lv_test" successfully removed

Filesystems

  • extendfs :

peut se faire à chaud, mais pas systématiquement; Après avoir étendu le lv :

resize2fs /dev/vg_name/lv_name

Soit sous Red-hat avec la commande suivante après avoir étendu le lv :

ext2online /dev/vg_name/lv_name

Testé sur Gentoo, après l'extension du lv, lors de la tentative d'extension du fs, la commande a répondue :

resize2fs /dev/vg_name/lv_name
resize2fs 1.41.9 (22-Aug-2009)
SVP exécutez « e2fsck -f /dev/vg_name/lv_name » d'abord.

Ce qui oblige de travailler sur un fs démonté. CQFD.

La meme operation le 22 Avril 2011 sur une gentoo a jour, la commande est passée à chaud.

La meme operation le 8 février 2012 sur une gentoo a jour, la commande est passée à froid :-(

Pour info, extension de 100GO d'un fs de 500, prend environs 15 minutes sur 4 disques de 500 GO SATA 1 en RAID 5.

Pour info, extension de 200GO d'un fs de 600, prend environs 10 minutes sur 4 disques de 1 TO SATA II en RAID 5.

  • shrink fs

Cette opération a été validée sur une Gentoo kernel 3.2.1 r2 et resize2fs 1.41.14.

ATTENTION : Cette opération ne peut se faire que filesystem démonté.

On commence par démonter le filesystem, puis il faut passer un e2fsk

Pour diminuer la taille d'un fs passer la commande resize2fs en spécifiant la taille souhaitée en méga (M) ou Giga (G). L'operation prend un certain temps.

Attention, cela peut ne pas fonctionner si des fichiers se trouvent en bout de fs.

Ensuite, il faudra diminuer la taille du lv associé en veillant bien de spécifier la taille exacte du filesystem.

umount /dev/vg_name/lv_name

e2fsck /dev/vg_name/lv_name

en méga :
resize2fs /dev/vg_name/lv_name xxM
en Giga :
resize2fs /dev/vg_name/lv_name xxG

Ensuite diminuez la taille du lv, c.f. paragraphe/reducelv.

Pensez a remonter le fs en fin d'operation ;-)

Baie Pillar sur fibre

Découverte des disques :

find /sys/devices -name rescan | while read x; do echo 1 >$x; done 

ou avec le paquet hp "fibreutils" :

/opt/hp/hp_fibreutils/hp_rescan 

ou en mode plutôt brutal pour chaque carte fibre (x):

echo 1 > /sys/class/fc_host/hostx/issue_lip 
echo - - - >/sys/class/scsi_host/hostx/scan 

Etat des lieux des disques

multipath -ll

et pour l'inventaire des devices scsi :

lsscsi

Nettoyage des anciens disques supprimés

find /sys/devices -name delete | grep :0/delete | while read x ; do echo 1 >$x ; done
Outils personnels