Éléments de redimensionnement pour un laptop
Solution simple: Gparted
Tout ce qui est décrit dans cet article est faisable presque automatiquement avec des outils comme gparted
, la seule différence, c’est qu’on peut faire peut-être plus que gparted dans certains cas et qu’on comprend ce que ce dernier fait exactement.
Il s’agit de démystifier les techniques de redimensionnement en situation utilisateur.
Solution difficile: intellectualisation du problème
Avant-propos: imager le disque vers une source externe, même si cela n’est pas nécessaire, travaillez sur la source externe. 1
Scénario 1 : Mise à jour du disque d’une machine vers une taille plus grande
On image le disque vers la cible, on travaille depuis l’ancienne machine sur le nouveau disque branché en USB ou peu importe.2
À présent, pour redimensionner, reférez vous à la partie sur les redimensionnements plus bas.
Scénario 2 : Jeu d’équilibrisme sur un disque multi-partitions
On image quand même le disque conformément à ce qui précède, mais ce qui est suit, est faisable sur le même disque, parfois à chaud, reférez vous aux notes plus basses pour les subtilités.
On suppose qu’on est en mesure de démonter toutes les partitions qui nous intéressent, on se donne une table de partitionnement:
/dev/disk1
/dev/disk2
…
/dev/diskN
Positionnement du problème
Soient N disques, on se donne I = {i1, …, ik} un ensemble de disques auquel on veut prendre c1, …, ck capacité et les donner à J = {j1, …, jm} disques selon une fonction qui associe à la capacité d’un disque d’indice (jl)l à une nouvelle capacité, sous la contrainte que la somme des nouvelles capacités est inférieure à celle des anciennes capacités plus la somme des (cl)l.
Simplifions drastiquement ce problème, sans perte de généralité, si on sait augmenter la capacité d’un disque dans J, on sait augmenter la capacité de tous les disques dans J, en effet, on concatène les procédures. À nouveau, sans perte de généralité, si on sait prendre de la capacité d’un seul disque I, on peut prendre de la capacité de plusieurs disques, en effet, on concatène les procédures.
Il faut définir cela dit la fonction de « prendre de la capacité », les partitions sont organisés de façon linéaire.
Ainsi, il est impératif que pour prendre de la capacité, il faut que cette capacité non allouée apparaisse au début ou à la fin de la partition cible à laquelle on veut donner de l’espace.
i.e. on dispose de la primitive « donner de la capacité à une partition i » qui nécessite les hypothèses : « il existe de l’espace non alloué avant le début de i ou après la fin de i »3.
Avec notre formalisme, cela impose qu’il faudra toucher aux disques d’indices (jl−1)l et (jl+1)l s’ils existent et ont un sens, l’un des deux existe forcément ou alors nous sommes dans un disque mono-partition et alors, soit il est maximal au sens de la capacité, soit il reste de l’espace non alloué.
Enfin, on se demande comment transférer de la capacité d’une partition i à une partition j arbitraire.4
Cas triviaux: i = j − 1, i = j + 1
Dans ce cas, la partition i est au début de celle de j ou à la fin.
Ainsi, il faut redimensionner la partition i, on se réferera au tableau des redimensionnements pour en savoir plus sur la méthode.
Cas général
Supposons i < j − 1, alors, on redimensionne i par la fin, pour prendre une capacité C, donc, à la fin d’i, il existe C d’espace non allouée, soit donc C d’espace non allouée au début d’i + 1 ≠ j. On donne la capacité C à i + 1, par le cas précédent, on se ramène donc à transférer de i + 1 à j.
Par récurrence finie immédiate sur i, on est en capacité de faire la procédure.
Quant à l’autre cas, il se traite de la même façon par récurrence finie descendante sur i.
Redimensionnements
On se donne une partition d’un système de fichier, pouvons-nous la redimensionner?
Positionnement
Le redimensionnement d’un système de fichier consiste à réécrire les métadonnées, déplacer les informations, soit au nouveau début, soit à l’ancienne fin5, on peut faire grandir ou rétrécir un système de fichier.
L’un est très facile: grandir. L’autre est parfois impossible: rétrécir.
On s’intéressera aux cas de rétrécissements, on suppose que l’aggrandissement d’un système de fichier est acquis, mais on mentionnera lorsqu’il est pertinent les fonctionnalités « avancées » d’agrandissement, notamment à chaud de certains systèmes de fichiers.
Le cas de FAT16
Le cas de FAT32
Le cas de NTFS
ntfsresize
Le cas de EXT2
Le cas de EXT3
Le cas de EXT4
Le cas de ReiserFS
Le cas d’XFS
Le cas de BTRFS
btrfs filesystem resize
Le cas de ZFS
zpool replace
zpool remove
Le cas de bcachefs
Le cas de LVM
Le cas de dm-crypt
Tableau récapitulatif
- imager le disque vers une source externe
- changer le disque interne
- rebooter sur clef USB
- ré-imager dans l’autre sens
- effectuer le redimensionnement interne de proche en proche
Quand cela n’est pas possible, c’est que vous avez assez d’expérience, sinon c’est toujours possible. Si vous ne pouvez pas payer une source externe, vous pouvez vous soit vous passer de vos données ou payer une récupération des données.↩︎
On peut travailler depuis un live USB, un kexec, peu importe.↩︎
On suppose que les systèmes de fichiers peuvent gérer les redimensionnements pour le moment.↩︎
Cela ressemble beaucoup aux tours de Hanoï, non? Mais c’est plus facile là.↩︎
Ou l’inverse, par symétrie.↩︎