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.
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
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.
-d single
au lieu de -d raid0 -m raid1
(métadonnées en miroir, données non réfléchies et non rayées).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.
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.
$ 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_oldVeillez à 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 /
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 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.
/
(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 /
.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.
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
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
.
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 /
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.
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."
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é [email protected]
pour le nettoyage mensuel du point de montage spécifié. Activez le timer avec un chemin de sortie, par ex: [email protected]
pour /
et [email protected]
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 [email protected]
(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.
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.
Swap
Btrfs prends en charge les fichiers d'échange après le noyau version 5.0 mais avec quelques limitations (cf.la note Swap (Français)#Fichier d'échange).
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
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.
Conversion Ext3/4 en Btrfs
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.
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
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
-
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