Le système de fichiers Btrfs
Btrfs (B-tree File System, prononcé "Butter F S") est un système de fichiers libre développé par Oracle. Au contraire d'ext4 qui est une évolution des systèmes de fichiers ext2/3, Btrfs apporte certaines fonctionnalités inédites.
Les fonctionnalités principales sont les suivantes :
- Capacité maximale de 2^64 octets == 16 Eo. max.
- Meilleure gestion de l'espace occupé par les petits fichiers
- Possibilité de créer des snapshots en lecture seule ou en lecture-écriture (cf. plus bas)
- Possibilité de créer des sous-volumes
- Sommes de contrôle des données et des méta-données
- Compression (gzip / LZO)
- Sauvegarde incrémentale intégrée au système de fichiers
- Défragmentation à chaud
- conscient des SSD (stockage flash) (TRIM / Élimination de la notification blocs libres pour réutilisation) et optimisations (par exemple en évitant des optimisations de recherche inutiles, l'envoi d'écritures en cluster, même si elles proviennent de fichiers indépendants. Cela se traduit par des opérations d'écriture plus grandes et plus rapide en débit d'écriture)
Installation
Il est conseillé de faire un essai sur une partition de test ! Vous pouvez par exemple formater une clé USB vide et vous familiariser avec les commandes de Btrfs avant de l'utiliser pour vos données…
Si vous choisissez de déplacer des données sur votre partition Btrfs, faites une sauvegarde que vous êtes prêt à restaurer ! Pour pouvoir formater une partition en Btrfs installez le paquet btrfs-tools.
Si c'est trop virtuel, essayer en ligne de commande
sudo apt install btrfs-progs
Utilisation
Créer une nouvelle partition ou formater une partition existante
Utilisez simplement le gestionnaire de disque d'Ubuntu ou gparted, ou bien en ligne de commande:
mkfs.btrfs /dev/sdaN
où sdaN est la partition que vous souhaitez formater.*
Utiliser la partition existante
Pour utiliser la partition, il est nécessaire de la monter.
Un exemple en ligne de commande
sudo mkdir -v /media/BTRFS && sudo chown :$USER /media/BTRFS sudo mount -v /dev/sdaN /media/BTRFS
Convertir une partition ext4 vers Btrfs
Utiliser la commande :
btrfs-convert /dev/<device>
Convertir une structure Btrfs vers un autre système de fichiers
Utiliser la commande :
btrfs restore <device> <path>
L'entrée peut être une partition, un RAID. La sortie peut être dans un répertoire stocké dans n'importe quel type de partition. voir le mode d emploi. Exemples
mkdir RECUP sudo btrfs restore /dev/sda28 -D -o -i -m -v RECUP time sudo btrfs restore /dev/sda28 -vvv -s -S -x -m -i -c --path-regex '^/(|Rugby2019(|/CoupeDuMonde2019(|/CAPTVTY(|/.*))))$' RECUP
Utilisation des fonctions avancées
Nous allons maintenant voir quelques unes des fonctions de Btrfs qui le rendent intéressant par rapport à des systèmes de fichiers comme ext4.
Les sous-volumes
Un sous-volume est une branche du système de fichiers qui se comporte comme un sous-système de fichiers. il apparaît comme un répertoire.
Créer un sous-volume
btrfs subvolume create test
pour créer un sous-volume intitulé test (en supposant que vous êtes quelque part dans votre système de fichiers Btrfs)
Supprimer un sous-volume
btrfs subvolume delete test
Les snapshots
Un snapshot (instantané ou point de restauration), est une image du système de fichiers ou d'un de ses sous-volumes que vous sauvegardez à un instant précis, dans le but de pouvoir y accéder ou la restaurer plus tard. L'objectif principal est de restaurer un système devenu instable.
Une fois créé, un snapshot se comporte comme un dossier ordinaire de votre système de fichiers : vous pouvez le copier, le déplacer vers un support externe, le renommer…
Prendre un snapshot
Pour créer un snapshot du système de fichiers entier en ligne de commande :
btrfs subvolume snapshot test test_v1
Cette commande va prendre un snaphsot du sous-volume (répertoire) test. Cette version figée de votre répertoire sera accessible à travers le répertoire "test_v1". Les modifications faites dans chacun des deux répertoires sont indépendantes. Le système de fichiers gère les modifications pour qu'elles soient transparentes aux yeux de l'utilisateur (avec ext4, il aurait fallu créer une copie du répertoire, ce qui aurait occupé le double d'espace disque. Un snapshot ne consomme pas d'espace disque supplémentaire).
Le logiciel Timeshift permet aussi de prendre un point de restauration (snapshot) Btrfs en mode graphique.
Restaurer un snapshot
Utilisez simplement la commande "mv". Notez que vous pouvez faire la même chose à travers votre gestionnaire de fichiers en mode graphique. Les snapshots apparaissent comme des répertoires que vous pouvez manipuler à votre guise.
Compression
Ceci permet de compresser les données lorsqu'elles seront écrites sur le disque. Deux algorithmes de compression sont disponibles :
- zlib (par défaut)
- lzo : plus rapide et prend moins de charge CPU, mais compresse moins
Pour ceci, il faut éditer le fichier /etc/fstab :
- /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 # / was on /dev/sda2 during installation UUID=07e198ed-18a3-41ed-9e48-bde82ead65fc / btrfs defaults,compress 0 1 # /boot was on /dev/sda1 during installation UUID=90983817-83f8-464f-a50c-39cd02317447 /boot ext2 defaults 0 2 # swap was on /dev/sda5 during installation UUID=a3da3212-876f-4350-94b3-4b5b5040c871 none swap sw 0 0
C'est le compress ligne 4 qui agit. Pour compresser en lzo, tapez
compress=lzo
RAID
il n'y a pas de disque sur les SSD (solid state drive)
Notons que le mot disques dans ce chapitre fait référence au disque physique lui-même ou à une partition du disque.
Types de RAID
- single : Une seule copie des informations. 100% de l’espace disque est utilisé. Le second disque ne sera utilisé que lorsque le premier est rempli. Le troisième que lorsque les deux premiers seront remplis.
- dup : Chaque disque contient les données en double.
- RAID0 : Une seule copie des informations. 100% de l’espace disque est utilisé. Tous les disques seront utilisés simultanément.
- RAID1 : Copie en double. 50% de l’espace disque est utilisé. Un disque peut tomber en panne.
- RAID1C3 : Copie en triple. 33% de l’espace disque est utilisé. deux disques peuvent tomber en panne.
- RAID1C4 : Copie en quadruple. 25% de l’espace disque est utilisé. trois disques peuvent tomber en panne.
- RAID10 : Mélange de RAID1 et RAID0.
- RAID5 : Une copie et une copie de parité distribuée. Un disque peut tomber en panne. L’espace disque utilisable est 100(n-1)/n %. n étant le nombre de disques.
- RAID6 : Une copie et deux copies de parité distribuées. deux disques peuvent tomber en panne. L’espace disque utilisable est 100(n-2)/n %. n étant le nombre de disques.
Pour les explications détaillées, voir ici.
Notons que si les disques ne possèdent pas la même taille, l’espace disque utilisable n’est pas ramené à la taille du plus petit disque. Il reste bien la somme des tailles des disques.
Créer le tableau RAID
Quelques exemples:
Création d'un RAID 1 avec un disque de spare
sudo mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc /dev/sdd
Création d'un RAID 5 en utilisant des partitions préalablement créées de préférence non formatées.
sudo mkfs.btrfs -m raid1 -d raid5 -L Test-BTRFS -f /dev/sda20 /dev/sda23 /dev/sda2[5-8]
Une conséquence importante: Au montage, il est possible de ne pas indiquer un disque qui contient ces données. Le message d'erreur est inquiétant
mount: /media/RaidBTRFS: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
La solution est d'indiquer un autre disque qui aura la structure RAID1.
Monter un RAID pour utilisation
Voir le début du document expliquant comment monter une partition. il est possible d'utiliser n'importe lequel des "disques" du RAID.
Si les noms des éléments constituants le RAID sont oubliés et qu'il n'y a qu'un seul RAID Btrfs de défini, il est possible de lancer cette commande
udisksctl mount -b /dev/disk/by-uuid/$(sudo btrfs filesystem show | grep uuid | cut -d':' -f3 | cut -c2-) Mounted /dev/sda28 at /media/a/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281
-
Voir le type de RAID actuel
Commande pour visualiser le RAID en cours
btrfs fi df /home
?
btrfs fi df /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281
Vérifier le RAID de disques
Voir la synthèse de système RAID Btrfs :
sudo btrfs filesystem usage /home
ou
btrfs fi usage volume_btrfs
?
btrfs fi usage /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281
Pour vérifier l'état du système Btrfs passez par la commande :
sudo btrfs device stats /home
?
sudo btrfs device stats /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281
ou
btrfs device stats volume_btrfs
Pour voir l'état des disques de votre RAID BTRFS passez par la commande :
sudo btrfs filesystem show
ou
btrfs fi show
Pour voir le détail des disques de votre RAID BTRFS passez la commande :
sudo btrfs device usage /home
sudo btrfs device usage /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281
Augmenter/Diminuer le système de fichier du RAID
Visualiser l'espace libre disponible, puis augmenter la taille du système de fichiers sur le RAID:
sudo btrfs filesystem resize +10G /home Resize '/home' of '+10G'
Diminuer la taille du système de fichier sur le RAID
sudo btrfs filesystem resize -10G /home Resize '/home' of '-10G'
Réparer le RAID
Voir l'état des disques :
sudo btrfs device stats /home
sudo btrfs balance start -v -mconvert=dup -dconvert=single /home sudo btrfs device remove /dev/sdc
sudo btrfs device usage /home sudo btrfs fi show sudo btrfs fi usage
sudo btrfs device add /dev/sdc /home sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /home
Voir aussi
- Un complément fort utile : https://sebsauvage.net/wiki/doku.php?id=btrfs