Lv resize
De BlaxWiki
Révision datée du 19 septembre 2019 à 10:01 par 127.0.0.1 (discussion)
Extend LV sur KVM
On a ici une vm sous un hyperviseur KVM dont nous devons étendre la partition (cela est valable pour la partition système ou n'importe quelle autre partition). Les disques de la vm sont des LV, mais c'est le même principe si les disques de la VM sont des fichiers. On a donc un gros PV, un gros VG où il reste de de la place pour crééer ou étendre des LV. Attention, le volume logique LV est une boite, le système de fichier FS est le contenu de la boite. Augmenter la taille du contenu sans augmenter la taille de la boîte peut poser des problèmes.
Sauvegarde du disque d'origine
'''!! IMPORTANT : il faut éteindre la VM avant un faire un backup du LV !!'''
Si on a la place, il est préférable de faire une sauvegarde du disque qui sera à dupliquer. Dans le cas d'un disque en LV, sur le KVM hébergeant la machine virtuelle, vérifier la taille du LV de la VM en lançant la commande :
# lvdisplay /dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root
--- Logical volume ---
LV Path /dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root
LV Name vitrine-www2.ecomobilier.fr_root
VG Name vol_kvm1
LV UUID 3mK4HX-yA4C-LWEy-tA3Y-VgyO-lLCu-Q16aVt
LV Write Access read/write
LV Creation host, time kvm1.ecomobilier.fr, 2015-09-04 16:25:59 +0200
LV Status available
# open 1
LV Size 70.00 GiB
Récupérer la taille du LV (LV Size), vérifier qu il reste assez de place sur le volume en question (commande {{{vgs}}}) et créer le LV de destination : lvcreate -L$TAILLE -n $NOMDULV $NOMDUVG
Il est impératif de créer le LV de destination avant de faire le dd pour la copie. Vérifier avec la commande {{{pvs}}} que l'on ait bien la place sur le VG ou se trouvera le LV de backup.
Si on n'a pas la place sur un PV pour copier la VM, on peut la copier dans un fichier sur une partition locale : {{{dd if=/dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root of=/root/vitrine-www2.ecomobilier.fr_root_backup bs=4M}}}.
* Création du LV de backup : On le créé de la même taille que le LV d'origine avec la commande : {{{lvcreate -L70G -n vitrine-www2.ecomobilier.fr_root_backup vol_kvm1}}}
* Copie du LV (la commande bs à la fin de la ligne est très important sinon cela va prendre des heures) : {{{dd if=/dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root of=/dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root_backup bs=4M}}}
Augmentation de la taille du LV d'origine
Augmentation de la partition volume pour atteindre une taille cible de 100 Gb (taille d'origine 70 Gb) :
lvextend -L +30G /dev/vol_kvm/rfs1-ppr.grdf.fr_data2-ppr.grdf.fr_data
/!\ Ici il y a une étape très importante pour voir qu'elle est le premier secteur du disque. Il faut faire un fdisk -u -l sur le LV : le -u sert à spécifier que l'on veut un affichage en mode secteur :
[root@] fdisk -u -l /dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root
Device Boot Start End Blocks Id System
/dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root1 2048 209715199 104856576 83 Linux
On voit bien que le secteur de "Start" est à 2048. Lorsque l'on va recréer la partition il faudra bien remettre le même nombre.
/!\ Il arrive parfois que des vieilles partitions apparaissent avec un secteur de départ à 63 et que fdisk force une re-création au 2048. Si vous validez ça sur un disque système, vous pétez la MBR.
Pour passer outre ce problème il faut lancer fdisk en forçant le secteur à 63. ex : {{{ fdisk -c -u -S 63 /dev/xxxxxxx }}}
* Si ca ne passe pas avec Fdisk qui dit que le "First sector" à 63 est out of range, on utilise parted :
[root@hv2.ants.interieur.gouv.fr mnt]# parted /dev/vol_hv2/xxxx
unit s (pour passer en sector)
print (pour afficher la table)
Model: Linux device-mapper (linear) (dm)
Disk /dev/dm-0: 754974720s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 63s 587202559s 587202497s primary ext3
rm 1 (pour supprimer la 1ere partition)
mkpart (pour créer)
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 63
End? 100%
(ici on a mis 100% pour lui dire qu il prenne toute la place possible)
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) print
Number Start End Size Type File system Flags
1 63s 754974719s 754974657s primary ext3
Suppression et recréation de la partition :
# fdisk -u /dev/vol_kvm/rfs2-ppr.grdf.fr_data }}}
/!\ On va supprimer la partition principale, puis recréer une partition primary, EN METTANT COMME PREMIER SECTEUR CELUI QU ON A RÉCUPÉRÉ CI DESSUS. Pour le dernier secteur, laisser celui par défaut.
Filesystem en Ext4
Fsck & resize2fs On "ouvre" les sous partitions du LV : kpartx -av /dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root On fait un fsck sur la partition du LV : fsck -f /dev/mapper/vol_kvm1-vitrine--www2.ecomobilier.fr_root1 On resize la partition (cela est valable uniquement pour les linux, pour les windows ce n'est pas nécessaire) : resize2fs /dev/mapper/vol_kvm1-vitrine--www2.ecomobilier.fr_root1 On refait un fsck sur la partition du LV : fsck -f /dev/mapper/vol_kvm1-vitrine--www2.ecomobilier.fr_root1 On "referme" les sous partitions du LV : kpartx -d /dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root Il ne reste plus qu'à redémarrer la VM et vérifier que l'on ait bien la bonne taille
Filesystem en Xfs
Augmentation de la partition volume pour atteindre une taille cible de 100 Gb (taille d'origine 70 Gb) :
lvextend -L +30G /dev/vol_kvm/rfs1-ppr.grdf.fr_data2-ppr.grdf.fr_data }}}
/!\ Ici il y a une étape très importante pour voir qu'elle est le premier secteur du disque. Il faut faire un fdisk -u -l sur le LV : le -u sert à spécifier que l'on veut un affichage en mode secteur
[root@] fdisk -u -l /dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root
Device Boot Start End Blocks Id System
/dev/vol_kvm1/vitrine-www2.ecomobilier.fr_root1 2048 209715199 104856576 83 Linux
On voit bien que le secteur de "Start" est à 2048. Lorsque l'on va recréer la partition il faudra bien remettre le même nombre.
/!\ Il arrive parfois que des vieilles partitions apparaissent avec un secteur de départ à 63 et que fdisk force une re-création au 2048. Si vous validez ça sur un disque système, vous pétez la MBR.
Pour passer outre ce problème il faut lancer fdisk en forçant le secteur à 63. ex : {{{ fdisk -c=dos -u -S 63 /dev/xxxxxxx }}}
Suppression et recréation de la partition
# fdisk -u /dev/vol_kvm/rfs2-ppr.grdf.fr_data }}}
/!\ On va supprimer la partition principale, puis recréer une partition primary, EN METTANT COMME PREMIER SECTEUR CELUI QU ON A RÉCUPÉRÉ CI DESSUS. Pour le dernier secteur, laisser celui par défaut.
Surtout PAS de "Fsck & resize2fs" pour les Filesystem en XFS !!!!
On "ouvre" les sous partitions du LV :
kpartx -av /dev/vol_kvm/rfs2-ppr.grdf.fr_data
On fait un xfs_growfs sur le point de montage et non pas sur le driver directement !!
# mkdir -p /mnt/rfs2-ppr.grdf.fr_data
# mount /dev/mapper/vol_kvm-rfs2--ppr.grdf.fr_data1 /mnt/rfs2-ppr.grdf.fr_data
# xfs_growfs /mnt/rfs2-ppr.grdf.fr_data
# umount /opt/rfs2-ppr.grdf.fr_data
On "referme" les sous partitions du LV :
kpartx -d /dev/vol_kvm/rfs2-ppr.grdf.fr_data
Il ne reste plus qu'à redémarrer la VM et vérifier que l'on ait bien la bonne taille
Extend LV sur Azure
Ici le contexte est un peu différent. On a un LV qui prend toute la taille du VG, qui lui même prend toute la taille du PV.
Extend sur une partition (sdb1)
Par défaut Azure créée une partition sda1 pour mettre l'OS. Une fois qu'on a étendu le disque dans Azure, on peut augmenter la partition et les PV / VG / LV sur la VM.
Création du LV à l'origine
Disque de 10 Go créé dans Azure [root@centos7 ~]# fdisk /dev/sdb (on lui met les 10 Go sur sdb1 avec type LVM linux) [root@centos7 ~]# pvcreate /dev/sdb1 [root@centos7 ~]# vgcreate benvg /dev/sdb1 [root@centos7 ~]# lvcreate -l 100%FREE -n benlv benvg [root@centos7 ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 benvg lvm2 a-- <10.00g 0 [root@centos7 ~]# vgs VG #PV #LV #SN Attr VSize VFree benvg 1 1 0 wz--n- <10.00g 0 [root@centos7 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert benlv benvg -wi-a----- <10.00g [root@centos7 ~]# mkfs.xfs /dev/mapper/benvg-benlv [root@centos7 ~]# mount /dev/benvg/benlv /ben [root@centos7 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/benvg-benlv 10G 33M 10G 1% /ben
Extend
Dans Azure je passe la taille du disque de 10 Go à 15 Go
[root@centos7 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000af391
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20971519 10484736 8e Linux LVM
[root@centos7 ~]# partprobe
[root@centos7 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000af391
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20971519 10484736 8e Linux LVM
On démonte /ben
On va augmenter la taille de la partition sdb1 : fdisk /dev/sdb, suppression de la partition 1 et on la recréé
[root@centos7 /]# fdisk -l /dev/sdb
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000af391
Device Boot Start End Blocks Id System
/dev/sdb1 2048 31457279 15727616 83 Linux
Lorsqu on fait un partprobe :
[root@centos7 /]# partprobe /dev/sdb
^[[AError: Partition(s) 1 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
Il faut désactiver le LV :
[root@centos7 /]# lvchange -a n /dev/benvg/benlv
[root@centos7 /]# partprobe
!! on n a plus d erreur maintenant !!
[root@centos7 /]# pvresize -d -v /dev/sdb1
Wiping internal VG cache
Wiping cache of LVM-capable devices
Archiving volume group "benvg" metadata (seqno 7).
Resizing volume "/dev/sdb1" to 31455232 sectors.
Resizing physical volume /dev/sdb1 from 2559 to 3839 extents.
Updating physical volume "/dev/sdb1"
Creating volume group backup "/etc/lvm/backup/benvg" (seqno 8).
Physical volume "/dev/sdb1" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
[root@centos7 /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 benvg lvm2 a-- <15.00g 5.00g
[root@centos7 /]# lvchange -a y /dev/benvg/benlv
[root@centos7 /]# vgs
VG #PV #LV #SN Attr VSize VFree
benvg 1 1 0 wz--n- <15.00g 5.00g
[root@centos7 /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
benlv benvg -wi-a----- <10.00g
[root@centos7 /]# lvextend -l +100%FREE /dev/benvg/benlv
Size of logical volume benvg/benlv changed from <10.00 GiB (2559 extents) to <15.00 GiB (3839 extents).
Logical volume benvg/benlv successfully resized.
!! Si on ne met pas l'option -r (resize file system, on va rester à 10 lorsqu on fera le mount)
[root@centos7 /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
benlv benvg -wi-a----- <15.00g
[root@centos7 /]# mount /dev/benvg/benlv /ben
[root@centos7 /]# df -h
/dev/mapper/benvg-benlv 10G 33M 10G 1% /ben
[root@centos7 /]# umount /ben
[root@centos7 /]# lvextend -r -l +100%FREE /dev/benvg/benlv
Phase 1 - find and verify superblock...
......
data blocks changed from 2620416 to 3931136
[root@centos7 /]# mount /dev/benvg/benlv /ben
[root@centos7 /]# df -h
/dev/mapper/benvg-benlv 15G 33M 15G 1% /ben
Extend sur tout le disque (sdb)
Lorsque le PV est fait directement sur le disque entier il y a moins de manipulation. Ici notre disque fait 15 Go (comme le pv, vg et le lv) et on le passe à 20 Go dans Azure.
Puis sur la vm on fait :
[root@centos7 /]# partprobe /dev/sdb
[root@centos7 /]# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
[root@centos7 /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb benvg lvm2 a-- <15.00g 0
[root@centos7 /]# pvresize -d -v /dev/sdb
Wiping internal VG cache
Wiping cache of LVM-capable devices
Archiving volume group "benvg" metadata (seqno 2).
Resizing volume "/dev/sdb" to 41943040 sectors.
Resizing physical volume /dev/sdb from 3839 to 5119 extents.
Updating physical volume "/dev/sdb"
Creating volume group backup "/etc/lvm/backup/benvg" (seqno 3).
Physical volume "/dev/sdb" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
[root@centos7 /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb benvg lvm2 a-- <20.00g 5.00g
[root@centos7 /]# vgs
VG #PV #LV #SN Attr VSize VFree
benvg 1 1 0 wz--n- <20.00g 5.00g
[root@centos7 /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
benlv benvg -wi-a----- <15.00g
[root@centos7 /]# lvextend -r -l +100%FREE /dev/benvg/benlv
[root@centos7 /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
benlv benvg -wi-a----- <20.00g