====== BTRFS ====== * Objet : Le système de fichiers BTRFS * Niveau requis : {{tag>avisé}} * Commentaires : //Les principes et commandes principales pour utiliser le BTRFS, les snapshots, les sauvegardes...// * [[:doc:systeme:sauvegarde|Les sauvegardes]] ; [[:doc:systeme:partition|Le partitionnement]] ; [[:doc:systeme:fstab|Le montage des partitions]]:-) * Suivi : {{tag>à-tester}} * Création par [[user>louispolaire]] le 12/03/2014 * Testé par .... le .... * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=8616 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) Ce Tuto est divisé en trois parties * Cette première partie présente les principes du Btrfs et les commandes de base. À la fin de ce tuto vous serez capable de comprendre la terminologie de Btrfs, de créer un volume et de gérer les subvolumes et snapshots. * [[:doc:systeme:btrfs-root-install-subvol|La deuxième partie présente l'installation de Debian dans un subvolume]]. À la fin de ce tuto vous serez capable d'installer Debian dans un subvolume et de modifier Grub pour y booter. * [[:doc:systeme:btrfs-sauvegarde|La troisième partie présente différentes méthodes pour réaliser des sauvegardes des subvolumes]]. A la fin de cette partie vous aurez des pistes pour élaborer une stratégie de backup de vos données sur Btrfs. ===== Principes de base ===== Btrfs est un système de fichiers pour Linux qui a pour but d'implémenter des fonctionnalités avancées tout en se focalisant sur la résistance aux pannes, les réparations et une administration simple. Sans entrer dans des détails techniques, voici quelques spécificités de BTRFS comparé aux systèmes de fichiers classiques ext3 et ext4. === Sous volumes - Subvolumes === Au sein d'un système de fichiers BTRFS,un "sous volume" (subvolume) est représenté comme un dossier classique. Il présente cependant les avantages suivants : * C'est un sous-système de fichiers, il peut donc être monté, par exemple via la commande mount ou dans /etc/fstab. * Il permet l'utilisation des snapshots. === Instantanés - Snapshots === Un instantané (snapshot) est un subvolume qui a été créé comme une "photographie" d'un autre subvolume à un moment donné. L'avantage d'un snapshot est que même si les données sont disponible deux fois sur le système de fichiers, les données ne sont pas dédoublées sur le disque. Seules les modifications faites au subvolume original ou au snapshot seront écrites sur le disque. Ainsi au moment de la création d'un snapshot, la taille sur le disque du snapshot est quasi-nulle. Ce n'est qu'au fil des modifications que sa taille sur le disque va augmenter puisque Btrfs va écrire les modifications sur le disque. Ceci est par exemple très utile pour créer des branches d'un système ou pour les sauvegardes. === RAID logiciel 0,1 & 10 === Btrfs gère le RAID en logiciel, c-a-d la réplication des données sur plusieurs disques. Pour la théorie voir ici : https://fr.wikipedia.org/wiki/RAID_%28informatique%29 Pour l'instant Btrfs gère bien 3 types de RAID: * RAID-0 : {{/file-R0ab608c6eef8e74f926f9c1e89753a99.png?150}} Une forme de RAID qui ne permet pas de réparer les erreurs, mais qui répartit une seule copie des données sur plusieurs volumes. Il y a un gain de performance (2X) en lecture et en écriture si les deux volumes sont sur des disques distincts. * RAID-1 : {{/file-R595a2d853196c5b38ceee5d98032baeb.png?150}} Une forme de RAID qui stocke 2 copies complètes sur chacun des disques. Btrfs nécessite au minimum deux partitions pour utiliser le RAID-1. Les métadonnées sont en RAID-1 par défaut dans le cas d'un seul disque. On peut donc utiliser le RAID-1 avec Btrfs sur un seul disque. Il suffit d'y avoir 2 partitions (/dev/sda1 et /dev/sda2) et Btrfs répliquera les données entre ces deux partitions. Évidemment en cas de panne du disque ce type de RAID-1 ne sert à rien. Il faut utiliser 2 disques pour être protégé contre ce type de pannes. * RAID-10 : {{/file-R50e12f7892e267e5d020f7fd98009870.png?250}} Une forme de RAID qui stocke 2 copies complètes des données et répartit également chaque copie sur plusieurs volumes d'où un gain de performance. Il faut au minimum 4 volumes pour pouvoir utiliser le RAID-10. * RAID-5 et RAID-6 ne sont pas encore totalement implémentés dans Btrfs. === Opérations à chaud === La plupart des opérations se font à chaud : le redimensionnement du système de fichiers, l'ajout d'un disque, le changement de type de redondance (RAID), l'équilibrage des données et métadonnées sur les différents disques (balance), la vérification et correction du système de fichiers, la défragmentation, la compression... Ceci est très pratique car en se dédouanant de la limitation des tables de partitions classiques, on évite les manipulations risquées et longues des redimensionnement de partitions. === Limites === Btrfs a cependant certaines limites : * Il n'a pas de fonction de cryptage des données. Il est cependant possible de crée un volume Btrfs dans un partition créée avec dm-crypt. * Il gère pas les fichier de swap. il est cependant possible de contourner le problème au prix de la performance ((https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F)) * Les snapshots ne sont pas récursifs. C'est à dire que si on réalise un snapshot d'un subvolume comportant des subvolumes-enfants, dans le snapshot les subvolumes-enfants apparaîtrons comme des dossiers vides. Ce tuto présente des commandes qui, mal utilisées peuvent mener à la perte de vos données. \\ Sauvegardez vos données !! Btrfs est en cours de développement. Bien que le format du système de fichier soit considéré comme stable par les développeurs ((https://btrfs.wiki.kernel.org/index.php/Main_Page#Stability_status)), les outils qui permettent de le manipuler sont eux en développement.\\ Il est donc **important d'utiliser un kernel __à jour__ (>= 3.12)** et **la version la plus à jour de Btrfs-tools ( 3.12-1 à ce jour)** ===== Installation ===== Btrfs est inclus dans le kernel de base, Cependant il est vivement recommandé d'utiliser un kernel le plus à jour possible (et >= 3.12) Les outils de gestion doivent être installés. apt-get install btrfs-tools ===== Commandes de Base ===== ==== Création d'un nouveau système de fichiers ==== Pour formater la partition /dev/sdX1 taper : mkfs.btrfs -L label /dev/sdX1 Il peut être utile d'ajouter l'option -f si la partition n'est pas vide. === Le partitionnement === Btrfs peut occuper tout un disque et remplacer la table de partition. Les subvolumes peuvent être utilisés pour remplacer les partitions. Il y a cependant des limites à cette utilisation : * Il n'est pas possible d'utiliser d'autres systèmes de fichiers sur différents points de montage. * Il n'est pas possible d'utiliser de swap sur ce disque. * Il n'est pas possible de booter sur ce disque en UEFI. Pour effacer la table des partitions et utiliser tout le disque /dev/sdX comme un volume Btrfs : mkfs.btrfs /dev/sdX ==== Convertir un système ext3 / ext4 ==== Il est possible de convertir un système ext3 ou ext4 en Btrfs. Si on a une partition /dev/sdX1 en ext4 umount /dev/sdX1 fsck.ext3 -f /dev/sdX1 btrfs-convert /dev/sdX1 mount /dev/sdX1 /point-de-montage Remontez manuellement la partition et vérifiez que tous les fichiers sont là. Si la partition se chargeait via /etc/fstab modifiez le [[#en-utilisant-etc-fstab|(cf Section sur fstab)]]. À la racine de la partition /dev/sdX1 vous trouverez un subvolume "ext2_saved" qui comporte une image de l'ancien système de fichiers. Si tout va bien et que vous avez tous vos fichiers on supprime cette image et le subvolume qui la contient : rm /point-de-montage/ext2_saved/* btrfs subvolume delete /ext2_saved btrfs balance start /point-de-montage Si tout ne va pas bien, qu'il y a eu un problème ou que vous avez les jetons :-P : umount /dev/sdX1 btrfs-convert -r /dev/SdX1 ==== Options de montage ==== En des différentes options disponibles lors de la création du système de fichiers, le nombreuses options de montage pour Btrfs peuvent drastiquement changer ses performances. ^Option de montage propres à Btrfs^Rôle ^ |autodefrag|Autorise la défragmentation en arrière plan| |compress=zlib|La compression la plus importante. Par défaut| |compress=lzo|La compression la plus rapide| |compress=no|Pas de compression| |degraded|Utilisé dans le cas des RAID. Permet de monter le volume même si certains disques sont manquants| |discard |Utilise le TRIM pour les disques SSD| |recovery|Lance la réparation automatique après le montage. A utilise si le volume ne veut plus se monter. un fois monté réaliser un scrub pour réparer les erreurs. (Ne fonctionne qu'avec les volumes crées avec la version 3.2 ou +)| |ssd|Utilise l'optimisation pour disques SSD de Btrfs. C'est utilisé par défaut si votre système reconnaît le SSD. Cette option ne lance pas le TRIM !| |subvol=///chemin/vers/subvolume//|Permet de monter un subvolume| |subvolid=//id//|Permet de monter un subvolume par son id. La racine a un id=0| === Pour un SSD === Par exemple mount /dev/sdX1 -o rw,noatime,ssd,discard,autodefrag,compress=lzo,space_cache,inode_cache /mnt Les options les plus importantes pour un ssd sont "ssd" et "discard". === Pour un HDD === Par exemple mount /dev/sdX1 -o rw,noatime,compress=zlib,autodefrag === En utilisant /etc/fstab === Je vous conseille d'utiliser les UUID. Si vous utilisez plusieurs disques pour le même volume peu importe lequel vous montez. Les options dump et pass dans les deux derniers champs doivent être égal à 0. Exemple de ligne dans /etc/fstab : UUID=a69d9182-f4c7-4276-b35d-7d5f9bd50a57 /mnt Btrfs rw,noatime,ssd,discard,autodefrag 0 0 ==== Outils d'audit ==== Pour voir l'espace utilisé dans le volume Btrfs monté dans /mnt : btrfs filesystem df /mnt Data, single: total=27.00GiB, used=24.28GiB System, DUP: total=32.00MiB, used=4.00KiB Metadata, DUP: total=2.50GiB, used=1.70GiB il y a 3 lignes : Data correspond aux données, System aux fichiers système du volume et Metadata aux métadonnées associées aux différents fichiers (sommes de contrôles etc...) la somme des used= correspond à l'espace utilisé sur le disque. Vous noterez la différence avec la commande df -h. Pour avoir des informations sur le disque, l'UUID du volume etc : btrfs filesystem show /mnt Label: none uuid: a69d9182-f4c7-4276-b35d-7d5f9bd50a57 Total devices 1 FS bytes used 25.98GiB devid 1 size 115.43GiB used 32.06GiB path /dev/sdb6 Btrfs v3.12 Dans le cas d'un volume en RAID (ici RAID 10) on peut voir la répartition des données sur les différents disques : Label: stockage uuid: ca7fc4a0-3bf6-4d86-b4b9-3ef025af5d31 Total devices 4 FS bytes used 350.62GiB devid 1 size 931.51GiB used 182.04GiB path /dev/sdd devid 2 size 931.51GiB used 182.03GiB path /dev/sda devid 3 size 931.51GiB used 182.03GiB path /dev/sdb devid 4 size 931.51GiB used 182.03GiB path /dev/sdc Btrfs v3.12 On peut aussi voir si le disque a fait des erreurs btrfs device stats /dev/sdX [/dev/sdX].write_io_errs 0 [/dev/sdX].read_io_errs 0 [/dev/sdX].flush_io_errs 0 [/dev/sdX].corruption_errs 0 [/dev/sdX].generation_errs 0 Ici tout va bien. ===== Les Subvolumes ===== Pour créer un subvolume : btrfs subvolume create NOM Un subvolume apparaît dans votre gestionnaire de fichiers comme un dossier. Vous pouvez le manipuler comme tel. Par contre la suppression devra se faire avec **btrfs subvolume delete SNAP**. Pour avoir la liste des subvolumes dans le volume Btrfs : btrfs subvolume list /mnt Pour supprimer un subvolume : btrfs subvolume delete NOM ==== Monter un subvolume ==== Pour monter un subvolume présent dans /dev/sdX : mount /dev/sdX -o ..options..,subvol=NOM /point-de-montage Dans /etc/fstab il suffit de rajouter également l'option de montage **subvol=//chemin vers le subvolume//**. Par exemple si on a un subvolume "SUB" dans un dossier "DOS" a la racine du volume Btrfs on rajoutera subvol=DOS/SUB aux options de montage. ==== Snapshots ==== Pour réaliser un snapshot du subvolume NOM : btrfs subvolume snapshot NOM SNAP Il est possible de réaliser des snapshots en lecture seule avec l'option **-r**. Un snapshot est un subvolume comme un autre, c'est juste sa méthode de création qui change. En tant que subvolume vous pouvez le manipuler comme un dossier, avec cd, ls, mv etc... La suppression devra se faire avec **btrfs subvolume delete SNAP**. Par exemple si vous voulez remplacer le subvolume NOM par le subvolume(ex-snapshot) SNAP ls /point-de-montage NOM SNAP cd /point-de-montage mv NOM NOM_old mv SNAP NOM ls /point-de-montage/ NOM NOM_old Et on peut faire un snapshot de snapshot... btrfs subvolume snapshot NOM NOM_snap btrfs subvolume snapshot NOM_snap NOM_snap_snap ls /point-de-montage NOM NOM_old NOM_snap NOM_snap_snap Et pendant ce temps là si aucune modification n'est faire dans les subvolumes/snapshots... L'espace libre sur le disque reste le même. ===== La compression ===== Btrfs peut compresser le système de fichiers ce qui veut dire que tous les fichiers dans le volume sont compressés. Il y a dont une réduction de la taille des fichiers sur le disque mais aussi un gain de performances, spécialement dans le cas de la compression lzo. Pour autoriser la compression sur un volume on ajoute l'option de montage **compress=lzo** ou **compress=zlib** Pour compresser un volume non compressé ou changer le type de compression (à chaud bien sur !): btrfs filesystem defragment -r -v -clzo /point-de-montage ===== Maintenance ===== ==== Scrub ==== Scrub permet de vérifier à chaud le système de fichiers. Les données et métadonnées sont lues et les sommes de contrôle sont vérifiées, les données corrompues sont identifiées et réparées. btrfs scrub start /point-de-montage On peut changer la commande **start** avec **cancel** pour stopper la vérif, **pause**, et **status** pour voir l'état d'une vérif en cours. ==== Balance ==== Balance ré-alloue les données dans le système de fichier. C'est particulièrement utile lorsqu'on a un système de fichiers en RAID et qu'un disque est ajouté ou retiré. Les copies manquantes sont ainsi régénérées. btrfs balance start /point-de-montage Idem que pour scrub pour les commandes **start**, **cancel** et **status**. ===== RAID 0 1 et 10 ===== Si on dispose de plusieurs disques il est possible d'activer la redondance logicielle des données. Si vous voulez plus d'information sur le RAID : https://fr.wikipedia.org/wiki/RAID_%28informatique%29 Par exemple si on a deux disques /dev/sda et /dev/sdb On crée un système de fichier sur ces deux disques : mkfs.btrfs /dev/sda /dev/sdb On monte le volume : mount /dev/sda /mnt Si on décide d'augmenter la taille de ce volume (à chaud) en ajoutant un disque /dev/sdc : btrfs device add /dev/sdc puis on ré-alloue les données en utilisant les 3 disques. btrfs balance start /mnt Par défaut Btrfs utilise RAID0, pour passer en RAID1 : btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt Il est aussi possible de supprimer des disques si nécessaire. ===== Références ==== * [[https://btrfs.wiki.kernel.org|Le wiki de Btrfs]] * [[https://wiki.archlinux.org/index.php/Btrfs|La page sur Btrfs sur le wiki d'Archlinux]]