volted.net

A blog about being free, as in free speech

Partition utilisateur dans un volume btrfs

12 décembre, 2018 — sogal

btrfs est un système de fichier moderne, donné pour être le remplaçant du veillissant, mais toujours très fiable et très utilisé, ext4. Il est le choix de base de la proposition de partitionnement par défaut lors de l'installation d'openSUSE pour la partition racine. La partition /home, si l'utilisateur fait le choix d'en créer une séparée, est en xfs.

On a entendu beaucoup de chose sur l'usage (ou le mésusage selon les cas) de btrfs avec notamment des problèmes dûs aux scripts de maintenance (présents dans /usr/share/btrfsmaintenance/ et lancés par leur timers systemd respectifs). Il faut reconnaître que les opérations de scrub et de balance des blocs ralentissent, parfois, considérablement le système durant un instant. Et plus on attend pour le faire (ex. d'un système n'étant pas utilisé souvent et, à chaque utilisation, recevant une grande quantité de données sur le disque), plus il y a de travail à faire et cela peut durer jusqu'à 5 minutes, durant lequel la machine est très ralentie, voire peut apparaître bloquée. Je ne vais pas revenir là-dessus, ce sujet a été abordé maintes fois à grand coup de trolls, de mauvaise foi et d'arguments non factuels à plusieurs endroits.

Dans ce billet, je voudrais juste partager un retour d'expérience, positif, sur l'usage de btrfs non seulement sur la partition racine, mais également dans ma partition /home. En effet, j'ai décidé il y a plusieurs semaines de convertir ma partition xfs (proposition de base de l'installeur openSUSE) en btrfs afin de profiter des snapshots.

Pour ce faire, j'ai commencé par passer en runlevel 3 :

init 3

J'ai fait une sauvegarde de mon /home actuel sur un disque externe :

rsync -arv --progress /home/ /run/media/user/DISK_BACKUP/

Ceci fait, j'ai démonté mon /home :

umount /home

Puis formater la partition en btrfs. Notez ici que si ça avait un système de fichier de type ext2/3/4 ou reiserfs, j'aurai pu tout simplement le convertir en btrfs, sans perte de données, via la commande btrfs-convert -p -l home /dev/partition_home. Pour formater la partition donc :

mkfs.btrfs -L home /dev/partition_home

Ceci fait, ne pas omettre de modifier le /etc/fstab pour refléter le changement de système de fichier. J'ai ensuite créé un sous-volume btrfs au nom de mon utilisateur :

btrfs subvolume create /home/user

Dans lequel j'ai activé les snapshots, but de toute l'opération :

snapper -c home create-config /home/user

Ceci va me créer une configuration pour snapper, l'utilitaire en charge de gérer la création et la suppression des snapshots, dans /etc/snapper/configs/home que j'ai adapté à mes besoins comme suit :

# nom du sous-volume dont il faut prendre un instantané
SUBVOLUME="/home/user"

# type du système de fichier
FSTYPE="btrfs"

# btrfs qgroup for space aware cleanup algorithms
QGROUP=""

# part du système de fichier que les instantanés peuvent utiliser
SPACE_LIMIT="0.5"

# utilisateurs et groupes autorisés à faire usage de cette configuration
ALLOW_USERS="user"
ALLOW_GROUPS=""

# synchroniser les droits des utilisateurs et les groupes définis ci-dessus
# avec le répertoire .snapshots
SYNC_ACL="yes"

# démarrer la comparaison des snapshots -pre et -post en arrière-plan après
# la création du snapshot -post
BACKGROUND_COMPARISON="yes"

# exécuter le nettoyage quotidien, basé sur l'algorithme du nombre d'instantané
NUMBER_CLEANUP="yes"

# limite pour le nettoyage quotidien, basé sur l'algorithme du nombre d'instantané
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="50"
NUMBER_LIMIT_IMPORTANT="10"

# créer des instantanés horaires (oui, c'est bien le but de ma manœuvre)
TIMELINE_CREATE="yes"

# nettoyer les instantanés horaires après un certain temps
TIMELINE_CLEANUP="yes"

# limites pour le nettoyage de la timeline (les instantanés horaires)
# âge minimum de l'instantané
TIMELINE_MIN_AGE="1800"
# nombre d'instantanés horaires à conserver au maximum
TIMELINE_LIMIT_HOURLY="24"
# nombre d'instantanés journaliers à conserver au maximum
TIMELINE_LIMIT_DAILY="14"
# nombre d'instantanés hebdomadaire à conserver au maximum
TIMELINE_LIMIT_WEEKLY="4"
# nombre d'instantanés mensuels à conserver au maximum
TIMELINE_LIMIT_MONTHLY="3"
# nombre d'instantanés annuels à conserver au maximum
TIMELINE_LIMIT_YEARLY="0"

# lancement du nettoyage des paires d'instantané -pre et -post vide
EMPTY_PRE_POST_CLEANUP="yes"

# âge minimum des instantanés nettoyés par l'algorithme pre-post
EMPTY_PRE_POST_MIN_AGE="1800"

Ainsi je vais pouvoir disposer d'instantanés me permettant de remonter dans le temps si jamais je fais une fausse manip' et efface des fichiers par erreur ou autre bêtise. Et les instantanés de la partition système me permettent, depuis le menu de démarrage de GRUB de sélectionner de démarrer sur un instantané en lecture seule afin de pouvoir réparer mon système en cas de soucis.

J'utilise ce setup avec deux partitions en btrfs, une pour le système, une pour mes données, chaque d'elle disposant de leur fréquence de création d'instantanés, depuis plusieurs mois sur une machine que j'utilise au quotidien. Et je dois dire que j'en suis très content ! Je n'ai pas eu de soucis de ralentissements agaçants, les instantanés sont bien créés puis supprimés conformément à la configuration, bref, impeccable !

Tags: opensuse