Mise en place d'une partition Btrf avec sauvegarde incrémentielle et versionning

Btrfs_logo.png

Dans mon entreprise nous avons un NAS pour stocker nos fichiers (emails, documents de partage, documents perso), ce NAS tourne sur Linux Debian avec des partages Samba qui vont bien pour que tout le monde puisse y accéder.

Pour assurer la sauvegarde des données, j'utilisais rdiff-backup. Ce logiciel qui repose sur Rsync permet de faire de la sauvegarde incrémentielle et du versionning au travers du réseau. Mes données étaient donc répliquées tous les soirs sur une autre machine qui sert de serveur de sauvegarde (Linux Debian également).

Cela me suffisait mais les commandes pour accéder à d'ancienne version de fichier ne sont pas des plus simples et j'ai déjà eu des soucis de sauvegardes. Rdiff-backup se bloquait et ne sauvegardait plus pendant plusieurs jours le temps que je résolve le problème. De plus j'étais souvent obligé de supprimer l'historique des versions des fichiers, ce qui me gênait cruellement.

J'ai donc cherché un nouveau système de sauvegarde avec versionning. Mon choix s'est porté sur le système de fichier Btrfs (B-tree file system)


Termes techniques utilisés dans ce tutoriel :

  • NAS : Network Attached Storage : C'est un serveur de fichier sur le réseau. En gros un PC avec un gros disque dur et une carte réseau.
  • Samba : Logiciel qui permet la communication de fichier entre Linux et Windows
  • Debian : Distribution Linux reconnu pour sa stabilité.
  • Sauvegarde incrémentielle : Au lieu de sauvegarder toutes les données à chaque fois, on ne sauvegarde que les fichiers qui sont modifiés. On peut même aller jusqu’à ne sauvegarder que les parties modifiées d'un fichier.
  • Versionning : C'est le fait de garder plusieurs versions d'un fichier et de pouvoir « remonter dans le temps ».
  • Système de fichier : C'est la façon dont l'OS va organiser ses fichiers sur le disque dur (Ext4, FAT32, NTFS, Btrfs, ...)


Mise en place d'une partition Btrfs

Sur mon serveur NAS, je n'ai touché a rien.

/!\ Avant toute opération je vous conseil fortement de faire une sauvegarde de vos données /!\

Dans le cas présent je travaillais sur un serveur de sauvegarde, donc détaché de la production.

Sur mon serveur de sauvegarde, j'ai commencé par mettre à jour mon kernel linux.

apt-get update && apt-get upgrade && apt-get dist-upgrade

J'ai ensuite installé les outils Btrfs

apt-get install btrfs-tools

J'avais une partition en /media/sauvegarde Ext4 sur mon serveur de sauvegarde que j'ai converti en Btrfs.

Pour obtenir la liste de vos partitions

fdisk -l

Pour obtenir la liste de vos montages

mount

Conversion

# démontage de la partition /media/sauvegarde
umount /dev/sdb1
# conversion du format Ext4 en Btrfs
btrfs-convert /dev/sdb1

Il n'y a plus qu'a attendre patiemment. Si tous se passe bien un message « conversion complete » apparaît.

Il faut ensuite éditer votre fichier /etc/fstab pour transformer votre ancien format en btrfs pour la partition concernée.

# on remonte la partition
mount /dev/sdb1

Voilà mon disque est prêt et mes fichiers sont toujours là.

Mise en place d'un nouveau système de sauvegarde

J'ai modifié mes scripts utilisant rdiff-backup pour qu'il utilise maintenant rsync.

Exemple avec la partition /home de mon serveur NAS.

rsync -e ssh --delete-before -avzpC /home/ utilisateur@ip_serveur_sauvegarde:/media/sauvegarde/nas/home/

Une fois cette sauvegarde réalisée, je vais dire à la partition btrfs distante de créer un instantané en lecture seule de ce que je viens de synchroniser (read-only subvolume snapshot).

ssh root@ip_serveur_sauvegarde "btrfs subvolume snapshot -r /media/sauvegarde/nas/ /media/sauvegarde/snapshot/nas@$(date +%Y-%m-%d_%Hh%Mm%Ss)"

Je mets tout ça dans un crontab et au bout de quelques jours mon historique prend forme.

list_snapshot_nas.png

Le gros avantage c'est que les instantanés sont vu comme les répertoires par les explorateurs de fichier. Ils sont une copie parfaite du répertoire /home de mon NAS à l'instant T. Bien sûr les fichiers modifiés ne sont pas réellement recopiés à plusieurs endroits. C'est là toute la force de Btrfs, il gère ça de façon intelligente. Il sait compresser les données, les réparer, faire des instantanés à chaud, faire du RAID...

Suppression des versions trop vieilles

La place sur le disque n'était pas illimité, il faut de temps à autre purger les données trop vieilles. Cette simple ligne de commande suffira à ne garder que les 8 dernières versions (à mettre dans le crontab de l'utilisateur root)

cd /media/sauvegarde/snapshot/
find /media/sauvegarde/snapshot/ -maxdepth 1 -type d -printf '%f\n' | grep 'nas@' | sort -r | tail -n+8 | xargs btrfs subvolume delete

Et voilà, vous avez un système de sauvegarde rapide, versionné et très simple d'accès pour remonter des fichiers en cas de perte.

Quelques liens utiles

Commentaires

1. Le vendredi, octobre 23 2015, 08:29 par Jujube

Sympathique tuto. Merci bien.
Tu devrais le pousser à Korben.info peut être qu'il accepterait de le relayer.

Sinon, je trouve que ta politique e sauvegarde est trop basique. En plus de garder les 8 derniers jours, je garderais une sauvegarde par mois sur 6 mois... On peut mettre plusieurs semaines à se rendre compte qu'un fichier à disparu...

Keep going !

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet