J'ai un système FreeNAS local et je souhaite utiliser des instantanés ZFS pour les sauvegardes.
FreeNAS a les tâches de réplication intégrées qui utilisent
zfs send snapshot_name
pour envoyer un instantané à un système distant. Mais cela nécessite un système avec ZFS à l'autre bout.
Je veux envoyer l'instantané vers un fichier et envoyer ce fichier compressé et crypté à la machine distante.
C'est possible avec
zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl
Chaque jour, je crée un instantané du pool de stockage et conserve chaque instantané pendant 30 jours.
Avec chaque instantané pris, je redirige cet instantané vers un fichier.
- snapshot_file 1 contient tous les fichiers (disons 2 Go)
- snapshot_file 2 n'a que les modifications apportées à snapshot_file 1 (disons 5 Mo)
- snapshot_file 3 contient les modifications apportées à snapshot_file 2; etc.
Le jour 31, snapshot_file 1 est supprimé (car je souhaite uniquement les modifications des 30 derniers jours)
Par conséquent, snapshot_file 2 doit contenir chaque fichier (2 Go de modifications de snapshot_file 1 + 5 Mo)
Mais avec cette approche tous les jours (à partir du 31e jour), un nouveau fichier de 2 Go doit être créé et envoyé à un système distant. C'est trop de frais généraux.
Quelle serait la meilleure approche pour utiliser des instantanés dirigés vers un fichier comme stratégie de sauvegarde avec un historique de X jours?
PS: Je sais qu'il existe de nombreux logiciels de sauvegarde (rdiff-backup par exemple), que je pourrais utiliser. Mais je suis curieux de savoir comment cela pourrait être fait.
zfs recv
à l'autre bout (sur un pool aveczfs set compression=gzip-9
par exemple). Le stockage de fichiers d'instantanés me semble très inefficace.Réponses:
Si vous stockez les instantanés dans des fichiers, par opposition à dans le système de fichiers (par exemple avec
zfs receive
), je crains que ce ne soit pas possible.ZFS côté réception
Si vous utilisez ZFS du côté de l'envoi et du côté de la réception, vous pouvez éviter d'avoir à transférer l'intégralité de l'instantané et ne transférer que les différences de l'instantané par rapport au précédent:
ZFS ne connaît les instantanés et ne stocke les blocs mutuels qu'une seule fois. La compréhension des instantanés par le système de fichiers vous permet de supprimer les anciens sans problème.
Autre système de fichiers côté réception
Dans votre cas, vous stockez les instantanés dans des fichiers individuels et votre système de fichiers ne connaît pas les instantanés. Comme vous l'avez déjà remarqué, cela rompt la rotation. Vous devez soit transmettre des instantanés entiers, ce qui gaspillera de la bande passante et de l'espace de stockage, mais vous permettra de supprimer des instantanés individuels. Ils ne dépendent pas les uns des autres. Vous pouvez faire des instantanés incrémentiels comme ceci:
Pour restaurer un instantané incrémentiel, vous avez également besoin des instantanés précédents. Cela signifie que vous ne pouvez pas supprimer les anciens incrémentaux.
Solutions possibles
Vous pouvez faire des incrémentiels comme indiqué dans mon dernier exemple et faire un nouveau non incrémentiel chaque mois. Les nouveaux incrémentiels dépendent de ce non incrémentiel et vous êtes libre de supprimer les anciens instantanés.
Ou vous pouvez rechercher d'autres solutions de sauvegarde. Il y a rsnapshot , qui utilise
rsync
et des liens durs. Il fait un très bon travail à la rotation et est très efficace en bande passante, car il ne nécessite une sauvegarde complète qu'une seule fois.Ensuite, il y a les bareos . Il fait des incrémentaux, qui sont à bande passante et peu encombrants. Il a une très belle fonctionnalité; il peut calculer une sauvegarde complète à partir d'un ensemble d'incréments. Cela vous permet de supprimer les anciens incrémentaux. Mais c'est un système assez complexe et destiné à des configurations plus importantes.
Cependant, la meilleure solution consiste à utiliser ZFS du côté récepteur. Il sera efficace en bande passante, efficace en stockage et beaucoup plus rapide que les autres solutions. Le seul inconvénient auquel je peux penser est que vous devriez avoir un minimum de 8 Gio de mémoire ECC sur cette boîte (vous pourriez bien utiliser 4 Gio si vous n'exécutez aucun service et ne l'utilisez que pour
zfs receive
).la source
rsnapshot
. Ou vous pouvez démarrer un nouveau non incrémentiel après un mois, puis supprimer les incrémentiels précédents.