Jouer avec LVM quand t’es dans la sauce
Aujourd’hui on va voir un peu de LVM parce que je voulais documenter un cas que j’ai rencontrĂ© : un disque avec une table de partition dos sur un système en gpt avec une partition de type linux au lieu de linux lvm. Naturellement au reboot, je me suis retrouvĂ© dans le menu grub et l’OS n’a pas dĂ©marrĂ©.
Cet article est un peu la suite du précédent avec quelques mois de décalage.
Montage de la VM et partitionnement LVM
Direction proxmox, et je créé une nouvelle VM Debian 12 avec un bios OVMF (UEFI), 1 vcpu, 2G de ram et 20G de disque. Cette machine étant vouée à être supprimée, je la laisse en DHCP.
L’installation se fait comme toujours en mode expert et tant qu’Ă jouer avec LVM, je vais documenter le partitionnement manuel ; comme ça je saurai oĂą chercher si j’ai un doute Ă l’avenir.

La table de partition est donc gpt puisque j’ai volontairement pris un bios UEFI.
J’ajoute tout d’abord ma partition EFI de 1G (512M Ă©taient nĂ©cessaires mais avec l’arrivĂ©e de Trixie, on utilise plutĂ´t 1G directement) et je sĂ©lectionne Partition système EFI pour l’usage.

Je configure alors LVM dans lequel je dĂ©fini mon Volume Group VG_MAIN et mes Logical Volumes LV_SWAP de 2G et LV_ROOT avec ce qui reste. Je ne dois pas oublier de dĂ©finir l’usage des partitions nouvellement créées.

J’avais un doute, mais l’installeur a bien créé ma sda2 lorsque j’ai initialisĂ© lvm.
root@testlvm:~# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AAF5A1B6-8B12-45B3-873E-707DE64F945D
Device Start End Sectors Size Type
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 41940991 39987200 19,1G Linux LVM
Disk /dev/mapper/VG_MAIN-LV_SWAP: 1,91 GiB, 2046820352 bytes, 3997696 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 /dev/mapper/VG_MAIN-LV_ROOT: 17,16 GiB, 18425577472 bytes, 35987456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesNote bien que :
- Le DiskLabel type est
gpt - le type de partition de
/dev/sda2estLinux LVM
Casser LVM
J’ajoute un disque secondaire dans proxmox et je scan les disques prĂ©sents dans le système :

root@testlvm:~# for i in /sys/class/scsi_device/*/device/rescan; do echo 1 > $i;done
root@testlvm:~# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AAF5A1B6-8B12-45B3-873E-707DE64F945D
Device Start End Sectors Size Type
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 41940991 39987200 19,1G Linux LVM
Disk /dev/mapper/VG_MAIN-LV_SWAP: 1,91 GiB, 2046820352 bytes, 3997696 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 /dev/mapper/VG_MAIN-LV_ROOT: 17,16 GiB, 18425577472 bytes, 35987456 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 /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesMon disque additionnel /dev/sdb est bien vu. Je vais volontairement le passer en dos linux.
root@testlvm:~# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0x34972a8f.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039):
Created a new partition 1 of type 'Linux' and of size 20 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.Si je vĂ©rifie avec fdisk, j’ai bien obtenu la situation conflictuelle que je souhaitais :
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x34972a8f
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 41943039 41940992 20G 83 LinuxJ’Ă©tends alors mon Volume Group LVM Ă ce disque ainsi que mon Logical Volume :
root@testlvm:~# vgextend VG_MAIN /dev/sdb1
Volume group "VG_MAIN" successfully extended
root@testlvm:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VG_MAIN lvm2 a-- <19,07g 0
/dev/sdb1 VG_MAIN lvm2 a-- <20,00g <20,00g
root@testlvm:~# lvextend -l +100%FREE /dev/VG_MAIN/LV_ROOT
Size of logical volume VG_MAIN/LV_ROOT changed from 17,16 GiB (4393 extents) to <37,16 GiB (9512 extents).
Logical volume VG_MAIN/LV_ROOT successfully resized.Vu que je suis un tocard, j’ai oubliĂ© de redimensionner mon système de fichier en mĂŞme temps que mon Logical Volume ; je le fais donc sĂ©parĂ©ment et je contrĂ´le avec df :
root@testlvm:~# resize2fs /dev/mapper/VG_MAIN-LV_ROOT
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/VG_MAIN-LV_ROOT is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/mapper/VG_MAIN-LV_ROOT is now 9740288 (4k) blocks long.
root@testlvm:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 961M 0 961M 0% /dev
tmpfs 197M 468K 196M 1% /run
/dev/mapper/VG_MAIN-LV_ROOT 37G 1,6G 34G 5% /
tmpfs 982M 0 982M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
/dev/sda1 952M 5,9M 946M 1% /boot/efiOh la la, quelle surprise ! Mon OS ne démarre plus !
Réparer LVM

Pour solutionner ça, je repart sur mon iso Debian que je monte dans le lecteur de galette de ma VM et je dĂ©marre en Rescue mode sans monter le système de fichier de l’hĂ´te. Je te refais pas un fdisk -l parce qu’entre temps on a continuĂ© de tenter de tout casser en modifiant le type de disque de linux Ă linux lvm mais ça n’a pas solutionnĂ© le problème… Ca doit donc ĂŞtre liĂ© au type de table de partition (dos|gpt) plutĂ´t qu’au format de partition (linux|linux lvm).
Le principe sera de redimensionner le système de fichier et son volume logique pour tenir sur un seul disque. Si t’as dĂ©jĂ rempli l’espace disque, t’es mal ; t’aurais dĂ» essayer de reboot avant de continuer ta prod’.
Busybox v1.35.0 (Debian 1:1.35.0-4+b5) buit-in shell (ash)
Enter 'help' for a list of buit-in commands.
~Â # e2fsck -f /dev/mapper/VG_MAIN-LV_ROOT
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/VG_MAIN-LV_ROOT: 30547/2431680 files (0.2% non-contiguous), 604737/9740288 blocks
~Â # resize2fs /dev/mapper/VG_MAIN-LV_ROOT 16G
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/mapper/VG_MAIN-LV_ROOT to 4194304 (4k) blocks.
The filesystem on /dev/mapper/VG_MAIN-LV_ROOT is now 4194304 (4k) blocks long.
~Â # lvreduce -L 17G -v /dev/mapper/VG_MAIN-LV_ROOT
WARNING: Reducing active logical volume to 17.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce VG_MAIN/LV_ROOT? [y/n]: y
Accepted input: [y]
Reducing logical volume VG_MAIN/LV_ROOT to 17.00 GiB
Size of logical volume VG_MAIN/LV_ROOT changed from <37.16 GiB (9512 extents) to 17.00 GiB (4352 extents).
Archiving volume group "VG_MAIN" metadata (seqno 5).
Loading table for VG_MAIN-LV_ROOT (253:1).
Suspending VG_MAIN-LV_ROOT (253:1) with device flush
Resuming VG_MAIN-LV_ROOT (253:1).
Logical volume VG_MAIN/LV_ROOT sucessfully resized.
Creating volume group backup "/etc/lvm/backup/VG_MAIN" (seqno 6).
~Â # pvmove /dev/sdb1
No data to move for VG_MAIN.
~Â #Â vgreduce VG_MAIN /dev/sdb1
Removed "/dev/sdb1" from volume group "VG_MAIN"
~ # rebootLĂ je retrouve mon shell habituel, ma connexion ssh et je suis plus obligĂ© de te retaper les commandes et leurs rĂ©sultats Ă la main, ça va mieux ! Mais par contre je suis reparti avec 20G alors que j’en veux 40… Voyons comment faire.
Tout d’abord, je veux terminer d’enlever le disque secondaire. CĂ´tĂ© système et cĂ´tĂ© proxmox.
root@testlvm:~# echo "1" >/sys/block/sdb/device/delete
root@testlvm:~# CĂ´tĂ© hyperviseur, je l’ai dĂ©tachĂ© dans ma VM et je l’ai supprimĂ©.
J’ai Ă©tendu le disque dans proxmox (sĂ©lection du disque > Action disque > Redimensionner) Ă 40G. Maintenant on va gĂ©rer ça cĂ´tĂ© système.
root@testlvm:~# for i in /sys/class/scsi_device/*/device/rescan; do echo 1 > $i;done
root@testlvm:~# fdisk -l
GPT PMBR size mismatch (41943039 != 83886079) will be corrected by write.
The backup GPT table is not on the end of the device.
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AAF5A1B6-8B12-45B3-873E-707DE64F945D
Device Start End Sectors Size Type
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 41940991 39987200 19,1G Linux LVM
Disk /dev/mapper/VG_MAIN-LV_SWAP: 1,91 GiB, 2046820352 bytes, 3997696 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 /dev/mapper/VG_MAIN-LV_ROOT: 17 GiB, 18253611008 bytes, 35651584 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesfdisk n’est pas content parce que la table de partition n’est pas en fin de disque : c’est normal, on vient de l’Ă©tendre au niveau « physique » et il faut maintenant le faire de manière logique. Tu le sais probablement dĂ©jĂ , j’aime bien utiliser fdisk pour faire ça.
root@testlvm:~# fdisk /dev/sda
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
GPT PMBR size mismatch (41943039 != 83886079) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
Command (m for help): n
Partition number (2-128, default 2): 2
First sector (1953792-83886046, default 1953792):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1953792-83886046, default 83884031):
Created a new partition 2 of type 'Linux filesystem' and of size 39,1 GiB.
Partition #2 contains a LVM2_member signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help): p
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AAF5A1B6-8B12-45B3-873E-707DE64F945D
Device Start End Sectors Size Type
/dev/sda1 2048 1953791 1951744 953M EFI System
/dev/sda2 1953792 83884031 81930240 39,1G Linux filesystem
Command (m for help): On va pas se faire avoir deux fois, donc avant d’Ă©crire la partition on la print pour se rendre compte que fdisk nous a pondu un beau Linux filesystem et c’est pas du tout ce qu’on veut !
Command (m for help): t
Partition number (1,2, default 2): 2
Partition type or alias (type L to list all): L
1 EFI System C12A7328-F81F-11D2-BA4B-00A0C93EC93B
2 MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F
[...]
43 Linux LVM E6D6D379-F507-44C2-A23C-238F2A3DF928
[...]
Partition type or alias (type L to list all): 43
Changed type of partition 'Linux filesystem' to 'Linux LVM'.
Command (m for help): w
The partition table has been altered.
Syncing disks.
root@testlvm:~# Je t’Ă©pargne le contrĂ´le fdisk -l mais tu devrais avoir une partoche /dev/sda1 d’environs 40G. Chez moi, ça donne 39,1G de type Linux LVM.
Il me reste plus qu’Ă Ă©tendre le Physical Volume et le Logical Volume et cette fois-ci, je faire le resize en mĂŞme temps.
root@testlvm:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VG_MAIN lvm2 a-- <19,07g 164,00m
root@testlvm:~# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
root@testlvm:~# lvextend -l +100%FREE /dev/mapper/VG_MAIN-LV_ROOT -r
Size of logical volume VG_MAIN/LV_ROOT changed from 17,00 GiB (4352 extents) to 37,16 GiB (9513 extents).
Logical volume VG_MAIN/LV_ROOT successfully resized.
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mapper/VG_MAIN-LV_ROOT is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 5
The filesystem on /dev/mapper/VG_MAIN-LV_ROOT is now 9741312 (4k) blocks long.
root@testlvm:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 961M 0 961M 0% /dev
tmpfs 197M 484K 196M 1% /run
/dev/mapper/VG_MAIN-LV_ROOT 37G 1,6G 34G 5% /
tmpfs 982M 0 982M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
/dev/sda1 952M 5,9M 946M 1% /boot/efi
tmpfs 197M 0 197M 0% /run/user/0Bon, je suis pas en prod donc j’ai quand mĂŞme tentĂ© le reboot pour ĂŞtre certain que tout roule et c’est bien le cas.
Je suis content d’avoir rencontrĂ© ce cas qui m’a permis de mieux connaĂ®tre mon système et je remercie Monsieur C. pour son aide Ă la rĂ©solution. On aurait probablement pu modifier le type de table de partition mais aurait-ce Ă©tĂ© aussi marrant ?
