Alors voilà, on est tout content de son serveur auto-hébergé fraîchement installé (si si), on y colle un peu tout et n’importe quoi, on teste des tas de services et là c’est le drame : lors de la sauvegarde d’un fichier de configuration, le système vous gifle sournoisement d’un revers de « no space left on device ». Un petit df -h plus loin le constat est accablant, l’installeur de Debian en qui vous aviez toute confiance, n’a réservé que 300 pauvres méga-octets pour le volume logique root alors que le disque en fait mille fois plus, que de cruauté !

Pas de problème vous dîtes vous alors, redimensionner un volume logique avec LVM, c’est de la rigolade, sauf qu’en bon paranoïaque que vous êtes vous avez chiffré tout ce petit monde à grands coup de LUKS. Bref la tâche semble ardue, les live-CD vont être de sortie suivis fatalement d’une réinstallation en bon et due forme, vous l’avez bien cherché !

Avant de sortir l’artillerie lourde, on se pose 5 minutes, on prend un café et on va jeter un œil sur le web des fois que d’autres inconscients n’auraient pas fait la même erreur. Miracle, ils sont légions (mais eux n’attaquent pas le PSN…) ou presque, l’espoir renaît, tout va bien se passer, méthode Coué, méthode Coué… Pour faire simple, l’idée est de prendre quelques giga-octets sur un autre volume logique (dans mon cas /home) pour les ré-affecter à ce goinfre de root. Deuxième miracle, cette périlleuse opération va se faire en 10 commandes ni plus ni moins.

Pré-requis :

  • GNU/Linux Debian 6 « Squeeze » dont les partitions sont chiffrées avec LUKS

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

 

On commence par arrêter tous les services qui accèdent au volume logique sur lequel on va récupérer de l’espace disque (il peut être nécessaire de redémarrer le serveur pour arrêter certains processus récalcitrants) et on démonte le volume :

# umount /home

Il faut ici distinguer le système de fichiers et le volume logique (le premier étant « à l’intérieur » du deuxième). Le système de fichiers doit toujours être réduit à une taille inférieure à celle prévue pour le volume logique (ex : LV : 260 Gio / FS : 259 Gio). On va donc commencer par diminuer la taille du système de fichiers (attention : resize2fs est utilisé pour les systèmes de fichier ext3/ext4 uniquement) :

# resize2fs -p /dev/mapper/debian-home 259G

Le système nous demande alors, avant d’aller plus loin, de lancer la commande « e2fsck -f /dev/mapper/debian-home » afin de vérifier l’intégrité du système de fichier :

# e2fsck -f /dev/mapper/debian-home

Un fois cette commande terminée, on peut seulement alors lancer la commande resize2fs.

Le système de fichier étant redimensionné, on passe maintenant au volume logique que l’on va passer de 280 Gio à 260 Gio :

# lvresize --size=260G /dev/mapper/debian-home

Il ne reste plus qu’à étendre le système de fichiers à l’intégralité du volume logique :

# resize2fs /dev/mapper/debian-home

On remonte le volume logique :

# mount /dev/mapper/debian-home /home

Et on contrôle que la taille du volume est conforme à nos attentes :

# df -h

Jusque là tout va bien, il va maintenant falloir réattribuer l’espace libéré au volume root. On réalise alors qu’on ne peut pas le démonter, malédiction ! Le cercle vicieux live-CD/bidouillage/réinstallation refait surface. Que nenni, j’avais promis 10 commandes, les 3 dernières vont régler le problème avec une facilité déconcertante pour la simple et bonne raison qu’on peut redimensionner le volume root à chaud sans le démonter.

On commence par augmenter la taille du volume root en lui ajoutant 5 Gio (J’ai récupéré 20 Gio sur /home, mais j’en garde sous le coude pour une prochaine fois. A noter qu’il vaudrait mieux laisser de l’espace libre à la création des volumes, lors de  l’installation, afin de palier à ce genre de problème) :

# lvresize --size=+5G /dev/mapper/debian-root

Il ne reste plus qu’à étendre le système de fichiers à tout le volume logique :

# resize2fs /dev/mapper/debian-root

Et pour finir, on vérifie que l’opération s’est bien déroulée :

# df -h

Le serveur est sain et sauf, avec un système de partitions classique, cette opération aurait été bien plus compliquée à mettre en œuvre et surtout plus risquée : la flexibilité et la facilité de LVM en actions !

Sources :