J'utilise un pool ZFS composé de deux disques en miroir. Pour lancer les sauvegardes hors site, j'ai acheté deux disques supplémentaires.
Mon plan initial était de créer la sauvegarde hors site en attachant un troisième disque au miroir, en attendant que ZFS se resilver, puis détacher le lecteur et le transporter hors site. Cela fonctionne assez bien, mais j'ai été surpris qu'il semble effectuer un resilver complet chaque fois qu'un disque est connecté (j'avais lu, et peut-être mal compris, que chaque pièce jointe entraînerait une resilver incrémentielle ou delta). Cela entraîne des sauvegardes prenant plus de temps que ce qui est acceptable.
Mes exigences sont d'avoir une copie hors site de mon zpool et de tous ses instantanés que je peux faire pivoter quotidiennement. Cela signifie que la réargenture doit prendre au plus 24 heures - actuellement, elle est proche de cela, mais nos plans de croissance de notre piscine le pousseront au-delà de cette période.
Comment puis-je conserver des sauvegardes hors site qui ne nécessitent pas une opération de réargenture complète? Dois-je utiliser un système de fichiers différent sur mes lecteurs de sauvegarde (par exemple, exporter une image plutôt que de les faire faire partie du pool ZFS)? Dois-je avoir les sauvegardes dans un pool séparé et lui envoyer de nouveaux instantanés lors de leur création?
Réponses:
Après beaucoup de bricolage et d'expérimentation, j'ai trouvé une solution, mais avec un compromis assez important.
Tout d'abord, les options que j'ai dû exclure:
Avoir un deuxième serveur ZFS hors site avec un pool en miroir n'était pas une option en raison du coût. Si cela avait été une option, cela aurait été de loin la meilleure approche, en utilisant l'envoi / la réception ZFS pour envoyer des instantanés au pool distant.
Avoir un deuxième pool de miroirs ZFS sur site, dont je pourrais retirer les disques à ramener à la maison. C'est plus faisable que la première option, mais j'aurais besoin du deuxième pool pour avoir toujours deux disques sur place (ou pour utiliser deux copies de données sur un seul disque sur place). Actuellement, j'ai quatre disques et plus d'espace pour un cinquième sur le serveur. Ce serait une approche équitable mais pas toujours idéale.
Utilisation de l'attachement et du détachement de ZFS pour faire pivoter le disque de sauvegarde dans et hors du pool en miroir. Cela fonctionne bien, mais doit effectuer un resilver complet chaque fois que le disque est ajouté. Cela prend un temps inacceptable et je ne pouvais donc pas m'y fier.
Ma solution est similaire à l'utilisation
attach
etdetach
, cependant, elle utiliseonline
etoffline
. Cela présente l'avantage d'effectuer une réargenture delta par rapport à une réargenture complète, mais l'inconvénient que le pool signale toujours unDEGRADED
état (le pool a toujours deux disques; les disques rotatifs hors site sont marquésoffline
lorsqu'ils sont dans le stockage distant et le resilver, puis sont mis en ligne lorsqu'ils sont sur place).Donc, un bref récapitulatif et un aperçu de ma configuration:
J'ai un serveur ZFS et quatre disques identiques. ZFS est configuré pour utiliser un pool en miroir. Deux des quatre disques sont des membres permanents de ce pool. Les deux autres disques tournent; l'un est toujours dans le stockage hors site, l'autre fait partie du pool pour agir comme une sauvegarde prête à l'emploi.
Quand vient le temps de faire pivoter les sauvegardes:
J'attends la fin d'un
zfs scrub
pour m'assurer raisonnablement que le disque de sauvegarde est exempt d'erreursJe
zfs offline
le disque qui sera pris à distance. Après sa mise hors ligne, je l'ai faithdparm -Y /dev/id
tourner. Après une minute, j'enlève partiellement le traîneau à disques (juste assez pour assurer sa perte de puissance), puis je lui donne une autre minute avant de tirer complètement le lecteur pour garantir qu'il a cessé de tourner. Le disque est placé dans un sac statique, puis dans un étui de protection et hors site.J'apporte l'autre disque hors site. Il s'installe dans le plateau de hotswap et tourne. J'utilise
zfs online
pour restaurer le disque dans le pool et lancer une réargenture partielle pour le rendre simultané.Ce système garantit qu'à tout moment j'ai deux
ONLINE
disques miroirs et unOFFLINE
disque distant (qui a été nettoyé). Le quatrième disque est en cours de réargenture ou en ligne, ce qui présente l'avantage qu'en cas de défaillance d'un lecteur en cours d'exécution, il est probable que le pool sera toujours cohérent de deux disques en ligne.Cela a bien fonctionné au cours des deux dernières semaines, mais je considère toujours que c'est une approche hackish. Je ferai un suivi si je rencontre des problèmes majeurs.
Mise à jour: Après avoir exécuté cela pendant quelques mois, j'ai constaté que dans mon utilisation réelle, la réargenture prend le même temps pour détacher / attacher et hors ligne / en ligne. Lors de mes tests, je ne pense pas que j'exécutais un nettoyage - mon intuition est que si un lecteur est hors ligne pour un nettoyage, il nécessite un resilver complet.
la source
Pourquoi pas zfs envoyer vos instantanés à une machine ZFS distante? J'utilise un simple script bash pour cela:
la source
J'ai créé un outil appelé snapdump qui vous permet de créer des sauvegardes incrémentielles de vos jeux de données zfs vers un système de fichiers étranger (non zfs). Snapdump prend également en charge la restauration d'une chaîne d'instantanés incrémentielle avec une seule commande.
la source