Btrfs
| Btrfs | |
| Développeur | Oracle Corporation (initialement) |
|---|---|
| Nom anglais | Btrfs |
| Introduction | Stable: Noyau Linux 3.10, 29 juillet 2013 Unstable: Linux kernel 2.6.29, Mars 2009 (Linux) |
| Structure | |
| Contenu des répertoires | Arbre B |
| Allocation de fichiers | extent |
| Limitations | |
| Taille maximale de fichier | 16 Eio |
| Nombre maximal de fichiers | 264 |
| Taille maximale du nom de fichiers | 255 octets |
| Taille maximale de volume | 16 Eio |
| Caractères autorisés dans les noms de fichiers | Tous excepté NUL('0円') et '/' |
| Fonctionnalités | |
| Dates enregistrées | modification (mtime), modification des attributs(ctime), accès (atime) |
| Attributs | POSIX, Attributs étendus |
| Permissions | POSIX, ACL |
| Compression intégrée | Oui (zlib, LZO [1] et (depuis le noyau 4.14) Zstd) |
| Chiffrement intégré | Planifié |
| modifier | |
Btrfs (B-tree file system, prononcé ButterFS[2] ,[3] ) est un système de fichiers des années 2010 fondé sur le Copy-On-Write (copie sur écriture en français) sous licence GNU GPL, développé conjointement par Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO AG (en) et autres[4] . En 2012, alors qu'il n'était pas encore considéré comme tout à fait stable[5] , un effort intense de développement et de test est fourni par la communauté[6] afin de faire de Btrfs le successeur de ext4 et ext3, systèmes de fichiers habituels des distributions Linux[7] . OpenSuse 13.2 propose dès son lancement Btrfs par défaut pour la partition racine afin d'assurer la sécurité et laisse le choix entre ext4 et XFS (plus rapide) pour /home.
Btrfs offre les fonctionnalités suivantes absentes d'autres systèmes de fichiers :
- instantané (snapshots) ;
- somme de contrôle [8] .
Ces caractéristiques sont importantes pour les systèmes Linux, serveurs comme postes clients, car les tailles de stockage comme les configurations tendent à augmenter et à se complexifier[9] .
La technique de l'instantané, en particulier, garantit de pouvoir faire une sauvegarde cohérente des fichiers du système tels qu'ils étaient au moment précis de l'instantané, même si la sauvegarde dure plusieurs heures et que de nombreux fichiers sont modifiés entre-temps.
Histoire
[modifier | modifier le code ]La structure de données de Btrfs (copy-on-write avec un Arbre B [10] ) a été proposée par un chercheur d'IBM, Ohad Rodeh, lors d'une conférence USENIX en 2007[11] . Chris Mason, ancien ingénieur de SUSE [12] , rejoint Oracle fin 2007 et commence à travailler sur la conception de Btrfs basé sur la structure de données en Arbre B [13] . La possibilité de sauvegarder les serveurs sans interrompre leurs opérations est en effet très demandée.
Red Hat a retiré la prise en charge du Btrfs depuis la version 7.4 de la RHEL [14] , sortie le . La distribution Linux CentOS 8.0 ne dispose plus d'aucun paquet dans ses dépôts permettant de prendre en charge les systèmes de fichiers Btrfs.
Fonctionnalités
[modifier | modifier le code ]Extent
[modifier | modifier le code ]Btrfs, comme Ext4, est basé sur la notion d'extent. C'est une zone contiguë (pouvant atteindre plusieurs centaines de Mo, à la différence des clusters de quelques Ko plus anciens) réservée chaque fois qu'un fichier est enregistré sur le disque dur. Ainsi, en cas d'écriture en fin de fichier (append) ou de réécriture complète de celui-ci, les nouvelles données vont souvent directement dans l'extent existant plutôt que dans une autre zone du disque dur. Cette utilisation de l'extent diminue la fragmentation, et donc augmente les performances sur un disque dur classique (mais n'apporte pas de gain sur un SSD). Cette efficacité en temps se paie d'une plus grande occupation d'espace disque, dont le coût a diminué de plusieurs ordres de grandeur[15] . Btrfs stocke par ailleurs les données des très petits fichiers directement dans l'extent du fichier répertoire, et non dans un extent séparé.
Sous-volumes et instantanés (snapshots)
[modifier | modifier le code ]Btrfs gère une notion de « sous-volumes » sous forme d'arbre séparé (y compris la racine) de répertoires et des fichiers, permettant diverses arborescences simultanément, les rendant plus indépendantes du système principal. Les données sont ainsi mieux séparées et on peut imposer différents quotas par sous-volumes. L'avantage principal est la possibilité d'instantanés (nommés également snapshots). Un instantané permet de « prendre une photographie » à un instant donné d'un système de fichiers pour le sauvegarder dans cet état cohérent tout en continuant à travailler. Cet instantané est un sous-volume, modifiable après coup. Cette modification en écriture possible en plein cours de sauvegarde (d'un état juste antérieur) permet la haute disponibilité des bases de données en ligne.
Copy-on-write
[modifier | modifier le code ]Pour exploiter ces sous-volumes et ces instantanés, Btrfs utilise la technique classique du « copy-on-write ». Si des données sont à écrire sur un bloc mémoire, alors celui-ci est copié à un autre endroit du système de fichiers de façon à ne pas altérer l'original, et les nouvelles données seront par la suite enregistrées sur la copie. Ensuite les méta-données pointant sur le bloc sont modifiées automatiquement afin de prendre en compte les nouvelles données. Ce mécanisme transactionnel diffère de la journalisation présente dans ext3 qui mémorise juste ce qui existait avant écriture et le conservait jusqu'à confirmation que celle-ci s'étaient bien passée. Prendre un instantané du système permettrait, en cas de problème, de revenir aussitôt à l'instantané, sans avoir à rejouer le fichier des en-cours au moment de la défaillance. Outre les questions de performances (Btrfs n'a pas les performances de XFS), cela ouvre des interrogations : quand prendre un instantané pour quels volumes de données ? Le nom d'« instantané », emprunté au monde de la photographie, est trompeur dans la mesure où si l'état figé est bien celui d'un instant, l'opération prend tout de même typiquement quelques dizaines de millisecondes, même s'il est sans rapport avec les dizaines de minutes d'une sauvegarde. L'utilisation des instantanés pour cet usage n'est d'ailleurs pas un point mis en avant par les développeurs.
Elle est en revanche capitale pour les synchronisations, les archivages et les sauvegardes, garantissant que tout le système de fichiers choisi sera synchronisé, archivé ou sauvegardé sera dans un état cohérent avec ce qu'il était au début de l'opération, même si l'on continue à travailler dessus et que l'opération de sauvegarde prend plusieurs heures. Cette possibilité permet des sauvegardes cohérentes, sous condition que l'équipe informatique la mette en œuvre.
Protection des données
[modifier | modifier le code ]Btrfs possède ses techniques propres de protection des données : l'utilisation de références arrière (back references - c'est-à-dire savoir, à partir d'un bloc de données, quelles méta-données pointent vers le bloc) permet d'identifier des corruptions du système. Si un fichier prétend appartenir à un ensemble de blocs et que ces blocs prétendent de leur côté relever d'un autre fichier, cela indique que la cohérence du système est altérée. Btrfs effectue de plus des sommes de contrôle sur toutes les données et sur les méta-données stockées afin de pouvoir détecter toutes sortes de corruptions à chaud, en réparer quelques-unes, et ainsi proposer un meilleur niveau de fiabilité.
Redimensionnement à chaud
[modifier | modifier le code ]Il permet de redimensionner à chaud la taille du système de fichiers (y compris en le rétrécissant) tout en conservant une excellente protection des méta-données qui sont dupliquées en plusieurs endroits par sécurité. L'opération est simple : btrfs filesystem resize +2g /mnt ajoute 2 Gio à son système de fichiers. Cette fonction ne se veut pas redondante avec ce que propose le gestionnaire de volume logique de Linux mais prétend le compléter techniquement.
Vérification du système de fichiers très rapide
[modifier | modifier le code ]La vérification du système de fichiers par l'intermédiaire du programme btrfsck est tolérante aux erreurs et présentée comme extrêmement rapide par sa conception. L'utilisation des arbres B permet d'explorer la structure du disque à une vitesse essentiellement limitée par la vitesse de lecture du disque. Le revers de la médaille est une forte empreinte mémoire puisque btrfsck utilise trois fois plus de mémoire que e2fsck.
Multi-disques & volumes logique
[modifier | modifier le code ]Btrfs permet la gestion de volumes logiques [16] , c'est-à-dire de faire l'agrégation de plusieurs périphériques de stockage (voir RAID). Les sous-volumes peuvent être montés comme des partitions (-osubvol=...). Plusieurs volumes sur un système BtrFS peuvent être utilisés de manière équivalente à des volumes logiques lvm mais sans choisir le type de système de fichier.
Btrfs respecte la hiérarchie des « couches » fonctionnelles de Linux. Par exemple, bien que proposant des fonctions le complétant, il essaye autant que possible de ne pas réécrire tout le système de gestion des volumes proposé en standard par LVM.
RAID
[modifier | modifier le code ]Btrfs[16] permet la mise en œuvre de plusieurs fonctionnalités RAID.
Chaque profil peut être appliqué aux métadonnées (nom de fichier, dossiers, propriétaire) ou données séparément[17] . Le système de fichier propose les profils suivants
- simple : aucune redondance
- duplication : copie des données dans une même partition mais physiquement espacé sur le support.
- RAID0 : les données sont éparpillées sur plusieurs disques sans redondance.
- RAID1, RAID1C3, RAID1C4 : les données sont recopiées en miroir sur 2 ou 3 ou 4 supports.
- RAID10 : combinaison de RAID1 et RAID0 avec au moins 4 disques.
- RAID5 et RAID6 : des algorithmes mathématiques permettent la répartition des données sur plusieurs disques avec un surcoût et une protection équivalente à 1 ou 2 disques abimés.
Compression des données
[modifier | modifier le code ]Btrfs permet la compression des données stockées. Elle peut être activée au moment du montage, tout en choisissant le type de compression parmi Zstd, Zlib et LZO.
D'autres algorithmes de compression ont été ou sont envisagés :
- Snappy de Google en . Il permet avec les processeurs de cette décennie d’accélérer les accès aux données, de l’ordre de 10 % par rapport à des données compressées en LZO et de 15 % par rapport à des données non compressées. Cela n'aurait pas été vrai avec des processeurs plus lents, puisque les temps de compression/décompression auraient été plus importants que le temps gagné sur les accès au disque dur[18] . Son intégration a été par la suite abandonnée au profit de LZ4 [19] .
- LZ4 encore envisagé en améliore encore les performances par rapport à Snappy (de l'ordre de 20-30 %).
Protection des données
[modifier | modifier le code ]Btrfs permet la combinaison de plusieurs mécanismes : les sommes de contrôle, la redondance et les sous-volumes en lecture seule (ou instantanés).
Instantanés
[modifier | modifier le code ]Un sous-volume en lecture seule contient une copie complète des fichiers dont le seul coût supplémentaire provient de la modification future des fichiers d’origine. Seul un administrateur peut créer et supprimer les instantanés.
Soit /home/.snapshots le dossier de rangement des instantanés du volume /home et X le numéro ou la date. La commande btrfs subvolume snapshot -r /home /home/.snapshots/X/snapshot[20] permet de créer un instantané en lecture seule (-r) du dossier /home.
En créant des instantanés périodiquement, l’administrateur conserve une sauvegarde protégée contre les utilisateurs malveillants et les pirates avec un faible niveau d’accès. Si un utilisateur normal se fait pirater son compte et que l’attaquant tente de chiffrer toutes les données, la sauvegarde peut facilement être rétablie en créant un nouveau sous-volume (en lecture et écriture) à partir de la sauvegarde ou simplement en recopiant les fichiers.
Redondance
[modifier | modifier le code ]Dans un système avec plusieurs disques durs, BtrFS permet la création d’une unique partition avec RAID. Les données sont ainsi protégées contre le dysfonctionnement d’un ou plusieurs disques. Même si les disques continuent de tourner, les bits peuvent être physiquement corrompus par le temps, les chocs ou de hautes énergies. Le RAID ne protège pas contre la corruption discrète : en RAID1 (copie identique) comment savoir quelle copie est bonne ou mauvaise ?
Grâce aux sommes de contrôle sur chaque bloc mémoire, le système peut vérifier durant la lecture que les données sont authentiques. Si ce n’est pas le cas il est capable de reconstruire les données originales grâce à la redondance en utilisant les données non corrompues[21] . Les données corrigées sont réécrites sur le disque.
Entretien périodique
[modifier | modifier le code ]Ce mécanisme de restauration n’est appliqué qu’au moment de la lecture. Pour entretenir une archive rarement consultée il est possible de forcer la vérification et restauration des fichiers[22] avec la commande btrfs scrub start. La commande btrfs scrub status permet de vérifier le bon déroulement des opérations et la présence d’erreurs corrigées ou malheureusement incorrigibles.
Il est conseillé d’exécuter cette commande périodiquement selon la qualité du support et la valeur des données avant que la corruption ne soit irréversible. Cette opération est néanmoins très intense pour le système car il faut lire l’intégralité des disques et recalculer toutes les sommes de contrôle pour les comparer.
RAID
[modifier | modifier le code ]Les profils RAID5 et RAID6 sont déconseillés seulement pour les métadonnées[23] . Il est donc possible de créer un système d’au moins 3 disques avec les données en RAID5 (1 disque de parité) et les métadonnées en RAID1C3 (3 copies identiques réparties sur 3 disques différents). Cette disposition protège contre le dysfonctionnement total d’un disque.
L’ajout, la suppression ou le remplacement d’un disque défectueux peut être réalisé sur un système en fonctionnement[24] . En cas de remplacement d’un disque endommagé la protection des données peut être incomplète durant la resynchronisation des disques.
Assurer la sécurité et la cohérence des données entraîne certes un coût (disque supplémentaire de copie ou parité), qu'il faut comparer toutefois avec :
- D'une part celui d'en avoir plus (coût de la reprise d'activité en cas de catastrophe).
- D'autre part la baisse du coût du mégaoctet sur disque dur, divisé par 1 300 000 en 29 ans selon Seagate[25] .
Notes et références
[modifier | modifier le code ]- ↑ (en) btrfs.wiki.kernel.org
- ↑ (en) [vidéo] « Chunkfs: Fast file system check and repair », à 18 min 49 s : « It's called Butter FS or B-tree FS, but all the cool kids say Butter FS », Valerie Henson, Melbourne, Australia (consulté le )
- ↑ CRFS and POHMELFS [LWN.net]
- ↑ [1]
- ↑ (en) « FAQ - btrfs Wiki », sur kernel.org (consulté le ).
- ↑ (en) « News, Analysis and Opinion for Data Center - SearchDataCenter », sur techtarget.com (consulté le ).
- ↑ « Gmane Loom », sur gmane.org via Wikiwix (consulté le ).
- ↑ (en) « Using Btrfs with Multiple Devices - btrfs Wiki », sur kernel.org (consulté le ).
- ↑ (en) « Announcements - Linux Foundation », sur Linux Foundation (consulté le ).
- ↑ (en) « Btrfs design - btrfs Wiki », sur kernel.org (consulté le ).
- ↑ (en) « A short history of btrfs », sur lwn.net (consulté le ).
- ↑ connu alors pour son travail sur le système de fichiers ReiserFS
- ↑ « LKML : Chris Mason : [ANNOUNCE] Btrfs : a copy on write, snapshotting FS », sur lkml.org (consulté le ).
- ↑ (en) Red Hat, « Deprecated Functionality » (consulté le )
- ↑ D'un facteur de 1 300 000 en 29 ans, selon un communiqué de la société Seagate
- ↑ a et b (en) How I Got Started with the Btrfs File System for Oracle Linux
- ↑ (en) « BtrFS balance filters »
- ↑ (en) « Btrfs Picks Up Snappy Compression Support », sur Phoronix , (consulté le )
- ↑ « Compression - btrfs Wiki », sur btrfs.wiki.kernel.org (consulté le )
- ↑ (en) « btrfs-subvolume(8) »
- ↑ (en) « Auto-repair on read »
- ↑ (en) « BtrFs Scrub »
- ↑ (en) « RAID56 status and recommended practices » (consulté en )
- ↑ (en) « btrfs-device(8) »
- ↑ http://ns1758.ca/winch/cost-hard-drives-komorowski.jpg