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
et detach
, cependant, elle utilise online
et offline
. 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 un DEGRADED
état (le pool a toujours deux disques; les disques rotatifs hors site sont marqués offline
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'erreurs
Je zfs offline
le disque qui sera pris à distance. Après sa mise hors ligne, je l'ai fait hdparm -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 un OFFLINE
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.