logo rss

Redimensionner un disque GNU/Linux sans interrompre le service

Tux logo

J'avais une machine virtuelle sous Ubuntu dont le disque avait besoin d'être agrandit car la partition /var était pleine.

Je me suis mis au défi de réaliser cette opération à chaud, sans coupure de service et donc sans avoir à redémarrer.

⚠️ Cette opération a été réalisée par un professionnel (moi), il faut bien prendre en compte que la modification de la table de partition peut entraîner la perte complète des données. Il est donc important d'avoir une sauvegarde complète de sa machine avant d'effectuer ces modifications.⚠️

Configuration de la VM

Propriétés de la machine virtuelle

  • OS : Ubuntu Server 20.04 LTS
  • Disque : 80G
  • Schéma de partitionnement : GPT
  • Partitions : LVM
  • Hyperviseur : VMware 6.7

Disque virtuel

  • Afin d'avoir une représentation graphique du disque virtuel, ce dernier ressemblait à ça :
Partition layout on a 60GB disk using GPT and LVM, showing separate logical volumes for /home, /var, /, /usr, and /tmp before resizing.

Comme expliqué la partition /var était remplie donc j'avais besoin de l'étendre.

Augmenter la taille du disque

VMware

VMware Logo

La première chose à réaliser est d'augmenter la taille du disque virtuel. Dans cet exemple j'augmenterai le disque virtuel de 20G avec 4G dédiés à ma partition /var. Je garderai les 16G restants comme réserve pour une utilisation future.

  • Depuis VMware ou n'importe quel autre hyperviseur, augmenter la taille du disque virtuel. Ici de 60G à 80G :
Interface VMware montrant l’augmentation de la taille du disque virtuel à 80 Go dans le menu Modifier les paramètres.
  • Le disque virtuel ressemble maintenant à ça :
Schéma de partition GPT mis à jour après l’extension du disque virtuel, montrant 20 Go d’espace ajouté et l’extension prévue du volume logique /var de 4 Go.

⚠️ Juste au cas ou, je recommande à ce niveau de réaliser un snapshot de la machine virtuelle.⚠️

Ubuntu

Ubuntu Logo

gdisk

  • Comme nous pouvons le voir avec l'outil gdisk, la modification n'est pas automatiquement prise en compte :
user@ubuntu:~$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 125829120 sectors, 60.0 GiB
Model: Virtual disk    
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 76AC5877-F92F-4C0E-BC53-504F7E90466A
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 125829086
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  
   2         1050624         3147775   1024.0 MiB  8300  
   3         3147776       125827071   58.5 GiB    8300
  • Pour que la nouvelle taille puisse être prise en compte par le système nous avons besoin de lancer un scan du disque :
user@ubuntu:~$ echo 1 | sudo tee /sys/block/sda/device/rescan
  • Toujours avec gdisk, on peut vérifier que la nouvelle taille du disque a bien été prise en compte. Également noter le premier secteur de la partition sda3 :
user@ubuntu:~$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 167772160 sectors, 80.0 GiB
Model: Virtual disk    
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 76AC5877-F92F-4C0E-BC53-504F7E90466A
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 125829086
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  
   2         1050624         3147775   1024.0 MiB  8300  
   3         3147776       125827071   58.5 GiB    8300
  • Avant de procéder à toute modification nous avons besoin de ré-écrire la deuxième entête gpt :
user@ubuntu:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): w
Warning! Secondary header is placed too early on the disk! Do you want to
correct this problem? (Y/N): Y

Have moved second header and partition table to correct location.

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
  • Vérifions l'espace libre :
user@ubuntu:~$ sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 167772160 sectors, 80.0 GiB
Model: Virtual disk    
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 76AC5877-F92F-4C0E-BC53-504F7E90466A
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 167772126
Partitions will be aligned on 2048-sector boundaries
Total free space is 41947069 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  
   2         1050624         3147775   1024.0 MiB  8300  
   3         3147776       125827071   58.5 GiB    8300
  • À ce niveau, Ubuntu devrait avoir une vue de notre disque virtuel comme cela :
Schéma de partition LVM après l’extension du disque à 80 Go, montrant des volumes logiques inchangés et de l’espace non alloué disponible dans le groupe de volumes.
  • Nous pouvons maintenant utiliser gdisk pour étendre la partition sda3 :
    • d : d'abord on supprime la partition 3
    • n : puis l'on créé notre nouvelle partition 3 avec les nouvelles limites (secteurs 3147776 à 167772126)
user@ubuntu:~$ sudo gdisk /dev/sda

Command (? for help): d
Partition number (1-3): 3

Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-125829086, default = 3147776) or {+-}size{KMGTP}: 3147776
Last sector (3147776-125829086, default = 167772126) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
  • On utilise partprobe pour que le noyau prenne en compte la nouvelle table de partition :
user@ubuntu:~$ sudo partprobe
  • À ce niveau, Ubuntu devrait avoir une vue de notre disque virtuel comme cela :
Schéma LVM sur un disque de 80 Go montrant de l’espace libre non alloué dans le groupe de volumes après le redimensionnement du volume physique, mais avant l’extension des volumes logiques.

LVM

Volume physique
  • Avec pvdisplay nous pouvons voir que notre volume physique a lui aussi besoin d'être redimensionné :
user@ubuntu:~$ sudo pvdisplay /dev/sda3
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ubuntu-vg
  PV Size               <58.50 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              14975
  Free PE               0
  Allocated PE          14975
  PV UUID               ThZ9VT-3zCa-SQrB-6s9a-ZiWL-DbqP-TqRNxM
  • Utiliser pvresize pour étendre le volume physique :
user@ubuntu:~$ sudo pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
  • Exécuter pvdisplay pour vérifier que le volume a été correctement redimensionné :
user@ubuntu:~$ sudo pvdisplay /dev/sda3
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ubuntu-vg
  PV Size               <78.50 GiB / not usable 1.98 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              20095
  Free PE               5120
  Allocated PE          14975
  PV UUID               ThZ9VT-3zCa-SQrB-6s9a-ZiWL-DbqP-TqRNxM
  • Pour Ubuntu le disque virtuel ressemble maintenant à ça :
Schéma final du disque LVM de 80 Go après le redimensionnement du volume logique pour /var, montrant l’extension de lvvar de 4 Go à 8 Go.
Logical Volume

Dernière étape, nous avons maintenant besoin de redimensionner notre partition /var.

  • Nous pouvons redimenssionner notre volume logique et notre partition ext4 à l'aide de la commande lvextend :
    • -r : resizefs, redimensionner le système de fichiers sous-jacent (ici ext4) avec le volume logique
    • -L+4G : Ajouter 4G à la taille actuelle du volume logique ubuntu--vg-lvvar.
user@ubuntu:~$ sudo lvextend -r -L+4G /dev/mapper/ubuntu--vg-lvvar 
  Size of logical volume ubuntu-vg/lvvar changed from 4.00 GiB (1024 extents) to 8.00 GiB (2048 extents).
  Logical volume ubuntu-vg/lvvar successfully resized.
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/mapper/ubuntu--vg-lvvar is mounted on /var; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/ubuntu--vg-lvvar is now 2097152 (4k) blocks long.
  • C'est terminé, la taille de la partition /var est de 8G :
user@ubuntu:~$ df -h | grep var
/dev/mapper/ubuntu--vg-lvvar	7.9G  5.3G  2.2G  71% /var
  • Ubuntu doit maintenant voir notre disque virtuel de la sorte :
Schéma du disque LVM de 80 Go avec le volume logique /var mis en évidence et redimensionné à 8 Go, confirmant l’extension réussie.
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact