Le système de fichiers BTRFS

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 :

  • 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)

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

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>
Si vous avez une version très ancienne de btrfs-convert (<4.6), il est possible, voire probable, que le système de fichiers ainsi créé se corrompe et se retrouve accessible uniquement en lecture. Donc, à utiliser avec énormément de prudence et avec une sauvegarde. Voir ici. Par contre, cet utilitaire a été réécrit depuis (en 2016), et les versions >=4.6 sont stables (voir https://en.wikipedia.org/wiki/Btrfs#In-place_conversion_from_ext2/3/4_and_ReiserFS). Il n'y a donc plus ce risque, au moins depuis Ubuntu 18.04 (bionic)

Convertir une structure BTRFS vers une autre structure

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.

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

La 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 :

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

Principaux types de raids

  • 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 100x(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 100x(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 raid de 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)
Il est important de mettre les données techniques en protection RAID1 car la protection RAID5 n'est pas totalement au point.

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 raids 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 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

Voir le type de raid actuel

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

Vérifier le raid de disques

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

Augmenter/Diminuer le système de fichier du raid de disques

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 de disques

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
  • btrfs.txt
  • Dernière modification: Le 17/08/2023, 09:01
  • par 171.16.208.3