Btrfs

De ArchwikiFR


De Wikipedia:fr:Btrfs:

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 le support de Btrfs. Si vous voulez démarrer à partir d'un système de fichiers Btrfs, vérifiez si votre chargeur de démarrage 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 #Ext3/4 Conversion 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 de démarrage 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#Common 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 Wikipedia:fr: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, le drapeau '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 le drapeau '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 drapeau --reflink.

Compression

Btrfs supporte 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:

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 drapeaux subvol=/path/to/subvolumeou 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 #Snapshots.

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 de démarrage 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 supportant la commande TRIM.

Pour plus d'informations sur l'activation et l'utilisation de TRIM, voir Solid State Drives#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.

Defragmentation

Btrfs supporte 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 drapeau -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, bedup 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 jdupes. 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 support de cryptage intégré, mais cela pourrait venir dans le futur. Les utilisateurs peuvent chiffrer la partition avant d’exécuter mkfs.btrfs. Voir dm-crypt/Encrypter un système entier #Btrfs sous-volumes avec 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.

Swap

Btrfs ne supporte pas encore les fichiers d'échange (swap files). Ceci est dû au fait que les fichiers swap nécessitent une fonction que Btrfs ne possède pas intentionnellement pour éviter la possibilité que des fichiers soient corrompus [5]. Les correctifs pour la prise en charge des fichiers swap sont déjà disponibles [6] et peuvent être inclus dans une prochaine version du noyau. Comme alternative, un fichier swap peut être monté sur un périphérique en boucle avec des performances plus faibles mais ne pourra pas hiberner. Installez le paquet systemd-swap pour automatiser cela.

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 peux pas utiliser de swap car Btrfs ne supporte pas les fichier d'échange et il n’ y a pas d’endroit pour créer une partition d'échange. Cela limite également l’utilisation de l’hibernation/reprise, qui a besoin du swap pour stocker l’image d’hibernation.
  • 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 de démarrage 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/Conseils et astuces#Installer sur une partition ou un disque sans partition.

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

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. Notamment TLP#Btrfs nécessite une attention particulière pour éviter la corruption du système de fichiers, mais d'autres applications peuvent également bénéficier de certaines fonctionnalités.

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

Utiliser les sous-volumes Btrfs avec systemd-nspawn

Voir Systemd-nspawn#Utiliser le sous-volume Btrfs comme racine du conteneur et Systemd-nspawn#Utiliser l'instantané temporaire Btrfs du conteneur.

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 helper 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 Btfrs 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