Table des matières
btrfs-convert : retour d'expérience
“Btrfs
” est un système de fichiers relativement récent, qui répond a ce que je recherche depuis un certain temps, notamment pour ses capacités à faire des “snapshot
”.
“btrfs-convert
” est un utilitaire qui permet de convertir des systèmes de fichiers Ext2/3/4 existants en Btrfs.
Voila mon retour d'expérience: N'utilisez pas cet utilitaire
Pour être complet, je tiens a préciser que je n'ai utilisé que la version qui vient avec “Debian Jessie
”.
(Il est possible d'installer une version plus récente qu'on trouvera dans les “backports
”.)
Comme souvent, je rédige ce post au fur et a mesure de mes découvertes: il ne s'agit pas d'un cours et les erreurs ne sont pas exclus.
~~READMORE~~
Installation de btrfs
Si nécessaire, il faut installer la suite logiciels de base:
# aptitude install btrfs-tools
Ext2,3,4 conversion
La possibilité de convertir un système de fichiers Ext2/3/4 existant en BTRFS est très intéressante…
Avec ''btrfs-convert'' : Mise en garde et conseil
Attention
Ayez des backups avant de procéder a une conversion |
La commande pour effectuer la conversion s'appelle “btrfs-convert
” et elle a plusieurs défauts , ainsi que quelques bugs… (pas trop grave a priori…)
Les défauts:
- Aucune verbosité: on ne voit pas la progression de la conversion.
- C'est long: lorsqu'il y a des millions de fichiers, compter plusieurs JOURS de conversion.
Bug que j'ai vu:
- Ca fait souvent sauter les ACLs de la racine de la partition. Utiliser “
getfacl
” pour faire une copie. - “
btrfs check …
” pourrait vous signaler des erreurs que vous ne pourrez corriger.
Ces divers petits défauts et bugs m'ont fait renoncer a mettre en production des systèmes de fichiers convertit avec “btrfs-convert ”: Donc finalement, je ne sais pas si c'est grave, ou très grave |
Conseils
S'il s'agit de convertir des partitions LVM, alors vous pouvez gagner en sécurité et en disponibilité en procédant comme suit:
- Avant conversion, faites un
snapshot
de la partition: a 10% de la taille de la source, c'est suffisant. - Monter le snapshot en lecture seule.
En montant le snapshot
en lecture seule, vous permettez quand même l'accès a la partition, malgré l'interruption de service du à la conversion.
Rappelez-vous: La durée de la conversion est indéterminée.
au plus simple
Pour faire vite, on fera:
# umount <mountpoint> # btrfs-convert <device>
(ça peut être long en fonction du nombre de fichiers déjà présent)
btrfs-convert
a la bonne idée de faire un backup de l'ancienne partition.
Lorsqu'on est satisfait de la conversion, après plusieurs minutes, plusieurs heures, ou plusieurs jours,
on peut effacer le backup :
# mount -t btrfs <device> <mountpoint> # btrfs subvolume delete <mountpoint/ext2_saved>
En détails
On va reprendre plus en détail la conversion, en exploitant les informations qui sont là : https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-convert
Après une conversion réussie (perso: elles ont toutes fonctionné… malgré mes réserves)
C'est la méthode conseillé.
# btrfs-convert <device>
Après, on mount. OK.
Après avoir monter la partition btrfs
, il faut optimiser le système de fichier:
# btrfs filesystem defrag -v -r -f -t 32M <mount>
On peut virer le “-v
” qui rend juste la commande plus bavarde.
(Temps d'exécution: <10 % du temps de la conversion)
Et enfin:
# btrfs balance start -m <mount>
(Temps d'exécution: <30 % du temps de la conversion)
Sans ''btrfs-convert''
Pour changer de système de fichier, le meilleur moyen reste d'utiliser les commandes “cp
” ou “rsync
”
En pratique, supposons qu'on a un système de disques s'appuyant sur LVM, et qu'on a suffisamment de place libre pour créer un nouveau volume.
Soit une partition en “/dev/vg0/mon_ext4
” , avec un système de fichier “ext4
” monter en “/mnt/warez-cochon
”.
On crée un nouveau volume de la même taille (ou un peu plus grand…)
# lvcreate -L <TAILLE> -n mon_btrfs vg0
On formate le volume en btrfs
:
# mkfs.btrfs /dev/vg0/mon_btrfs
On prépare un dossier pour le montage:
# mkdir -m 0000 /mnt/new_warez-cochon
On monte:
# mount /dev/vg0/mon_btrfs /mnt/new_warez-cochon
On synchronise les 2 systèmes de fichiers:
# rsync -ax -A -X --force --delete /mnt/warez-cochon /mnt/new_warez-cochon
On est censé prendre en compte le fait que la partition source (ici:“warez-cochon
”) , peut changer en cours de synchronisation.
Perso, après une première synchronisation qui peut être très longue, j'arrête les services en faisant usage, et je passe la partition en lecture seule:
# mount -o remount,ro /mnt/warez-cochon
Et puis je fais une ultime synchronisation (qui devrait être beaucoup plus rapide) avec la commande “rsync
”: j'ajoute l'option “-v
” pour avoir une idée des fichiers qui ont changés entre temps…
Et enfin: “/mnt/warez-cochon
” et “/mnt/new_warez-cochon
” sont identique, mais sur 2 systèmes de fichiers differents.
Je laisse le lecteur terminer la mise en place…
Voila.