Redimensionner une partion Linux

Le redimensionnement d'un disque sur Linux est parfois nécessaire pour une machine virtuelle dont a sous estimé la taille lors de sa création. Contrairement à une machine physique avec un disque physique, avec une machine virtuelle on peut facile augmenter la taille du disque virtuelle. Une fois la taille du disque virtuelle augmentée, il faut étendre le système de fichier sur l'espace nouvellement disponible.

Bienque je n'ai personnellement jamais perdu de donnée, il est fortement conseillé de faire des sauvegardes avant! La manipulation qui suit est réalisée à vos risques et périls. Je ne saurai etre tenu responsable des pertes de données.

Commençons par vérifier l'espace utilisés sur le système.

root@monServeur:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               2,9G       0  2,9G   0% /dev
tmpfs              593M    680K  592M   1% /run
/dev/sda1           26G     19G  6,1G  75% /
tmpfs              2,9G    1,1M  2,9G   1% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs              593M       0  593M   0% /run/user/1001
tmpfs              593M       0  593M   0% /run/user/1102

On voit que 75% de l'espace sur le disque est utilisé sur le système.

J'ai augmenté la taille du disque virtuel à 65Go sur mon logiciel de virtualisation (ESXi). Afin de vérifier les disques et les partitions avec leur taille allouée:

root@monServeur:~# fdisk -l
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sda1    *            2048 54439933 54437886    26G 83 Linux
/dev/sda2             54439934 62912511  8472578     4G  5 Étendue
/dev/sda5             54439936 62912511  8472576     4G 82 partition d'échange Linux / Solaris

On voit donc qu'on a qu'un seul disque /dev/sda qui a en tout 64Go mais que le système utilise 30Go (26Go principale et 4Go étendu qui est occupé entièrement par la partiton d'échange, le swap). Il reste donc 26Go d'espace non alloué donc disponible.

C'est donc sur le disque système /dev/sda qu'on va étendre la partition.

root@monServeur:~# fdisk /dev/sda
Bienvenue dans fdisk (util-linux 2.38.1).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le disque est actuellement utilisé — le repartitionner est
probablement une mauvaise idée.
Il est recommandé de démonter tous les systèmes de fichiers et désactiver (avec
swapoff) toutes les partitions d'échange de ce disque.

pour connaitre les paramètres possibles de la commande fdisk:

Commande (m pour l'aide) : m

Aide :

  DOS (secteur d'amorçage)
   a   modifier un indicateur d'amorçage
   b   éditer l'étiquette BSD imbriquée du disque
   c   modifier l'indicateur de compatibilité DOS

  Générique
   d   supprimer une partition
   F   afficher l’espace libre non partitionné
   l   afficher les types de partitions connues
   n   ajouter une nouvelle partition
   p   afficher la table de partitions
   t   modifier le type d'une partition
   v   vérifier la table de partitions
   i   Afficher des renseignements sur la partition

  Autre
   m   afficher ce menu
   u   modifier les unités d'affichage et de saisie
   x   fonctions avancées (réservées aux spécialistes)

  Script
   I   chargement de l’agencement à partir du fichier de script sfdisk
   O   sauvegarde de l’agencement vers le fichier de script sfdisk

  Sauvegarder et quitter
   w   écrire la table sur le disque et quitter
   q   quitter sans enregistrer les modifications

  Créer une nouvelle étiquette
   g   créer une nouvelle table vide de partitions GPT
   G   créer une nouvelle table vide de partitions SGI (IRIX)
   o   create a new empty MBR (DOS) partition table
   s   créer une nouvelle table vide de partitions Sun

On affiche la table des parttions du disque /dev/sda

Commande (m pour l'aide) : p

Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sda1    *            2048 54439933 54437886    26G 83 Linux
/dev/sda2             54439934 62912511  8472578     4G  5 Étendue
/dev/sda5             54439936 62912511  8472576     4G 82 partition d'échange Linux / Solaris

Maintenant qu'on connait la table on peut quitter fdisk

Commande (m pour l'aide) : q

D'après la table de partition, la partition étendue (la swap) se trouve après la partition qu'on veut étendre. L'espace disponible est derrière.

Pour vérifier les informations sur la partition occupée par la swap

root@monServeur:~# swapon --show
NAME      TYPE      SIZE USED PRIO
/dev/sda5 partition   4G   0B   -2

root@monServeur:~# free -h
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:           5,8Gi       980Mi       4,7Gi        14Mi       361Mi       4,8Gi
Échange:       4,0Gi          0B       4,0Gi

On désactive la partition swap

root@monServeur:~# swapoff -a

On controle que la swap n'utilise plus l'espace de la partition (la ligne Echange)

root@monServeur:~# free -h
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:           5,8Gi       713Mi       5,0Gi        14Mi       363Mi       5,1Gi
Échange:          0B          0B          0B

La swap est activée à chaque redémarrage via fstab. Il faut donc la désactiver. Mais d'abord une sauvegarde du fichier!

root@monServeur:~# cp /etc/fstab fstab_bkp.bkp
root@monServeur:~# vi /etc/fstab

Une fois édité fstab, commentez la ligne concernant la swap (avec un # en début de ligne).

On rédémarre la machine puis on controle que la swap n'a pas été réactivé.

root@monServeur:~# free -h
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:           5,8Gi       979Mi       4,7Gi        14Mi       373Mi       4,8Gi
Échange:          0B          0B          0B

root@monServeur:~# swapon --show

Cette dernière commande ne doit rien retourner!

On utilise de nouveau fdisk sur /dev/sda pour manipuler la table de partition

root@monServeur:~# fdisk /dev/sda

Bienvenue dans fdisk (util-linux 2.38.1).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le disque est actuellement utilisé — le repartitionner est
probablement une mauvaise idée.
Il est recommandé de démonter tous les systèmes de fichiers et désactiver (avec
swapoff) toutes les partitions d'échange de ce disque.

Commande (m pour l'aide) : p

Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 * 2048 54439933 54437886 26G 83 Linux
/dev/sda2 54439934 62912511 8472578 4G 5 Étendue
/dev/sda5 54439936 62912511 8472576 4G 82 partition d'échange Linux / Solaris

On supprime la swap /dev/sda5

Commande (m pour l'aide) : d
Numéro de partition (1,2,5, 5 par défaut) : 5

La partition 5 a été supprimée.

Commande (m pour l'aide) : p
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 * 2048 54439933 54437886 26G 83 Linux
/dev/sda2 54439934 62912511 8472578 4G 5 Étendue

On supprime la partition étendue /dev/sda2 qui contenait la swap

Commande (m pour l'aide) : d
Numéro de partition (1,2, 2 par défaut) : 2

La partition 2 a été supprimée.

Commande (m pour l'aide) : p
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 * 2048 54439933 54437886 26G 83 Linux

On supprime la partition principale restante! PAS DE RISQUE tant qu'on a pas enregistré et rebooté la machine.

Commande (m pour l'aide) : d
Partition 1 sélectionnée
La partition 1 a été supprimée.

Maintenant on redimensionne les partitions !

On crée la partition principale avec sa nouvelle taille mais EN GARDANT disponible la meme taille disponible d'origine pour la future swap. Ici sur 64Go j'affecte 60Go pour le système car la swap d'origine avait 4Go.

Commande (m pour l'aide) : n
Type de partition
p primaire (0 primaire, 0 étendue, 4 libre)
e étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : p
Numéro de partition (1-4, 1 par défaut) : 1
Premier secteur (2048-134217727, 2048 par défaut) :
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (2048-134217727, 134217727 par défaut) : +60G

Une nouvelle partition 1 de type « Linux » et de taille 60 GiB a été créée.
La partition #1 contient une signature ext4.

ATTENTION on ne supprime pas la signature ext4 car on ne va pas formater la nouvelle partition ! Sinon on perd les données.

Voulez-vous supprimer la signature ? [O]ui/[N]on : N

Commande (m pour l'aide) : p

Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 2048 125831167 125829120 60G 83 Linux

Maintenant on recrée une partition étendue pour héberger la nouvelle swap.

Commande (m pour l'aide) : n
Type de partition
p primaire (1 primaire, 0 étendue, 3 libre)
e étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : e
Numéro de partition (2-4, 2 par défaut) :
Premier secteur (125831168-134217727, 125831168 par défaut) :
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (125831168-134217727, 134217727 par défaut) :

Une nouvelle partition 2 de type « Extended » et de taille 4 GiB a été créée.

Commande (m pour l'aide) : p
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 2048 125831167 125829120 60G 83 Linux
/dev/sda2 125831168 134217727 8386560 4G 5 Étendue

On crée la swap.

Commande (m pour l'aide) : n
Tout l’espace des partitions primaires est utilisé.
Ajout de la partition logique 5
Premier secteur (125833216-134217727, 125833216 par défaut) :
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (125833216-134217727, 134217727 par défaut) :

Une nouvelle partition 5 de type « Linux » et de taille 4 GiB a été créée.

Commande (m pour l'aide) : p
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 2048 125831167 125829120 60G 83 Linux
/dev/sda2 125831168 134217727 8386560 4G 5 Étendue
/dev/sda5 125833216 134217727 8384512 4G 83 Linux

On change le type de partition dont le type swap est 82.

Commande (m pour l'aide) : t
Numéro de partition (1,2,5, 5 par défaut) : 5
Code Hexa ou synonyme (taper L pour afficher tous les codes) :82

Type de partition « Linux » modifié en « Linux swap / Solaris ».

Commande (m pour l'aide) : p
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 2048 125831167 125829120 60G 83 Linux
/dev/sda2 125831168 134217727 8386560 4G 5 Étendue
/dev/sda5 125833216 134217727 8384512 4G 82 partition d'échange Linux / Solaris

Il ne reste plus qu'a rendre bootable partition principale en la rendant active (marquée par *)

Commande (m pour l'aide) : a
Numéro de partition (1,2,5, 5 par défaut) : 1

L’indicateur d’amorçage de la partition 1 est maintenant activé.

Commande (m pour l'aide) : p
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 * 2048 125831167 125829120 60G 83 Linux
/dev/sda2 125831168 134217727 8386560 4G 5 Étendue
/dev/sda5 125833216 134217727 8384512 4G 82 partition d'échange Linux / Solaris

Sauvegardez la modification puis quittez fdisk

Commande (m pour l'aide) : w

Commande (m pour l'aide) : q

NE PAS REDEMARRER maintenant !

On peut vérifier que rien a changé sur le système en cours

root@monServeur:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 2,9G 0 2,9G 0% /dev
tmpfs 593M 644K 592M 1% /run
/dev/sda1 26G 19G 6,0G 76% /
tmpfs 2,9G 1,1M 2,9G 1% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 593M 0 593M 0% /run/user/1102

Pour que le système prenne en compte nos modifications de la table de partition

root@monServeur:~# resize2fs /dev/sda1
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/sda1 is now 15728640 (4k) blocks long.

Maintenant on recontrole l'extension de la partition système.

root@monServeur:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 2,9G 0 2,9G 0% /dev
tmpfs 593M 644K 592M 1% /run
/dev/sda1 59G 19G 39G 33% /
tmpfs 2,9G 1,1M 2,9G 1% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 593M 0 593M 0% /run/user/1102

/dev/sda1 a bien été étendu !

On vérifie de nouveau la table de partition

root@monServeur:~# fdisk -l
Disque /dev/sda : 64 GiB, 68719476736 octets, 134217728 secteurs
Modèle de disque : Virtual disk
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x59e733a0

Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sda1 * 2048 125831167 125829120 60G 83 Linux
/dev/sda2 125831168 134217727 8386560 4G 5 Étendue
/dev/sda5 125833216 134217727 8384512 4G 82 partition d'échange Linux / Solaris

Il faut recréer la swap sur la partition dédié /dev/sda5

root@monServeur:~# mkswap /dev/sda5
Configure l'espace d'échange (swap) en version 1, taille = 4 GiB (4292866048 octets)
pas d'étiquette, UUID=cad156ac-b2c4-435a-bf08-07eda9f4e02a

prenez note du UUID de la partition qui est l'identifiant unique de la partition.

Maintenant que la swap est recréé on peut la réactiver.

root@monServeur:~# swapon /dev/sda5

Réactivez la dans le fstab.

root@monServeur:~# vi /etc/fstab

Décommenter la ligne concernant la swap ET changez l'UUID

# swap was on /dev/sda5 during installation
UUID=cad156ac-b2c4-435a-bf08-07eda9f4e02a none swap sw 0 0

Et voilà, rédémarrez pour terminer.