Btrfs sur Guix

En faisant joujou avec la distribution Linux GNU Guix (Wikipédia) dans une VM, j’ai voulu utiliser le système de fichiers Btrfs, afin de pouvoir faire des instantanés (snapshots) entre deux essais. Mais cela a demandé un peu de travail.

Malheureusement, l’installateur de Guix installe tout à la racine de la partition btrfs, ce qui fait que si on fait un instantané, on ne pourra pas le restaurer facilement en tant que nouveau root. Linux Mint (et peut-être Ubuntu) utilise une meilleure stratégie: il crée dans la partition btrfs un sous-volume nommé « /@ » et va l’utiliser comme racine du système (déclaré comme « / » dans /etc/fstab). Ainsi, la racine réelle Btrfs n’est pas montée. Si on veut faire un instantané de notre FS, on monte cette racine réelle de la partition dans un répertoire (ex: /mnt/whole_btrfs »), le montage simultané de plusieurs répertoires ou sous-volumes d’une partition btrfs étant possible, et on fait un instantané de « / » dans « /mnt/whole_btrfs/@mysnapshot »). Après, si on veut restaurer l’instantané, soit on spécifie dans fstab ce sous-volume comme « / » (ex: avec les options defaults,subvol=/@mysnapshot), ou alors on renomme les sous-volumes pour que l’instantané s’appelle « /@ ».

Comme faire ça avec Guix? La seule solution simple que j’ai trouvé est:

  • Installer Guix avec comme btrfs type de partition (donc sans « /@ »).
  • Effectuer toutes les mises à jour, ce qui peut mettre à jour le noyau, avec « sudo guix reconfigure /etc/config.scm« 
  • Installer « btrfs-progs » (pour avoir l’utilitaire « btrfs »): « sudo guix install btrfs-progs« 
  • Créer un instantané de l’installation actuelle: « sudo brtfs subvolume snapshot / /@« 
  • Dans /etc/config.scm, ajouter à la partition racine « (options defaults,subvol=/@) » comme fils de l’instruction « (filesystem« :
  (file-systems
    (cons* (file-system
             (mount-point "/")
             (device
               (uuid "abc7bc8e-58b8-48d0-93c8-59b73cc1055a"
                     'btrfs))
             (options "defaults,subvol=/@")
             (type "btrfs"))
           %base-file-systems)))
  • On réapplique la config: « sudo guix reconfigure /etc/config.scm« 
  • On redémarre.
  • On nettoie les anciens fichiers et répertoire qui ont été dupliqué par l’instantané:
cd /tmp
mkdir root
mount /dev/sda3 root
cd root
# Cette expression exclut le répertoire/instantané /@
rm -Rf [a-z]*
cd ..
umount root

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *