Btrfs (Français) - ArchWiki

Jump to content

Related articles

- File systems
- Snapper
- dm-crypt/Encrypting an entire system#Btrfs subvolumes with swap

Cet article ou section a besoin d'être traduit(e).

Notes: L'état de traduction de cet article est indéfini. Voir ArchWiki:Translation Team (Français). (Discuss in Talk:Btrfs (Français)#)

Btrfs (système de fichiers B-tree, prononcé comme "butter F S", "better F S", "b-tree F S", ou simplement en l'épelant) est un système de fichiers basé sur le principe copie en écriture (copy-on-write (COW)), initialement conçu chez Oracle Corporation pour être utilisé sous Linux. Le développement de Btrfs a commencé en 2007, et en août 2014, le format sur disque du système de fichiers a été marqué comme stable.

De Btrfs Wiki:

Btrfs est un nouveau système de fichiers Copie en écriture (CoW) pour Linux destiné à implémenter des fonctionnalités avancées tout en se concentrant sur la tolérance aux pannes, la réparation et l'administration facile. Développé conjointement chez Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO et bien d'autres, Btrfs est licencié sous licence GPL et ouvert à la contribution de n'importe qui.

Attention: Btrfs a quelques fonctionnalités qui sont considérées comme expérimentales. Voir le Status du Wiki de Btrfs, Est-ce que Btrfs est stable? et Mise en route pour des informations plus détaillées. Voir la section #Problèmes connus.

## Préparation

Les noyaux officiels linux et linux-lts incluent la prise en charge de Btrfs. Si vous voulez démarrer à partir d'un système de fichiers Btrfs, vérifiez si votre chargeur d'amorçage prend en charge Btrfs.

Les utilitaires d'espace utilisateur sont disponibles en installant le paquet btrfs-progs.

## Création du système de fichiers

Ce qui suit montre comment créer un nouveau système de fichiers Btrfs.

Pour convertir une partition ext3/4 en Btrfs, reportez-vous à la section #Conversion Ext3/4 en Btrfs. Pour utiliser une configuration sans partition, voir #Disque Btrfs sans partition.

### Système de fichiers sur un seul périphérique

Pour formater une partition faites:

    # mkfs.btrfs -L mylabel /dev/partition

Pour utiliser une taille de bloc plus grande pour les données/métadonnées, spécifiez une valeur pour le `nodesize` via le commutateur `-n` comme illustré dans cet exemple en utilisant des blocs de 16 Ko.

    # mkfs.btrfs -L mylabel -n 16k /dev/partition

### Système de fichiers multi-périphériques

Attention: Le mode RAID 5, RAID 6 de Btrfs est considéré comme fatalement imparfait, et ne devrait pas être utilisé pour "autre chose que des tests avec des données jetables". Voir la page Btrfs sur RAID5 et RAID6 pour les mises à jour des statuts. Certains chargeurs d'amorçage tels que syslinux ne prennent pas en charge les systèmes de fichiers multi-périphériques.

Plusieurs périphériques peuvent être saisis pour créer un RAID. Les niveaux RAID pris en charge comprennent RAID 0, RAID 1, RAID 10, RAID 5 et RAID 6. Les niveaux RAID peuvent être configurés séparément pour les données et les métadonnées à l'aide des options `-d` et `-m` respectivement. Par défaut, les données sont rayées (`raid0`) et les métadonnées sont mises en miroir (`raid1`). Voir Utilisation de Btrfs avec plusieurs périphériques pour plus d'informations sur la création d'un volume RAID Btrfs ainsi que la page de manuel pour `mkfs.btrfs`.

    # mkfs.btrfs -d raid0 -m raid1 /dev/part1 /dev/part2 ...

Vous devez inclure le hook `udev` ou le hook `btrfs` dans `/etc/mkinitcpio.conf` afin d'utiliser plusieurs périphériques btrfs dans un pool. Voir l'article Mkinitcpio (Français)#HOOKS pour plus d'informations.

Note: Si les disques de votre réseau multi-périphériques ont des tailles différentes, cela peut ne pas utiliser toute la capacité de tous les lecteurs. Afin d'utiliser la pleine capacité de tous les disques, utilisez `-d single` au lieu de `-d raid0 -m raid1` (métadonnées en miroir, données non réfléchies et non rayées).
Note: Le montage d'un tel système de fichiers peut avoir pour conséquence que tous les périphériques, à l'exception d'un seul, soient bloqués et que le système ne finisse jamais de démarrer à cause d'un bug dans la gestion de ce type de système de fichiers.

Voir #RAID pour des conseils sur la maintenance spécifique aux systèmes de fichiers multi-périphériques Btrfs.

## Configuration du système de fichiers

### Copie en écriture (CoW)

Par défaut, Btrfs utilise copy on write pour tous les fichiers en permanence. Voir la section Btrfs Sysadmin Guide pour plus de détails sur l'implémentation, ainsi que les avantages et les inconvénients.

#### Désactiver COW

Pour désactiver la fonction de copie en écriture pour les fichiers nouvellement créés dans un sous-volume monté, utilisez l'option de montage `nodatacow`. Cela n'affectera que les fichiers nouvellement créés. La copie en écriture se produira toujours pour les fichiers existants.

Note: A partir des options Btrfs Wiki Mount: dans un même système de fichiers, il n'est pas possible de monter certains sous-volumes avec `nodatacow` et d'autres avec `datacow`. L'option de montage du premier sous-volume monté s'applique à tous les autres sous-volumes.

Pour désactiver la fonction copie en écriture pour les fichiers/répertoires individuels, procédez comme suit:

    $ chattr +C /dir/file

Ceci désactive la copie en écriture pour les opérations dans lesquelles il n' y a qu'une seule référence au fichier. S'il y a plus d'une référence (ex: via `cp --reflink=always` ou à cause d'un snapshot du système de fichiers", la copie en écriture se produit toujours.

Note: Depuis la page de manuel de chattr: "Pour btrfs, l'indicateur 'C' doit être placé sur les nouveaux fichiers ou vides. S'il est défini sur un fichier qui a déjà des blocs de données, il n'est pas défini quand les blocs assignés au fichier seront entièrement stables. Si l'indicateur 'C' est placé sur un répertoire, cela n'aura pas d'effet sur le répertoire, mais les nouveaux fichiers créés dans ce répertoire auront l'attribut No_COW."
Astuce: Conformément à la remarque ci-dessus, vous pouvez utiliser l'astuce suivante pour désactiver la copie en écriture sur des fichiers existants dans un répertoire:

     $ mv /path/to/dir /path/to/dir_old
     $ mkdir /path/to/dir
     $ chattr +C /path/to/dir
     $ cp -a /path/to/dir_old/* /path/to/dir
     $ rm -rf /path/to/dir_old

Veillez à ce que les données ne soient pas utilisées pendant ce processus. Notez également que `mv` ou `cp --reflink` comme décrit ci-dessous ne fonctionnera pas.

#### Création de copies légères

Par défaut, lorsque vous copiez des fichiers sur un système de fichiers Btrfs avec `cp`, des copies réelles sont créées. Pour créer une copie légère faisant référence aux données originales, utilisez l'option reflink:

    $ cp --reflink source dest

Voir la page de manuel sur cp(1) pour plus de détails sur le paramètre `--reflink`.

### Compression

Btrfs permet la compression transparente, ce qui signifie que chaque fichier de la partition est automatiquement compressé. Cela permet non seulement de réduire la taille des fichiers, mais aussi d'améliorer les performances, en particulier si vous utilisez l'algorithme lzo, dans certains cas d'utilisation spécifiques (ex: un seul thread avec des entrées/sorties de fichiers volumineux), tout en nuisant manifestement au rendement dans d'autres cas (ex: cpu et/ou multithreaded intensif avec de gros fichiers IO).

La compression est activée à l'aide des options compress=zlib ou compress=lzo mount. Seuls les fichiers créés ou modifiés après l’ajout de l’option de montage seront compressés. Cependant, il peut être appliqué assez facilement aux fichiers existants (par exemple après une conversion de ext3/4) en utilisant la commande `btrfs filesystem defragment -calg`, où `alg` est `zlib` ou `lzo`. Pour re-compresser tout le système de fichiers avec lzo, exécutez la commande suivante:

    # btrfs filesystem defragment -r -v -clzo /

Astuce: La compression peut également être activée par fichier sans utiliser l’option de montage `compress`; il suffit d’appliquer `chattr +c` au fichier. Lorsqu’il est appliqué aux répertoires, il provoque la compression automatique des nouveaux fichiers au fur et à mesure qu’ils arrivent.

Lorsque vous installez Arch sur une partition Btrfs vide, utilisez l’option `compress` lors du montage du système de fichiers: `mount -o compress=lzo /dev/sdxY /mnt/`. Lors de la configuration, ajoutez `compress=lzo` aux options de montage du système de fichiers racine dans fstab.

### Sous-volumes

“Un sous-volume btrfs n’est pas un bloc (et ne peut pas être traité comme tel) mais un sous-volume btrfs peut être considéré comme un espace de noms de fichier POSIX. Cet espace de nommage est accessible via le sous-volume supérieur du système de fichiers, ou il peut être monté en tant que tel.” [1].

Chaque système de fichiers Btrfs possède un sous-volume de niveau supérieur avec ID 5. Il peut être monté comme `/` (par défaut), ou un autre sous-volume peut être monté à la place. Les sous-volumes peuvent être déplacés dans le système de fichiers et sont plutôt identifiés par leur identifiant que par leur chemin d’accès.

Voir les liens suivants pour plus de détails:

- Btrfs Wiki SysadminGuide#Subvolumes
- Basic_Filesystem_Commands
- Btrfs Wiki Trees

#### Création d’un sous-volume

Pour créer un sous-volume:

    $ btrfs subvolume create /path/to/subvolume

#### Lister des sous-volumes

Pour voir la liste des sous-volumes actuels sous le chemin:

    $ btrfs subvolume list -p path

#### Suppression d’un sous-volume

Pour supprimer un sous-volume:

    $ btrfs subvolume delete /path/to/subvolume

Tenter de supprimer le répertoire `/path/to/subvolume` sans utiliser la commande ci-dessus ne supprimera pas le sous-volume.

#### Montage des sous volumes

Les sous-volumes peuvent être montés comme des partitions de système de fichiers en utilisant les paramètres `subvol=/path/to/subvolume`ou `subvolid=objectid mount`. Par exemple, vous pourriez avoir un sous-volume nommé `subvol_root` et le monter comme `/`. On peut imiter les partitions de système de fichiers traditionnelles en créant divers sous-volumes sous le niveau supérieur du système de fichiers et ensuite les monter aux points de montage appropriés. Ainsi, on peut facilement restaurer un système de fichiers (ou une partie de celui-ci) dans un état précédent en utilisant #Snapshot.

Astuce: La modification de la disposition des sous-volume est simplifiée en n’utilisant pas le sous-volume de niveau supérieur (ID=5) comme `/` (ce qui est fait par défaut). Au lieu de cela, envisagez de créer un sous-volume pour héberger vos données réelles et de les monter en tant que `/`.
Note: “La plupart des options de montage s’appliquent à l’ensemble du système de fichiers, et seules les options pour le premier sous-volume à monter prendront effet. Cela est dû au manque de mise en œuvre et pourrait changer à l’avenir.” [2] Voir la FAQ de Btrfs Wiki pour quelles options de montage peuvent être utilisées par sous-volume.

Voir Snapper#Suggested filesystem layout, Btrfs SysadminGuide#Managing Snapshots, et Btrfs SysadminGuide#Layout par exemple les structures de système de fichiers utilisant des sous-volumes.

#### Modification du sous-volume par défaut

Le sous-volume par défaut est monté si aucune option de montage `subvol=` n’est fournie. Pour changer le sous-volume par défaut, faites:

    $ btrfs subvolume set-default subvolume-id /

Le sous-volume-id peut être trouvé par lister.

Note: Après avoir modifié le sous-volume par défaut sur un système avec GRUB, vous devez exécuter `grub-install` à nouveau pour notifier le chargeur d'amorçage des modifications. Voir ce fil de discussion du forum.

Changer le sous-volume par défaut avec `btrfs subvolume set-default` rendra le niveau supérieur du système de fichiers inaccessible, sauf en utilisant les options de montage `subvol=/` ou `subvolid=5` [3].

### Quota

Attention: Qgroup n'est pas encore stable et la combinaison de quotas avec (de trop nombreux) snapshots de sous-volumes peut causer des problèmes de performance, par exemple lors de la suppression des snapshots. De plus, il y a plusieurs autres problèmes connus.

La prise en charge des quotas dans Btrfs est implémentée à un niveau de sous-volume par l’utilisation de groupes de quotas ou qgroup: Chaque sous-volume est affecté à un groupe de quotas sous la forme de 0/<subvolume id> par défaut. Toutefois, il est possible de créer un groupe de quotas en utilisant n’importe quel nombre si vous le souhaitez.

Pour utiliser les qgroupes, vous devez d’abord activer le quota en utilisant

    $ btrfs quota enable

À partir de ce moment, les sous-volumes nouvellement créés seront contrôlés par ces groupes. Afin de les activer rétrospectivement pour des sous-volumes déjà existants, activez normalement le quota, puis créez un groupe q (groupe de quotas) pour chacun de ces sous-volumes en utilisant leur <subvolume id> et rescannez-les:

    # btrfs subvolume list <path> | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} <path>
    # btrfs quota rescan <path>

Les groupes de quotas dans Btrfs forment une arborescence hiérarchique, dans laquelle les qgroupes sont rattachés aux sous-volumes. Les limites de taille sont définies par qgroup et s’appliquent quand une limite est atteinte dans une arborescence contenant un sous-volume donné.

Les limites des groupes de quotas peuvent être appliquées soit à l’utilisation totale des données, soit à l’utilisation de données non partagées, soit à l’utilisation de données compressées, soit aux deux. La copie de fichier et la suppression de fichier peuvent toutes deux affecter les limites puisque la limite non partagée d’un autre qgroup peut changer si les fichiers du volume original sont supprimés et qu’il ne reste qu’une seule copie.

Par exemple, un nouveau Snapshot partage presque tous les blocs avec le sous-volume original, les nouvelles écritures dans l’un ou l’autre sous-volume augmenteront vers la limite exclusive, les suppressions de données communes dans un volume augmenteront vers la limite exclusive dans l’autre.

Pour appliquer une limite à un qgroup, utilisez la commande `btrfs qgroup limit`. Selon votre utilisation, utilisez une limite totale, une limite non partagée (`-e`) ou une limite compressée (`-c`).

Pour afficher l’utilisation et les limites pour un chemin donné dans un système de fichiers, utilisez

    # btrfs qgroup show -reF <path>

### Intervalle d'engagement (commit)

La résolution à laquelle les données sont écrites dans le système de fichiers est dictée par Btrfs lui-même et par les paramètres du système. Btrfs passe par défaut à un intervalle de 30 secondes entre les points de contrôle dans lequel les nouvelles données sont engagées dans le système de fichiers. Ceci peut être modifié en ajoutant l'option `commit` mount dans `/etc/fstab` pour la partition btrfs.

    LABEL=arch64 / btrfs defaults,noatime,compress=lzo,commit=120 0 0

Les paramétrages de l'ensemble du système affectent également les intervalles de validation. Ils incluent les fichiers sous `/proc/sys/vm/*` et sont en dehors du cadre de cet article du wiki. La documentation du noyau pour eux réside dans `Documentation/sysctl/vm.txt`.

### SSD TRIM

Un système de fichiers Btrfs est capable de libérer les blocs inutilisés d'un lecteur SSD prenant en charge la commande TRIM.

Pour plus d'informations sur l'activation et l'utilisation de TRIM, voir Solid state drive (Français)#TRIM.

## Usage

### Affichage de l'espace utilisé/libre

Les outils généraux d'espace utilisateur linux tels que `/usr/bin/df` ne rapporteront pas correctement l'espace libre sur une partition Btrfs. Il est recommandé d'utiliser `/usr/bin/btrfs` pour interroger une partition Btrfs. Voici une illustration de cet effet, d'abord en faisant une requête à l'aide de `df -h`, puis en utilisant `btrfs filesystem df`:

    $ df -h /

     Filesystem      Size  Used Avail Use% Mounted on
     /dev/sda3       119G  3.0G  116G   3% /

    $ btrfs filesystem df /

    Data: total=3.01GB, used=2.73GB
    System: total=4.00MB, used=16.00KB
    Metadata: total=1.01GB, used=181.83MB

Remarquez que `df -h` indique 3.0GB utilisé mais `btrfs filesystem df` indique 2.73GB pour les données. Ceci est dû à la façon dont Btrfs alloue les espaces dans le pool.

L'utilisation réelle du disque est la somme des trois valeurs 'utilisées' qui est inférieure à 3.0GB comme rapporté par `df -h`.

Note: Si vous voyez une entrée de type `unknown` dans la sortie de `btrfs filesystem df` au noyau >= 3.15, ceci est un bug d'affichage. A partir de ce patch, l'entrée signifie GlobalReserve, ce qui est une sorte de tampon pour les changements non encore purgés. Cette entrée est affichée comme `unknown, single` dans les configurations RAID et ne peut pas être rééquilibrée.

Une autre commande utile pour afficher une lecture moins verbeuse de l'espace utilisé est `btrfs filesystem show`:

    # btrfs filesystem show /dev/sda3

Une commande plus verbeuse combinant les informations de `df` et `show` qui relie directement l'espace libre et utilisé est `btrfs filesystem usage`. Il est supposé remplacer la commande `df` du système de fichiers btrfs à la longue:

    # btrfs filesystem usage /

Note: La commande `btrfs filesystem usage` ne fonctionne pas correctement avec les niveaux RAID `RAID5/RAID6`.

### Défragmentation

Btrfs prends en charge la défragmentation en ligne via mount option. Pour défragmenter manuellement votre `/`, utilisez:

    # btrfs filesystem defragment -r /

En utilisant la commande ci-dessus sans le commutateur `-r`, seules les métadonnées du sous-volume contenant le répertoire seront défragmentées. Ceci permet la défragmentation d'un seul fichier en spécifiant simplement le chemin d'accès.

Défragmenter un fichier qui a une copie en écriture COW (une copie instantanée (snapshot) ou une copie faite avec `cp --reflink` ou `bcp`) de plus l'utilisation du commutateur `-c` avec un algorithme de compression peut avoir comme conséquence deux fichiers indépendants augmentant effectivement l'utilisation du disque.

### RAID

Btrfs offre un "RAID" natif pour les #Système de fichiers multi-périphériques.

Les caractéristiques notables qui démarquent le RAID btrfs de mdadm sont les tableaux redondants autorégénérateurs et l’équilibrage en ligne. Voir la page wiki de Btrfs pour plus d’informations. La page sysadmin de Btrfs contient également une section avec un peu plus de détails techniques.

Attention: Le code RAID de parité (RAID 5/6) contient plusieurs bugs sérieux de perte de données. Voir la page RAID5/6 du Wiki de Btrfs et un rapport de bug sur la liste de diffusion de linux-btrfs pour plus d’informations détaillées.

#### Scrub

Le Glossaire du Wiki de Btrfs dit que le scrub Btrfs est "un outil de vérification de système de fichiers en ligne. Lit toutes les données et métadonnées sur le système de fichiers, et utilise les checksums et les copies en double depuis le stockage RAID pour identifier et réparer les données corrompues."

Attention: Un processus de scrub en cours empêchera le système de s’arrêter, voir ce thread pour plus de détails.

##### Démarrage manuel

Pour démarrer un scrub (en arrière-plan) sur le système de fichiers qui contient `/`:

    # btrfs scrub start /

Pour vérifier l’état d’un scrub en cours:

    # btrfs scrub status /

##### Commencer avec un service ou un timer

Le paquet btrfs-progs apporte l’unité `btrfs-scrub@.timer` pour le nettoyage mensuel du point de montage spécifié. Activez le timer avec un chemin de sortie, par ex: `btrfs-scrub@-.timer` pour `/` et `btrfs-scrub@home.timer` pour `/home`. Vous pouvez utiliser `systemd-escape -p /path/to/mountpoint` pour échapper le chemin, voir systemd-escape pour plus de détails.

Vous pouvez également exécuter le scrub en démarrant `btrfs-scrub@.service` (avec le même chemin d’accès encodé). L’avantage de cette méthode par rapport à la méthode `# btrfs` est que les résultats de l’opération seront consignés dans le journal systemd.

#### Balance

"Un équilibrage transmet à nouveau toutes les données du système de fichiers via l’attributeur. Il est principalement destiné à rééquilibrer les données dans le système de fichiers à travers les périphériques lorsqu’un périphérique est ajouté ou supprimé. Un équilibrage régénère les copies manquantes pour les niveaux RAID redondants, si un périphérique a échoué." [4] Voir la page FAQ en amont.

Sur un système de fichiers mono périphérique, une balance (équilibrage) peut également être utile pour réduire (temporairement) la quantité de blocs de méta-données alloués mais non utilisés.

Parfois, cela est nécessaire pour résoudre les problèmes de "système de fichiers complet".

    # btrfs balance start /
    # btrfs balance status /

### Snapshot

"Un Snapshot (instantané) est simplement un sous-volume qui partage ses données (et métadonnées) avec un autre sous-volume, en utilisant les capacités COW de btrfs". Voir Btrfs Wiki SysadminGuide#Snapshots pour plus de détails.

Pour créer un Snapshot:

    # btrfs subvolume snapshot source [dest/]name

Pour créer un snapshot en lecture seule, ajoutez le paramètre `-r`. Pour créer une version inscriptible d’un snapshot en lecture seule, il suffit de créer un snapshot.

Note: Les snapshots ne sont pas récursifs. Chaque sous-volume imbriqué sera un répertoire vide à l’intérieur de ce snapshot.

### Envoyer/recevoir

Un sous-volume peut être envoyé à stdout ou un fichier à l'aide de la commande `send`. Ceci est généralement le plus utile lorsqu'il est acheminé vers la commande `receive` d'un Btrfs.

Par exemple, pour envoyer un snapshot nommé `/root_backup` (peut-être d’un snapshot que vous avez fait plus tôt de `/`) à `/root_backup`, vous devriez faire ce qui suit:

    # btrfs send /root_backup | btrfs receive /backup

Le snapshot envoyé doit être en lecture seule. La commande ci-dessus est utile pour copier un sous-volume sur un périphérique externe (par ex: un disque USB monté à `/backup` voir ci-dessus).

Vous pouvez également n’envoyer que la différence entre deux snapshots. Par exemple, si vous avez déjà envoyé une copie de `root_backup` ci-dessus et que vous avez créé un nouveau snapshot en lecture seule sur votre système nommé `root_backup_new`, alors pour envoyer uniquement la différence incrémentale à `/backup` faire:

    # btrfs send -p /root_backup /root_backup_new | btrfs receive /backup

Maintenant un nouveau sous-volume nommé `root_backup_new` sera présent dans `/backup`.

Voir Btrfs Wiki's Incremental Backup page sur la façon d’utiliser ceci pour les sauvegardes incrémentales et pour les outils qui automatisent le processus.

### Déduplication

En utilisant la fonction de copie en écriture (COW), Btrfs est capable de copier des fichiers ou des sous-volumes entiers sans avoir à copier les données. Cependant, chaque fois qu’un fichier est modifié, une nouvelle copie correcte est créée. La déduplication va plus loin, en identifiant activement les blocs de données qui partagent des séquences communes et en les combinant dans une certaine mesure avec la même sémantique de copie en écriture.

Les outils dédiés à la déduplication d’une partition formatée en Btrfs incluent duperemove, bedupAUR et btrfs-dedup. On peut aussi vouloir simplement dédupliquer des données sur un niveau de fichier au lieu d’utiliser par exemple rmlint ou jdupesAUR. Pour un aperçu des fonctionnalités disponibles de ces programmes et des informations supplémentaires, jetez un coup d’oeil à upstream Wiki entry.

De plus, les développeurs Btrfs travaillent sur la déduplication inband (également connue sous le nom de déduplication synchrone ou en ligne), c’est-à-dire la déduplication effectuée lors de l’écriture de nouvelles données sur le système de fichiers. Actuellement, il s’agit encore d’une expérience développée en dehors de l’arborescence. Les utilisateurs désireux de tester la nouvelle fonctionnalité doivent lire la page appropriée du wiki du noyau.

## Problèmes connus

Quelques limites devraient être connues avant d’essayer.

### Chiffrement

Btrfs n’a pas de pris en charge intégrée du chiffrement, mais cela pourrait venir dans le futur. Les utilisateurs peuvent chiffrer la partition avant d’exécuter `mkfs.btrfs`. Voir dm-crypt/Encrypting an entire system#Btrfs subvolumes with swap.

Les systèmes de fichiers Btrfs existants peuvent utiliser quelque chose comme EncFS ou TrueCrypt, bien que peut-être sans certaines fonctionnalités de Btrfs.

### Fichier d'échange

Les fichier d'échange dans Btrfs sont pris en charge depuis le noyau Linux 5.0. [5] La façon correcte d'initialiser un fichier d'échange est de créer d'abord un sous-volume non-snapshoté pour héberger le fichier, puis de définir l'attribut `No_COW` sur le répertoire entier avec chattr.

    # chattr +C /path/to/swapsubvolume

À partir de maintenant, tout nouveau fichier créé dans le sous-volume d'échange aura l'attribut `No_COW` défini.

Continuez avec les étapes de Swap (Français)#Création de fichiers d'échange. La configuration de l'hibernation vers un fichier swap est décrite dans Power management/Suspend and hibernate#Hibernation into swap file on Btrfs.

Note: Les fichiers swap sur les systèmes de fichiers couvrant plusieurs périphériques ne sont pas pris en charge. Voir btrfs(5) § SWAPFILE SUPPORT et discussion sur les forums Arch.

### TLP

L’utilisation de TLP nécessite des précautions particulières afin d’éviter la corruption du système de fichiers. Reportez-vous à la section TLP correspondante pour plus d’informations.

## Trucs et astuces

### Disque Btrfs sans partition

Attention: La plupart des utilisateurs ne veulent pas ce type de configuration et devraient plutôt installer Btrfs sur une partition régulière. En outre GRUB déconseille fortement l’installation sur un disque sans partition.

Btrfs peut occuper tout un périphérique de stockage de données, en remplaçant les schémas de partitionnement MBR ou GPT, en utilisant des #Sous-volumes pour simuler les partitions.

Cependant, l’utilisation d’une configuration sans partition n’est pas nécessaire #Création du système de fichiers sur une partition existante qui a été créée en utilisant une autre méthode. Il y a certaines limitations aux configurations de disques uniques sans partition:

- Ne peut pas utiliser différents systèmes de fichiers pour différents points de montage.

- Ne peut pas utiliser l'UEFI pour démarrer.

Pour écraser la table de partition existante avec Btrfs, exécutez la commande suivante:

    # mkfs.btrfs /dev/sdX

Par exemple, utilisez `/dev/sda` plutôt que `/dev/sda1`. Ce dernier formaterait une partition existante au lieu de remplacer l’ensemble du schéma de partitionnement. Installez le chargeur d'amorçage comme vous le feriez pour un périphérique de stockage de données avec un Master Boot Record. Voir Syslinux installation manuelle ou GRUB (Français)/Tips and tricks (Français)#Installer sur une partition ou un disque sans partition[broken link: invalid section].

### Conversion Ext3/4 en Btrfs

Attention: Il y a de nombreux rapports sur la liste de diffusion btrfs concernant les conversions incomplètes/corrompues/brisées. Assurez-vous d'avoir des sauvegardes efficaces de toutes les données que vous ne pouvez pas vous permettre de perdre. Voir Conversion d'Ext3 sur le wiki btrfs pour plus d'informations.

Démarrez à partir d'un CD d'installation, puis convertissez en faisant:

    # btrfs-convert /dev/partition

Montez la partition et testez la conversion en vérifiant les fichiers. Assurez-vous de changer le `/etc/fstab` pour refléter le changement (type btrfs et fs_passno [le dernier champ] à 0 car Btrfs ne vérifie pas le système de fichiers au démarrage).

Notez également que l'UUID de la partition aura changé, donc mettez à jour fstab en conséquence lors de l'utilisation des UUIDs. `chroot` (chrooter) dans le système et reconstruire la liste de menus GRUB (voir Installation par chroot et GRUB (Français)).

Si vous convertissez un système de fichiers racine, tout en restant chrooté, exécutez `mkinitcpio -p linux` pour régénérer les initramfs ou le système ne démarrera pas correctement.

Si vous êtes coincé dans grub avec `'unknown filesystem'` essayez de réinstaller grub avec `grub-install /dev/partition` et régénérez la configuration ainsi que `grub-mkconfig -o /boot/grub/grub. cfg`. Après avoir confirmé qu'il n' y a pas de problèmes, terminez la conversion en supprimant le sous-volume de sauvegarde `ext2_saved`. Notez que vous ne pouvez pas revenir à ext3/4 sans lui.

    # btrfs subvolume delete /ext2_saved

Enfin #Balance (équilibrer) le système de fichiers pour récupérer l'espace.

N'oubliez pas que certaines applications qui ont été installées auparavant doivent être adaptées à Btrfs.

### Checksum accélération matérielle

Pour vérifier si le checksum de Btrfs est matériellement accéléré:

    $ dmesg | grep crc32c

    Btrfs loaded, crc32c=crc32c-intel

Si vous voyez `crc32c=crc32c-generic`, c'est probablement parce que votre partition racine doit être Btrfs, et vous devrez compiler `crc32c-intel` dans le noyau pour qu'il fonctionne. Mettre `crc32c-intel` dans mkinitcpio.conf ne fonctionne pas.

### Récupération de la corruption

`btrfs-check` ne peut pas être utilisé sur un système de fichiers monté. Pour pouvoir utiliser `btrfs-check` sans démarrer à partir d'un live USB, ajoutez-le au ramdisk initial:

    /etc/mkinitcpio.conf

    BINARIES="/usr/bin/btrfs"

Régénérer le disque initial à l'aide de mkinitcpio. Ensuite, s'il y a un problème de démarrage, l'utilitaire est disponible pour réparation.

Note: Si le processus fsck doit invalider le cache de l'espace (et/ou d'autres caches?) alors il est normal qu'un démarrage ultérieur raccroche pendant un certain temps (il peut donner des messages de console sur btrfs-transaction étant suspendue). Le système devrait se rétablir après un certain temps.

Voir la page Btrfs wiki pour plus d'informations.

### Démarrage en snapshots

Pour démarrer dans un snapshot, vous devez spécifier le sous-volume via un paramètre du noyau en utilisant `rootflags=subvol=/path/to/subvolume` et modifier votre `/etc/fstab` pour pointer vers le même sous-volume en utilisant `subvol=`.

Alternativement, le sous-volume peut être spécifié avec son id récupérable avec par ex: `btrfs /root/path` et `rootflags=subvolid=objectid` comme paramètre du noyau respectivement `subvolid=objectid` comme option de montage dans `/etc/fstab`.

Si vous utilisez GRUB, vous pouvez automatiquement remplir votre menu de démarrage avec des snapshots btrfs lors de la régénération du fichier de configuration à l'aide de grub-btrfs ou grub-btrfs-gitAUR.

### Utiliser les sous-volumes Btrfs avec systemd-nspawn

Voir Systemd-nspawn#Use Btrfs subvolume as container root et Systemd-nspawn#Use temporary Btrfs snapshot of container.

## Résolution des problèmes

Voir la FAQ sur les problèmes de Btrfs pour le dépannage général.

### GRUB

#### Décalage de la partition

Le problème de décalage peut se produire lorsque vous essayez d'intégrer `core.img` dans un disque partitionné. Cela signifie qu'il est correct d'intégrer grub's `core.img` dans un pool Btrfs sur un disque sans partition (par ex: `/dev/sdX`) directement.

GRUB peut démarrer des partitions Btrfs, mais le module peut être plus grand que d'autres systèmes de fichiers. Et le fichier `core.img` créé par `grub-install` peut ne pas correspondre aux 63 premiers secteurs (31.5KiB) du disque entre le MBR et la première partition. Les outils de partitionnement à jour tels que `fdisk` et `gdisk` évitent ce problème en compensant la première partition par environ 1MiB ou 2MiB.

#### Racine manquante

Utilisateurs connaissant la situation suivante: `error no such device: root` lors du démarrage à partir d'une configuration de style RAID, éditez `/usr/share/grub/grub-mkconfig_lib` puis éditez `/usr/share/grub/grub-mkconfig_lib` et supprimez les deux guillemets de la ligne: `echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"`.

Régénérer la configuration pour grub et le système devrait démarrer sans erreur.

#### BTRFS: open_ctree a échoué

Depuis novembre 2014, il semble y avoir un bug dans systemd ou mkinitcpio causant l'erreur suivante sur les systèmes avec le système de fichiers Btrfs multi-périphériques utilisant le `hook` btrfs dans `mkinitcpio.conf`:

    BTRFS: open_ctree failed
    mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helicper program, or other error
    In some cases useful info is found in syslog - try dmesg|tail or so.
    You are now being dropped into an emergency shell.

Une solution de contournement consiste à supprimer `btrfs` du tableau `HOOKS` dans `/etc/mkinitcpio.conf` et à ajouter des `btrfs` dans le tableau `MODULES`. Régénérez ensuite les initramfs avec `mkinitcpio -p linux` (régler le Preset si nécessaire) et redémarrez.

Vous obtiendrez la même erreur si vous essayez de monter un raid array sans l'un des périphériques. Dans ce cas, vous devez ajouter l'option de montage `degraded` dans `/etc/fstab`. Si votre racine réside sur le tableau, vous devez également ajouter `rootflags=degraded` aux paramètres de votre noyau.

Depuis d'août 2016, une solution de contournement potentielle pour ce bug est de monter le tableau par un seul lecteur uniquement dans `/etc/fstab`, et de permettre à `btrfs` de découvrir et ajouter les autres lecteurs automatiquement. Les identificateurs de groupe tels que UUID et LABEL semblent contribuer à l'échec.

Par exemple, un tableau RAID1 composé de 'disk1' et 'disk2' aura un UUID qui lui sera alloué, mais au lieu d'utiliser l'UUID, utiliser uniquement `/dev/mapper/disk1` dans `/etc/fstab`. Pour une explication plus détaillée, voir le billet suivant.

Une autre solution possible est de supprimer le hook `udev` dans mkinitcpio.conf et de le remplacer par le hook `systemd`. Dans ce cas, les btrfs ne doivent pas être dans les tableaux HOOKS ou MODULES.

Voir le fil de discussion du forum d'origine et FS#42884 pour plus d'informations.

### btrfs check

Attention: Puisque Btrfs est en cours de développement, en particulier la commande `btrfs check`, il est fortement recommandé de créer une sauvegarde et de consulter la documentation Btrfs suivante avant d'exécuter `btrfs check` avec le commutateur `--repair`.

La commande de contrôle btrfs check peut être utilisée pour vérifier ou réparer un système de fichiers Btrfs non monté. Cependant, cet outil de réparation est encore immature et ne peut pas réparer certaines erreurs du système de fichiers même celles qui ne rendent pas le système de fichiers non montable.

Voir Btrfsck pour plus d'information.

## Voir aussi

- Site officiel
  - Btrfs wiki
- Rapport de performance
  - Btrfs sur disques bruts?
  - Btrfs est-il optimisé pour les SSD?
  - Comparaison des options de montage Phoronix
  - Linux 4.9
  - Linux 3.14
  - Linux 3.11
  - Linux 3.9
  - Linux 3.7
  - Linux 3.2
- Lzo vs. zLib
- Divers
  - Funtoo Wiki Btrfs Fun
  - Avi Miller presenting Btrfs at SCALE 10x, January 2012.
  - Summary of Chris Mason's talk from LFCS 2012
  - Btrfs: stop providing a bmap operation to avoid swapfile corruptions 2009-01-21
  - Doing Fast Incremental Backups With Btrfs Send and Receive

Category:

- File systems (Français)

Hidden categories:

- Pages or sections flagged with Template:Translateme (Français)
- Pages with broken section links