volted.net

A blog about openSUSE and free thoughts

Réduire la taille d'un volume système en RAID1

December 02, 2018 — sogal

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 :

  1. Démarrer sur la clé USB ;

  2. Installer les utilitaires de gestion RAID nécessaires :

    apt-get install mdadm
    
  3. Charger les modules nécessaires :

    modprobe mdio
    modprobe linear
    modprobe multipath
    modprobe raid0
    modprobe raid1
    modprobe raid5
    modprobe raid6
    modprobe raid10
    
  4. Chercher les volumes RAID présents :

    mdadm --examine --scan
    
  5. Activer les volumes RAID trouvés :

    mdadm -A --scan
    
  6. Monter le volume RAID1 à réduire :

    mount /dev/md127 /mnt
    
  7. Redimensionner le système de fichiers :

    btrfs filesystem resize -165G /mnt
    

    Cette opération a pris un bon moment, laisser le travail se faire !

  8. Une fois le système de fichiers btrfs réduit, démonter le volume RAID1 :

    umount /mnt
    
  9. Mettre une des partitions en échec :

    mdadm /dev/md127 --fail /dev/sda3
    
  10. Puis la retirer du RAID :

    mdadm /dev/md127 --remove /dev/sda3
    
  11. Redimensionner la partition un poil plus grand que le système de fichiers :

    parted /dev/sda → resizepart 3 → end 60GB→ Yes → quit
    
  12. 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.

  13. 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

  14. Rajouter le disque au RAID :

    mdadm /dev/md127 --add /dev/sda3
    
  15. Attendre la reconstruction du volume RAID1, visible en lançant :

    cat /proc/mdstat
    
  16. Faire pareil avec l'autre partition (/dev/sdb3 dans mon cas) (étapes 8 à 14 mais pas la 13 !)

  17. Agrandir le volume RAID1 au maximum de la nouvelle taille des partitions qui le composent :

    mdadm --grow /dev/md127 --size max
    
  18. 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 !

Tags: tips, opensuse