J'utiliserais l'envoi/réception incrémentiel de ZFS. Cela devrait être plus efficace que rsync
car ZFS sait ce qui a été modifié depuis l'instantané précédent sans avoir à explorer l'ensemble du système de fichiers.
Supposons que vous souhaitiez effectuer une sauvegarde complète d'un système de fichiers nommé datapool/fs
.
Vous créez d'abord un pool pour stocker votre sauvegarde sur le serveur de destination et un instantané récursif sur le pool source :
dest # zpool create datapool ...
source # zfs snapshot -r datapool/fs@snap1
vous envoyez alors l'ensemble des données en tant que sauvegarde initiale :
source # zfs send -R datapool/fs@snap1 | ssh dest zfs receive datapool/fs
La semaine suivante (ou la période de votre choix), vous créez un deuxième instantané sur le pool source et l'envoyez de manière incrémentielle sur le pool de destination. Cette fois, ZFS est suffisamment intelligent pour n'envoyer que ce qui a été modifié au cours de la semaine (fichiers supprimés, créés et modifiés). Lorsqu'un fichier est modifié, il n'est pas envoyé dans son intégralité, mais seuls les blocs modifiés sont transmis et mis à jour.
source # zfs snapshot -r datapool/fs@snap2
source # zfs send -ri snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs
Répétez l'opération en incrémentant les numéros d'instantanés à chaque sauvegarde.
Supprimez les anciens clichés inutilisés sur l'un ou l'autre des serveurs lorsque vous n'en avez plus besoin.
Si vous avez des contraintes de bande passante, vous pouvez compresser/décompresser les données à la volée, par exemple en insérant des fichiers gzip
/ zip
dans le pipeline ou en activant la compression ssh.
source # zfs send -ri snap1 datapool/fs@snap2 | gzip |
ssh dest "gunzip | zfs receive -F datapool/fs"
Vous pouvez également tirer parti de mbuffer
obtenir une utilisation plus régulière de la bande passante, comme décrit dans le présent document. page :
dest # mbuffer -s 128k -m 1G -I 9090 | zfs receive datapool/fs
source # zfs send -i snap2 datapool/fs@snap3 |
mbuffer -s 128k -m 1G -O w.x.y.z:9090
Note : Le zfs -r
n'est pas disponible avec les implémentations ZFS non Solaris, voir http://lists.freebsd.org/pipermail/freebsd-fs/2012-September/015074.html . Dans ce cas, n'utilisez pas l'option -F
sur la cible, mais au lieu de cela, il faut annuler explicitement les ensembles de données. Si de nouveaux jeux de données ont été créés sur la source, envoyez-les d'abord indépendamment avant d'effectuer l'envoi/la réception de l'instantané et de l'incrémental.
Bien entendu, si vous n'avez qu'un seul système de fichiers à sauvegarder sans hiérarchie de données sous-jacente, ou si vous souhaitez effectuer des sauvegardes indépendantes, la sauvegarde incrémentielle est plus simple à mettre en œuvre et devrait fonctionner de manière identique quelle que soit l'implémentation de ZFS :
T0 :
zfs snapshot datapool/fs@snap1
zfs send datapool/fs@snap1 | ssh dest zfs receive datapool/fs
T1 :
zfs snapshot datapool/fs@snap2
zfs send -i snap1 datapool/fs@snap2 |
ssh dest zfs receive -F datapool/fs