Est-il possible de détacher et de rattacher un disque ZFS sans avoir besoin d'un resilver complet?

10

J'ai un pool en miroir ZFS avec quatre disques au total. Deux des disques sont destinés à être utilisés pour effectuer des rotations de sauvegardes hors site. Je m'attendais à ce qu'après la réargenture initiale, je puisse detachet plus tard attachun disque et que je ne le fasse que par un réargenteur incrémentiel - cependant, lors des tests, il semble effectuer une réargenture complète, que le disque attaché contienne déjà presque tout le pool ou non. Contenu.

Est-ce que l'utilisation d'une approche offline/ onlineme donnerait le résultat souhaité de seulement mettre à jour le disque - plutôt que de le reconstruire complètement? Ou pour que ce travail se déroule comme prévu, devrai-je faire quelque chose de complètement différent - comme utiliser chaque disque de sauvegarde en tant que pool à 1 disque et y sendajouter les snapshots les plus récents chaque fois qu'il doit être mis à jour?

STW
la source
5
-1 Ne détachez / attachez pas de disques pour la sauvegarde, utilisez les commandes d'envoi / réception comme le souhaitaient les concepteurs ZFS.
Chris S
2
@ChrisS au lieu de -1 que diriez-vous d'écrire une réponse avec quelques citations. Il semble que vous disiez que la seule option pour les sauvegardes est un pool en ligne ailleurs - ce qui serait formidable de savoir si c'est vrai, mais je suppose que ce n'est pas le cas.
STW
1
Désolé, je n'ai pas l'intention d'être un imbécile arrogant, mais Server Fault est censé être réservé aux administrateurs système professionnels (et al). La méthode de sauvegarde des miroirs est tellement ingérable, sujette aux erreurs et peu professionnelle qu'elle ne devrait pas être considérée comme une méthode de sauvegarde viable. Ce que je suggère, c'est que vous formatez les deux lecteurs de sauvegarde avec le système de fichiers de votre choix et que vous utilisiez la zfs sendcommande pour prendre des flux de sauvegarde complets ou incrémentiels enregistrés sur les disques de sauvegarde, ou utiliser zfs recvpour créer un disque en double. Je recommande fortement d'utiliser une sorte de logiciel pour gérer ce processus.
Chris S
Je pense que vos points sont valables, je voterais pour une réponse. J'envisage de réécrire ma question pour me concentrer moins sur mon scénario spécifique (qui découle d'un budget restreint pour un serveur interne non critique, mais important) et plus au cœur "puis-je rattacher un lecteur sans avoir besoin d'un plein resilvering? "
STW

Réponses:

14

Ne vous engagez pas à casser la baie ZFS pour «faire tourner» les disques hors site. Comme vous l'avez vu, le temps de reconstruction est élevé et le processus de réargenture lira / vérifiera la taille utilisée de l'ensemble de données.

Si vous en avez la possibilité, des instantanés et l'envoi de données à un système distant sont une approche propre et non intrusive. Je suppose que vous pourriez passer par le processus d'avoir un pool dédié à un seul disque, y copier et exporter / importer zpool ... mais ce n'est pas très élégant.

ewwhite
la source
Malheureusement, je ne peux pas utiliser une approche snapshot-> send car je n'ai pas le matériel ou la bande passante pour exécuter un deuxième serveur ZFS hors site. Cependant, il semble que l'utilisation hors ligne / en ligne fonctionnera, avec le compromis que l'état signale comme dégradé. Je vais voir comment ça se passe pour la semaine prochaine.
STW
1
Compris. Mais retirer des disques en cours d'exécution d'un système comme une forme de sauvegarde n'est pas une solution solide. Votre risque augmente considérablement lorsque vous faites cela.
ewwhite
Bon point, mon plan est de les déconnecter, de les suspendre, de déloger leur plateau remplaçable à chaud puis de lui donner une minute pour assurer un arrêt complet avant de le retirer complètement
STW
1
Pouvez-vous faire fonctionner un deuxième serveur sur site (ou même une deuxième baie ZFS sur le même serveur)? Placez-y vos baies hotswap, synchronisez-les avec la baie principale, puis faites pivoter l'intégralité de la baie de sauvegarde ZFS dans / hors du serveur en tant qu'unité.
Dan est en train de tripoter Firelight
11

Après de nouvelles expérimentations, j'ai trouvé une solution équitable, mais elle s'accompagne d'un important compromis. Les disques qui ont été offline'd mais non détachés peuvent ensuite être remis en ligne avec seulement une opération de réargenture incrémentielle (" Lorsqu'un périphérique est mis en ligne, toutes les données qui ont été écrites dans le pool sont resynchronisées avec le nouveau périphérique disponible. "). Dans mes tests, cela réduit le temps de réargenture d'un miroir à 3 disques de 28 heures à un peu plus de 30 minutes, avec environ 40 Go de données-delta.

Le compromis est que tout pool avec un disque hors ligne sera marqué comme dégradé. À condition qu'il y ait encore au moins deux disques en ligne (dans un pool en miroir), il s'agit effectivement d'un avertissement - l'intégrité et la redondance restent intactes.

Comme d'autres l'ont mentionné, cette approche globale est loin d'être idéale - l'envoi d'instantanés à un pool distant serait beaucoup plus approprié, mais dans mon cas, ce n'est pas faisable.

Pour résumer, si vous devez supprimer un disque d'un pool et l'ajouter ultérieurement sans nécessiter une réargenture complète, l'approche que je recommanderais est la suivante:

  • hors ligne le disque dans le pool: zpool offline pool disk
  • tourner le disque (s'il doit être tiré physiquement): hdparm -Y /dev/thedisk
  • laisser la piscine dans un état dégradé avec le lecteur déconnecté
  • pour ajouter le disque au pool: zpool online pool disk

Et, comme cela n'a pas encore été testé, il existe un risque que l'opération de réargenture delta ne soit pas précise. Le pool "en direct" et / ou les disques hors ligne peuvent rencontrer des problèmes. Je mettrai à jour si cela m'arrive, mais pour l'instant j'expérimenterai cette approche.

STW
la source
1
Si le resilver va introduire des erreurs de données, celles-ci vont guérir automatiquement au fil du temps ou lors d'un nettoyage zpool.
le-wabbit
J'ai réalisé la valeur d'un gommage; J'attends qu'après un scrub réussi pour déconnecter et retirer le disque de sauvegarde
STW
2
Juste une petite mise à jour: au cours de la dernière année, cette approche a assez bien fonctionné. Les tests de restauration mensuels de la sauvegarde hors site ont été réussis et cohérents. Faire tourner une baie (plutôt qu'un seul disque) serait préférable pour fournir un niveau de redondance dans la copie hors site, et je recommanderais de le faire si possible. Dans l'ensemble, il s'agit toujours d'une approche hackeuse et présente un certain risque, mais a fourni une sauvegarde hors site raisonnablement sûre et peu coûteuse de nos données.
STW
Je m'oppose à la rotation de tous les disques de la baie car le transport peut lentement les endommager tous. Je ne ferais pas la rotation même si les disques restaient sur place.
Costin Gușă
2

Mise à jour du 15 octobre 2015: Aujourd'hui, j'ai découvert la zpool splitcommande, qui sépare un nouveau pool (avec un nouveau nom) d'un pool existant. splitest beaucoup plus propre que offlineet detach, car les deux piscines peuvent alors exister (et être nettoyées séparément) sur le même système. Le nouveau pool peut également être proprement (et correctement) export[ed]avant d'être débranché du système.

(Mon message d'origine suit ci-dessous.)

Avertissement! Divers commentaires sur cette page impliquent qu'il est (ou peut être) possible de zpool detachconnecter un lecteur, puis de rattacher le lecteur et d'accéder aux données qu'il contient.

Cependant, selon ce fil (et ma propre expérimentation) zpool detachsupprime les "informations de pool" du lecteur détaché. En d'autres termes, a detachest comme un reformatage rapide du lecteur . Après que detachbeaucoup de données peuvent encore être sur le lecteur, mais il sera pratiquement impossible de remonter le lecteur et d'afficher les données comme un système de fichiers utilisable.

Par conséquent, il me semble que detachc'est plus destructeur que destroy, car je crois zpool importpouvoir récupérer des bassins détruits!

A detachn'est ni a umount, ni a zpool export, ni a zpool offline.

Dans mon expérimentation, si j'utilise d'abord zpool offlineun appareil, puis zpool detachle même appareil, le reste du pool oublie que l'appareil a jamais existé. Cependant, étant donné que le périphérique lui-même était offline[d]antérieur à ce qu'il était detach[ed], le périphérique lui-même n'est jamais informé de la detach. Par conséquent, le périphérique lui-même a toujours ses informations de pool et peut être déplacé vers un autre système, puis import[ed](dans un état dégradé).

Pour une protection supplémentaire contre detachvous pouvez même débrancher physiquement l'appareil après la offlinecommande, mais avant d'émettre la detachcommande.

Je souhaite utiliser ce offline, puis detach, puis importtraiter pour sauvegarder ma piscine. Comme l'affiche originale, je prévois d'utiliser quatre disques, deux dans un miroir constant et deux pour des sauvegardes mensuelles, rotatives, hors site (et hors ligne). Je vérifierai chaque sauvegarde en l'important et en la nettoyant sur un système séparé, avant de la transporter hors site. Contrairement à l'affiche originale, cela ne me dérange pas de réécrire l'intégralité du lecteur de sauvegarde chaque mois. En fait, je préfère des réécritures complètes afin d'avoir de nouveaux morceaux.

mpb
la source
0

Dans la même machine, avez-vous essayé de créer un nouveau pool avec les 2 lecteurs dans un miroir? Ensuite, créez un instantané sur votre pool de travail, puis envoyez cet instantané au nouveau pool, répétez, puis l'envoi de l'instantané suivant sera incrémentiel. Ce n'est pas la même chose avec "l'envoi de données à un système distant" car il s'agit d'un pool au sein du même système / serveur / machine. Avec cette configuration, vous pouvez toujours appliquer zpool split / offline / detach / attach mais vous ne le faites que dans le deuxième pool (copie) et non sur le pool source.

soyayix
la source