Bonjour à tous.
Il y a quelques années, j’ai installé mon système sur l’unique partition de /dev/sda, c’est à dire /dev/sda1. Elle est elle-même sous partitionnée grâce à LVM.
Néanmoins, comme j’ai utilisé la totalité du disque pour cette partition, je n’ai plus de marge de manœuvre pour d’autres besoins. De plus, le gâchis d’espace disque est énorme (90%).
Une solution consisterait repartir de zéro, mais cela serait inélégant et comme cette station doit assurer un service quasi permanent, les ruptures de service doivent être les plus courtes possibles.
Il paraît que Gparted est capable de redimensionner une partition servant de volume physique LVM. Jamais essayé.
Sinon, l’outil de base pour redimensionner un PV est pvresize. Il faudra éventuellement utiliser pvmove préalablement pour déplacer les extents utilisés qui seraient situés au-delà de la nouvelle taille souhaitée. Pour finir il faudra réduire la partition à la nouvelle taille du PV avec parted.
Mais c’est à haut risque de destruction du système : pour lvm, je pense que cela va passer sans problème. Il y plein de tutos à ce sujet sur Internet. Là où je tremble un peu, c’est avec Gparted…
j’ai une fenêtre de tir dans quinze jour… Je vous donnerai des nouvelles à ce sujet.
Comme je l’ai écrit précédemment, parted pourra servir à réduire la partition (commande resizepart - attention : il faut spécifier la nouvelle position de fin et non la nouvelle taille). Mais seulement après avoir réduit la taille du PV avec pvresize.
Juste une précision… j’ai depuis cette manipulation, un message comme suit : WARNING: Device /dev/xxxx has size of X sectors which is smaller than corresponding PV size of X sectors.
Voici ci-après, une capture de cession qui donne corps aux explications :
root@s04:~# pvresize --setphysicalvolumesize 2928640s /dev/sda1
WARNING: Device /dev/sda1 has size of 2928640 sectors which is smaller than corresponding PV size of 250066944 sec
tors. Was device resized?
One or more devices used as PVs in VG s04_boot have changed sizes.
Physical volume "/dev/sda1" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
root@s04:~# vgcfgrestore s04_boot
Volume group s04_boot has active volume: Deb-Buster_v10-boot.
Volume group s04_boot has active volume: Deb-Stretch_v9-boot.
WARNING: Found 2 active volume(s) in volume group "s04_boot".
Restoring VG with active LVs, may cause mismatch with its metadata.
Do you really want to proceed with restore of volume group "s04_boot", while 2 volume(s) are active? [y/n]: y
Restored volume group s04_boot.
root@s04:~#
Depuis, tout semble fonctionner à merveille, mais je me demande quels problèmes cela peut occasionner sur les données…
Tu as dû faire une erreur dans les tailles passées à pvresize et parted. Peut-être à cause de l’interprétation différente des préfixes multiplicateurs : « G » signifie gibi (giga binaire, 1024^3) pour pvresize et les autre commandes LVM, et giga (décimal, 1000^3, un peu plus petit) pour parted (pour qui gibi s’écrit « Gi »).
Au mieux, la perte des données située au-delà de la nouvelle taille de la partition. Au pire, la perte de tous les volumes logiques ayant des données situées au-delà de la nouvelle taille.
Oui ça fonctionne, je m’en suis servis pas plus tard que la semaine dernière. Il faut par contre s’assurer de ne pas diminuer la partition LVM en dessous de la taille utilisé avec une petite marge sinon les données sont compromises.
gpart en ligne de commande fonctionne très bien.
le principe est le suivant pour recupérer la place:
retailler les volumes logiques du LVM (lvresize puis resize2fs)
retailler la partition LVM en fonction de l’espace disque disponible (Gparted)
créer la partition pour le nouveau LVM (Gparted)
créer le volume groupe qui va avec (LVM)
créer le ou les volumes logiques en fonction de la place disponible (LVM)
déplacer les données de l’ancien au nouveau (shell)
modifier fstab en conséquence (shell)
supprimer l’ancien volume logique (LVM)
retailler l’ancienne partition pour libérer l’espace ainsi libéré (Gparted)
retailler la nouvelle partition pour récupérer l’espace libéré (Gparted)
Et ainsi de suite.
C’est fastidieux si les espace sont très exigus, mais ça marche.
Attention, le fait de libérer de la place va donner un espace de stockage libre à la droite immédiate de la partition modifiée. Donc cela donnerait
| Ancien LVM| -|espace libre|-|Nouveau LVM|
Pour récupérer l’espace libre pour le nouveau LVM, il faut donc déplacer la nouvelle partition LVM à gauche pour ensuite agrandir la partition. Donc plusieurs manip qui peuvent prendre du temps.
Par contre il ne sera pas possible de maintenir efficacement le service pendant la migration.
Attention aux changement liés bien sur à grub et les secteurs de démarrages;
Autre point à prendre en compte, je ne suis pas sur qu’on puisse facilement retaille rune partition crypto. ça je n’ai pas essayer.
Pour la partie crypto, il est peut etre plus sain de faire d’abord le taf en normal pour ensuite convertir la partition en crypto une fois tout terminé.
pvresize modifie les physical volume,
vgresize pour les volume group
lvresize pour les volumes logiques.
Je suis loin d’être à l’abri d’une erreur, mais ce n’est sans doute pas un problème d’unité vu l’énormité de la différence. J’ai d’ailleurs le même problème sur la station sur laquelle je travaillais au début du fil. Là, j’ai testé la manip sur un portable, c’était moins risqué.
Il faudrait que je fasse un essai à blanc pour voir d’où vient le problème. Mais bon, le temps, toujours le temps si précieux !
Alors, existe-t-il une commande pour rassembler toutes les données au début de la partition ? Au temps béni du MsDOS, il existait « Defrag »…
LVM a la commande pvmove pour déplacer les données des volumes logiques d’un volume physique à un autre ou à l’intérieur d’un même volume physique. Je ne me souviens jamais de la syntaxe pour forcer le déplacement au début et je dois regarder la page de man, parfois c’est capricieux et il faut spécifier des plages d’extents.
Gparted est un programme graphique, il n’a pas de CLI. Si tu parles de parted, c’est un programme complètement indépendant dont le seul point commun est d’utiliser la bibliothèque libparted et ses abstractions bizarres (drapeaux pour représenter les types) pour gérer les partitions.
Ou bien fermer le volume chiffré (après avoir réduit son contenu) avant de réduire son conteneur. A l’ouverture suivante, il prendra la nouvelle taille. En fait l’en-tête LUKS ne contient pas la taille du volume, elle est déterminée automatiquement à partir de la taille du conteneur.