Augmenter la taille d’un volume physique LVM

Commencer par agrandir notre image disque dans vSphere:
- Mettre hors tension votre VM puis modifier les paramètres de disque dur.
- Mettre sous tension votre VM

Modification de la taille de la partition LVM

La procédure avec la commande fdisk, valable uniquement pour les tables de partition DOS (ce qui reste le plus courant sur les VM, à moins qu’elles soient en UEFI).

Nous allons commencer par identifier le volume physique (PV) que nous voulons agrandir. Pour cela, utilisez la commande pvs :
[root@portfolio8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.51g 0
Dans mon cas, je dispose de un volume physiques (PV)
Ici, j’ai agrandi mon image disque contenant les données, passant de 20 Go à 40 Go. La partition à agrandir sera donc /dev/sda2.
On ouvre alors fdisk, puis on affiche la table de partition en tapant « p » :

[root@portfolio8 ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a4d5f

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 41943039 20458496 8e Linux LVM

On va noter les valeurs en rouge : le numéro de la partition (« 2 » dans mon cas) et son premier secteur (ici, « 1026048 »).
Au passage, la partition LVM doit-être la dernière, sinon on ne pourra pas l’agrandir.

fdisk ne nous permettant pas de redimensionner les partitions, nous allons donc la supprimer pour la recréer.
La suppression d’une partition ne supprime que sa référence dans la table de partitionnement, les données sont toujours présentes sur le disque et ne sont pas effacées. En recréant la partition avec le même secteur de début, nous retrouveront donc toutes les données déjà présentes. De plus, fdisk n’effectue pas les modifications immédiatement : il met juste à jour sa représentation interne des partitions, et effectuera réellement les modifications à la fin, lorsque nous aurons terminé.

Afin de supprimer la partition, taper « d » puis le numéro de partition, si vous y êtes invité :
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 is deleted
Puis on recréer la partition. Tapez « n ». Lorsqu’on vous demande le type de partition, tapez « p » (primaire) si son numéro était compris entre 1 et 4, ou « e » (étendue) si son numéro était supérieur ou égal à 5. Ensuite, lorsque vous y êtes invité, entrez son numéro ainsi que le premier secteur (nous les avons notés plus haut). Validez la valeur par défaut pour le dernier secteur, ce qui devrait permettre d’utiliser tout l’espace disponible. Enfin, si on vous demande de supprimer la signature de la partition existante, répondez Non.

Récapitulons : (les valeurs en rouge sont celles que nous avons notés plus haut)
 Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (1026048-83886079, default 1026048):
Using default value 1026048
Last sector, +sectors or +size{K,M,G} (1026048-83886079, default 83886079):
Using default value 83886079
Partition 2 of type Linux and of size 39.5 GiB is set

Affichons la nouvelle table de partition :

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a4d5f

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 83 Linux

Tout va bien à l’exception du type de partition. Par défaut, fdisk créer une partition de type « Linux » (id : 83). Les partitions LVM sont de type « LVM Linux » (id : 8e).
Pour corriger cela, nous allons donc taper « t » puis lui indiquer que nous voulons que notre partition n°1 soit de type « 8e » (LVM).

Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): l

0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

On affiche de nouveau la table de partition :
 

Command (m for help): p

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a4d5f

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 8e Linux LVM
Tout semble bon, ce coup-ci ! Nous demandons donc à fdisk d’effectuer les modifications sur le disque en tapant « w ».

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

fdisk nous dit que la table de partition n’a pas pu être rechargée par le noyau après sa modification. C’est normal, des partitions sont montées sur ce disque.
On reboot donc la VM pour prendre en compte la nouvelle table de partition.
Regardons la taille de nos volumes physiques (PV) :
[root@portfolio8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.51g 0
Il fait toujours 20 (19,51) Go. C’est normal, il faut dire à LVM que nous avons agrandi sa partition:
[root@portfolio8 ~]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
On vérifie à nouveau la taille de notre volume physique (PV)
[root@portfolio8 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.51g 20.00g

Il fait bien désormais 40 Go (39.51). On vérifie notre groupe de volume (VG) :
[root@portfolio8 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.51g 20.00g
Nickel ! Il a automatiquement pris en compte l’espace supplémentaire
il ne reste plus qu’à ajouter l’espace à volumes logiques (LV). Dans mon cas, je vais ajouter 20 Go à mon / (centos-root)
[root@portfolio8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 18G 153M 100% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.6M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 497M 141M 357M 29% /boot
tmpfs 783M 0 783M 0% /run/user/1000
tmpfs 783M 0 783M 0% /run/user/0
[root@portfolio8 ~]# lvresize --resizefs --size +20G /dev/mapper/centos-root
Size of logical volume centos/root changed from <17.51 GiB (4482 extents) to <37.51 GiB (9602 extents).
Logical volume centos/root successfully resized.
meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=1147392 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0
data = bsize=4096 blocks=4589568, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4589568 to 9832448

Pour vérifier:
£[root@portfolio8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 38G 18G 21G 47% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.6M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 497M 141M 357M 29% /boot
tmpfs 783M 0 783M 0% /run/user/1000
tmpfs 783M 0 783M 0% /run/user/0
[root@portfolio8 ~]#