Réduire la taille d'un volume système en RAID1
Lors de l'installation de ma station de travail en openSUSE Leap 42.3, je n'avais pas créé de partition /home
dédiée, n'en ayant alors pas l'utilité. Mes besoins ayant changé, me voici avec une partition racine sur un RAID1 qu'il va me falloir réduire sans perte de données, car je n'ai pas l'intention de réinstaller. Je partage ici la procédure que j'ai suivie dans l'espoir qu'elle puisse vous être utile.
Le contexte :
- Un RAID1 nommé /dev/md127 composé de /dev/sda3 et /dev/sdb3
- ... d'une taille de de 216 Go
- ... contenant un système de fichiers au format btrfs
- ... que je veux réduire à 51 Go (soit 10 Go de plus que la taille actuellement consommée)
- ... dont les partitions débutent, sur leur disque respectif, à 8.5 Go.
Préparation :
Bien entendu, afin de pallier tout problème éventuel, j'ai fait une sauvegarde complète de mon /home
:
rsync -arv --progress /home/ /run/media/sogal/MyDisk/homebak/
Et j'ai testé ma procédure par deux fois dans une machine virtuelle reproduisant le contexte énoncé précédemment.
Puis j'ai lancé l'utilitaire btrfs
de défragmentation sur /
au cas où :
btrfs filesystem defragment -r -v /
Ceci étant fait, je peux passer à la phase du redimensionnement proprement dit. Pour cela, il me faut un système live, j'ai pris la dernière Linux Mint, seule ISO Live récente que j'avais sous la main, avec laquelle j'ai créé une clé USB bootable.
La procédure :
Démarrer sur la clé USB ;
Installer les utilitaires de gestion RAID nécessaires :
apt-get install mdadm
Charger les modules nécessaires :
modprobe mdio modprobe linear modprobe multipath modprobe raid0 modprobe raid1 modprobe raid5 modprobe raid6 modprobe raid10
Chercher les volumes RAID présents :
mdadm --examine --scan
Activer les volumes RAID trouvés :
mdadm -A --scan
Monter le volume RAID1 à réduire :
mount /dev/md127 /mnt
Redimensionner le système de fichiers :
btrfs filesystem resize -165G /mnt
Cette opération a pris un bon moment, laisser le travail se faire !
Une fois le système de fichiers btrfs réduit, démonter le volume RAID1 :
umount /mnt
Mettre une des partitions en échec :
mdadm /dev/md127 --fail /dev/sda3
Puis la retirer du RAID :
mdadm /dev/md127 --remove /dev/sda3
Redimensionner la partition un poil plus grand que le système de fichiers :
parted /dev/sda → resizepart 3 → end 60GB→ Yes → quit
Vérifier le système de fichiers :
btrfs check /dev/sda3
Il va renvoyer une série de messages qui ne veulent pas dire que le système de fichiers est corrompu, pour s'assurer de la réussite du test, vérifier son code de retour :
echo $?
si c'est 0, c'est tout bon.
Réduire le volume RAID1 à une taille légèrement inférieure à celle des partitions qui le composent (j'ai mis 500 Mo de moins) :
mdadm --grow /dev/md127 --size=xxxx
où xxxx = taille souhaitée en GB * 1024 * 1024
Rajouter le disque au RAID :
mdadm /dev/md127 --add /dev/sda3
Attendre la reconstruction du volume RAID1, visible en lançant :
cat /proc/mdstat
Faire pareil avec l'autre partition (/dev/sdb3 dans mon cas) (étapes 8 à 14 mais pas la 13 !)
Agrandir le volume RAID1 au maximum de la nouvelle taille des partitions qui le composent :
mdadm --grow /dev/md127 --size max
Redémarrer sur votre système habituel :
reboot
Le résultat :
Au redémarrage sur ma Leap, rien à signaler, mes disques /dev/sda
et /dev/sdb
disposent maintenant d'un espace libre de 165 Go dans lequel j'ai pu créer, respectivement les partitions /dev/sda4
et /dev/sdb4
que j'ai ajouté à un nouveau volume RAID1 (chiffré pour le coup) dans lequel j'ai transféré mon /home
.
Enjoy !