Btrfs (B-tree File System, souvent prononcé "ButterFS") est un système de fichiers développé par Oracle et placé sous licence GPL. Au contraire d'ext4 qui est une évolution des systèmes de fichiers ext2/3, btrfs se veut conçu différemment, et apporte certaines fonctionnalités inédites. Officiellement, ce système de fichiers est stable.
Les fonctionnalités principales sont les suivantes :
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
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.*
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
Utiliser la commande :
btrfs-convert /dev/<device>
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
Nous allons maintenant voir quelques unes des fonctions de BTRFS qui le rendent intéressant par rapport à des systèmes de fichiers comme EXT4.
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.
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)
btrfs subvolume delete test
Un snapshot, 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…
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.
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.
Ceci permet de compresser les données lorsqu'elles seront écrites sur le disque. Deux algorithmes de compression sont disponibles :
Pour ceci, il faut éditer le fichier /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
Notons que le mot disques dans ce chapitre fait référence au disque physique lui-même ou a une partition du disque.
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.
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] btrfs-progs v5.16.2 See http://btrfs.wiki.kernel.org for more information. WARNING: RAID5/6 support has known problems is strongly discouraged to be used besides testing or evaluation. NOTE: several default settings have changed in version 5.15, please make sure this does not affect your deployments: - DUP for metadata (-m dup) - enabled no-holes (-O no-holes) - enabled free-space-tree (-R free-space-tree)
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.
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 raids 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
-
Commande pour visualiser le raid en cours
btrfs fi df /home Data, RAID5: total=168.00GiB, used=165.12GiB System, RAID5: total=64.00MiB, used=16.00KiB Metadata, RAID5: total=2.00GiB, used=319.66MiB GlobalReserve, single: total=190.94MiB, used=0.00B
btrfs fi df /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 Data, RAID5: total=89.14GiB, used=89.14GiB System, RAID5: total=13.12MiB, used=16.00KiB Metadata, RAID5: total=853.12MiB, used=113.28MiB GlobalReserve, single: total=112.83MiB, used=0.00B
Voir la synthèse de système RAID BTRFS :
sudo btrfs filesystem usage /home Overall: Device size: 1.36TiB Device allocated: 300.02GiB Device unallocated: 1.07TiB
sudo btrfs filesystem usage /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 Overall: Device size: 124.99GiB Device allocated: 118.99GiB Device unallocated: 6.00GiB Device missing: 0.00B Used: 118.10GiB Free (estimated): 4.54GiB (min: 3.00GiB) Free (statfs, df): 0.00B Data ratio: 1.32 Metadata ratio: 1.20 Global reserve: 112.83MiB (used: 0.00B) Multiple profiles: no Data,RAID5: Size:89.14GiB, Used:89.14GiB (100.00%) /dev/sda20 9.83GiB /dev/sda23 11.83GiB /dev/sda25 15.83GiB /dev/sda26 22.83GiB /dev/sda27 28.83GiB /dev/sda28 28.83GiB Metadata,RAID5: Size:853.12MiB, Used:113.28MiB (13.28%) /dev/sda20 170.62MiB /dev/sda23 170.62MiB /dev/sda25 170.62MiB /dev/sda26 170.62MiB /dev/sda27 170.62MiB /dev/sda28 170.62MiB System,RAID5: Size:13.12MiB, Used:16.00KiB (0.12%) /dev/sda20 2.62MiB /dev/sda23 2.62MiB /dev/sda25 2.62MiB /dev/sda26 2.62MiB /dev/sda27 2.62MiB /dev/sda28 2.62MiB Unallocated: /dev/sda20 1.00MiB /dev/sda23 1.00MiB /dev/sda25 1.00MiB /dev/sda26 1.00MiB /dev/sda27 1.00MiB /dev/sda28 6.00GiB
ou
btrfs fi usage volume_btrfs
btrfs fi usage /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 WARNING: cannot read detailed chunk info, per-device usage will not be shown, run as root Overall: Device size: 124.99GiB Device allocated: 0.00B Device unallocated: 124.99GiB Device missing: 0.00B Used: 0.00B Free (estimated): 0.00B (min: 8.00EiB) Free (statfs, df): 0.00B Data ratio: 0.00 Metadata ratio: 0.00 Global reserve: 112.83MiB (used: 0.00B) Multiple profiles: no Data,RAID5: Size:89.14GiB, Used:89.14GiB (100.00%) Metadata,RAID5: Size:853.12MiB, Used:113.28MiB (13.28%) System,RAID5: Size:13.12MiB, Used:16.00KiB (0.12%)
Pour vérifier l'état du système BTRFS passez par la commande :
sudo btrfs device stats /home [/dev/sdb].write_io_errs 0 [/dev/sdb].generation_errs 0 [/dev/sdc].write_io_errs 12897745 [/dev/sdc].read_io_errs 6026751 [/dev/sdc].flush_io_errs 700547
sudo btrfs device stats /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 [/dev/sda20].write_io_errs 0 [/dev/sda20].read_io_errs 0 [/dev/sda20].flush_io_errs 0 [/dev/sda20].corruption_errs 0 [/dev/sda20].generation_errs 0 [/dev/sda23].write_io_errs 0 [/dev/sda23].read_io_errs 0 [/dev/sda23].flush_io_errs 0 [/dev/sda23].corruption_errs 0 [/dev/sda23].generation_errs 0 [/dev/sda25].write_io_errs 0 [/dev/sda25].read_io_errs 0 [/dev/sda25].flush_io_errs 0 [/dev/sda25].corruption_errs 0 [/dev/sda25].generation_errs 0 [/dev/sda26].write_io_errs 0 [/dev/sda26].read_io_errs 0 [/dev/sda26].flush_io_errs 0 [/dev/sda26].corruption_errs 0 [/dev/sda26].generation_errs 0 [/dev/sda27].write_io_errs 0 [/dev/sda27].read_io_errs 0 [/dev/sda27].flush_io_errs 0 [/dev/sda27].corruption_errs 0 [/dev/sda27].generation_errs 0 [/dev/sda28].write_io_errs 0 [/dev/sda28].read_io_errs 0 [/dev/sda28].flush_io_errs 0 [/dev/sda28].corruption_errs 0 [/dev/sda28].generation_errs 0
ou
btrfs device stats volume_btrfs btrfs device stats /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 ERROR: getting device info for /media/a/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 failed: Operation not permitted
Pour voir l'état des disques de votre RAID BTRFS passez par la commande :
sudo btrfs filesystem show Label: none uuid: c5f42f5d-7802-4f4f-bee6-3c8e0994bbe8 Total devices 3 FS bytes used 146.43GiB devid 1 size 465.76GiB used 100.00GiB path /dev/sdb devid 3 size 465.76GiB used 100.01GiB path /dev/sdd *** Some devices missing=
sudo btrfs filesystem show Label: none uuid: c2b6e6ec-10d6-4c48-a28a-0dfc6f62d728 Total devices 6 FS bytes used 89.26GiB devid 1 size 10.01GiB used 10.00GiB path /dev/sda20 devid 2 size 12.00GiB used 12.00GiB path /dev/sda23 devid 3 size 16.00GiB used 16.00GiB path /dev/sda25 devid 4 size 23.00GiB used 23.00GiB path /dev/sda26 devid 5 size 29.00GiB used 29.00GiB path /dev/sda27 devid 6 size 35.00GiB used 29.00GiB path /dev/sda28 Label: none uuid: 54cceaf6-7772-4fcc-9548-d9ae0247f9fa Total devices 6 FS bytes used 148.80GiB devid 1 size 76.25GiB used 56.13GiB path /dev/sdc17 devid 2 size 76.25GiB used 56.13GiB path /dev/sdd3 devid 3 size 76.25GiB used 56.13GiB path /dev/sdd4 devid 4 size 76.25GiB used 13.24GiB path /dev/sdd5 devid 5 size 76.25GiB used 13.24GiB path /dev/sdd6 devid 6 size 76.25GiB used 13.24GiB path /dev/sdd7
ou
btrfs fi show
sudo btrfs fi show Label: none uuid: c2b6e6ec-10d6-4c48-a28a-0dfc6f62d728 Total devices 6 FS bytes used 89.26GiB devid 1 size 10.01GiB used 10.00GiB path /dev/sda20 devid 2 size 12.00GiB used 12.00GiB path /dev/sda23 devid 3 size 16.00GiB used 16.00GiB path /dev/sda25 devid 4 size 23.00GiB used 23.00GiB path /dev/sda26 devid 5 size 29.00GiB used 29.00GiB path /dev/sda27 devid 6 size 35.00GiB used 29.00GiB path /dev/sda28 Label: none uuid: 54cceaf6-7772-4fcc-9548-d9ae0247f9fa Total devices 6 FS bytes used 148.80GiB devid 1 size 76.25GiB used 56.13GiB path /dev/sdc17 devid 2 size 76.25GiB used 56.13GiB path /dev/sdd3 devid 3 size 76.25GiB used 56.13GiB path /dev/sdd4 devid 4 size 76.25GiB used 13.24GiB path /dev/sdd5 devid 5 size 76.25GiB used 13.24GiB path /dev/sdd6 devid 6 size 76.25GiB used 13.24GiB path /dev/sdd7
Pour voir le détail des disques de votre RAID BTRFS passez la commande :
sudo btrfs device usage /home /dev/sdb, ID: 1 Device size: 465.76GiB Device slack: 0.00B Data,RAID1: 99.00GiB Metadata,RAID1: 1.00GiB Unallocated: 365.76GiB /dev/sdc, ID: 2 Device size: 0.00B Device slack: 0.00B ...
sudo btrfs device usage /media/$USER/c2b6e6ec-10d6-4c48-a28a-0dfc6f62d7281 /dev/sda20, ID: 1 Device size: 10.01GiB Device slack: 0.00B Data,RAID5/6: 9.83GiB Metadata,RAID5/6: 170.62MiB System,RAID5/6: 2.62MiB Unallocated: 1.00MiB /dev/sda23, ID: 2 Device size: 12.00GiB Device slack: 0.00B Data,RAID5/6: 9.83GiB Data,RAID5/5: 1.99GiB Metadata,RAID5/6: 170.62MiB System,RAID5/6: 2.62MiB Unallocated: 1.00MiB /dev/sda25, ID: 3 Device size: 16.00GiB Device slack: 0.00B Data,RAID5/6: 9.83GiB Data,RAID5/5: 1.99GiB Data,RAID5/4: 4.00GiB Metadata,RAID5/6: 170.62MiB System,RAID5/6: 2.62MiB Unallocated: 1.00MiB /dev/sda26, ID: 4 Device size: 23.00GiB Device slack: 0.00B Data,RAID5/6: 9.83GiB Data,RAID5/5: 1.99GiB Data,RAID5/4: 4.00GiB Data,RAID5/3: 7.00GiB Metadata,RAID5/6: 170.62MiB System,RAID5/6: 2.62MiB Unallocated: 1.00MiB /dev/sda27, ID: 5 Device size: 29.00GiB Device slack: 0.00B Data,RAID5/6: 9.83GiB Data,RAID5/5: 1.99GiB Data,RAID5/4: 4.00GiB Data,RAID5/3: 7.00GiB Data,RAID5/2: 6.00GiB Metadata,RAID5/6: 170.62MiB System,RAID5/6: 2.62MiB Unallocated: 1.00MiB /dev/sda28, ID: 6 Device size: 35.00GiB Device slack: 0.00B Data,RAID5/6: 9.83GiB Data,RAID5/5: 1.99GiB Data,RAID5/4: 4.00GiB Data,RAID5/3: 7.00GiB Data,RAID5/2: 6.00GiB Metadata,RAID5/6: 170.62MiB System,RAID5/6: 2.62MiB Unallocated: 6.00GiB
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'
Voir l'état des disques :
sudo btrfs device stats /home [/dev/sdb].write_io_errs 0 [/dev/sdb].read_io_errs 0 [/dev/sdb].flush_io_errs 0 [/dev/sdb].corruption_errs 0 [/dev/sdb].generation_errs 0 [/dev/sdc].write_io_errs 204890173 [/dev/sdc].read_io_errs 19080823 [/dev/sdc].flush_io_errs 10027539 [/dev/sdd].generation_errs 0
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