Présentation de BTRFS et comment migrer
Article publié le 9 Juin 2013
Mise à jour le 02 Décembre 2015
Présentation
BTRFS est un des dernier système de fichier révolutionnaire (développé principalement par Oracle et RedHAT) qui devrait remplacer à terme EXT4.
Il n’apporte pas réellement de gain en performance mais sa force réside dans ses fonctionnalités.(vous pourrez noter néanmoins un léger gain en performance à partir du Noyau 3.6)
J’ai été impressionné par les possibilités qu’offre BTRFS en terme d’administration:
– Création de SnapShot
– Meilleur gestion de l’intégrité des données ( Somme de controle)
– Compression en natif
– Sauvegarde incrémental intégrée au système de fichier
– Défragmentation à chaud
– Création de sous volumes
De plus le système de fichier BTRFS est optimisé pour la gestion des petits fichiers. En effet si vous avez un nombre très important de petits fichiers vous gagnerez en place et en performance par rapport à un système de fichier de type EXT3/EXT4
Création d’une nouvelle Partition
Pour formater une partition en btrfs, rien de plus simple.
mkfs.btrfs <votre fs>
Migration
Dans un premier temps il est nécessaire d’installer btrfs-tools sous Debian ou btrfs-progs sous Red-Hat. (comme à mon habitude et pour des raisons idéologique ;-), mes tests sont effectués sur une Debian tout en essayant de m’adapter au maximum pour les utilisateurs de RedHat/CentOS).
# apt-get install btrfs-tools (sous Debian) ou yum install btrfs-progs (Sous RedHAT)
– Convertissons un système de fichier EXT4 vers BTRFS
Pour cela démontez votre volume:
#umount <votre fs>
Utilisez la commande btrfs-convert pour convertir votre FS EXT4 en BTRFS:
#btrfs-convert <votre fs>
N’oubliez pas de modifier votre fstab en remplacant EXT4 par btrfs.
– Remontez votre fs avec un mount -a
Présentation des fonctionnalités
1) Création de sous volume
Cette fonctionnalité est absolument génial, elle vous facilitera la vie en terme d’administration!
Pour créer un sous volume:
# btrfs subvolume create <votre-nom-sous-volume>
Pour supprimer un sous volume:
#btrfs subvolume delete <votre-nom-sous-volume>
2) Les SnapShots
Créer un Snapshot:
Le système de snapshot est très abouti. Il vous permet de prendre « une image » de votre sous volume. En cas de problème (perte de fichier ou autre) vous pourrez recharger votre snapshot pour récupérer l’état de votre volume au moment ou le snapshot a été pris. (similaire aux snapshot de machine virtuel même si le fonctionnement est différent).
#btrfs subvolume snapshot <nom de votre sous volume> <nom de votre snapshot>
Cette commande créera un répertoire à la racine de votre FS. Ce répertoire correspondra à votre snapshot et contiendra toute votre arborescence avec son contenu.
Restaurer un Snapshot:
Rien de plus simple! Il suffit de faire un mv du répertoire de votre snapshot vers le le sous Volume à restaurer!
Autosnap:
Cette petite fonctionnalité vous permettra de faire des Snapshot automatiques, très utile pour sécuriser vos données.
#btrfs autosnap enable -m <fréquence de snapshots en minute> -c <Nombre de snapshots en rétention (roulement)> <votre sous volume>
Exemple:
#btrfs autosnap enable -m 30 -c 10 <votre sous volume> </btrfstest/toto>
Dans cette exemple un SnapShot sera effectué toutes les 30 minutes sur le sous volume « toto ». Un historique de 10 SnapShots sera conservé!
Vous pouvez même aller plus loin. Admettons que vous soyez rik rak niveau stockage vous pourrez faire en sorte que vos plus anciens SnapShot soientt supprimés au bout d’un certain seuil d’occupation d’espace disque
#btrfs au fslimit -n <% d’espace disque occupé> <Votre sous volume>
En conclusion le système de Snapshot est extrêmement performant et présente un très bon complément avec vos sauvegardes journalières.
(Dans le cas typique où vous créez un fichier dans la journée et que vous le supprimez par erreur avant la sauvegarde)
3) La compression
Btrfs prend nativement en charge la compression
Pour cela deux étapes sont nécessaires
– On modifie le fstab en conséquence:
Exemple:
<votre fs> <point de montage> btrfs defaults,compress 0 1
-on compresse soit avec lzib (Meilleur compression mais plus gourmand en CPU) ou lzo (Plus économe en ressource mais moins bonne compression):
compress=<algo de compression>