Question ZFS sur les répliques insuffisantes Linux


Résumé

Un de mes pools ZFS ne peut plus être importé en raison du message suivant:

status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
...
    data1       UNAVAIL  insufficient replicas

Je voudrais comprendre ce que signifient les "répliques insuffisantes", et s'il existe un moyen de s'en sortir en toute sécurité avant de sortir les sauvegardes et de reconstruire le pool de stockage.

Je voudrais aussi comprendre ce qui a causé cela et ce que je peux faire pour prévenir cette situation à l’avenir. Je comprends les roches de ZFS, mais en tant que débutant ZFS, il est effrayant de devoir faire des sauvegardes pour quelque chose d'aussi anodin que de sortir un lecteur d'une boîte.

Contexte

J'ai récemment mis hors tension cette boîte et sorti le disque SATA sda. Je suis sûr à 99% de laisser le système s'éteindre complètement avant de le débrancher du mur, mais il est possible que je sois arrivé à une coupure de courant si l'arrêt prenait trop de temps.

En rebranchant le lecteur, je crois que je l'ai rebranché dans le même port SATA de la carte mère, mais il est possible que je l'aie branché sur un autre port.

La boîte contient également un ancien disque sdb PATA sur lequel Debian est installé comme seul système d'exploitation sur une partition externe.

Dans le passé, je démarrerais, tous mes pools seraient importés et les volumes montés. Cette fois je n'ai rien eu.

Aujourd'hui

Lorsque j'ai démarré la boîte, j'étais à l'écran de connexion GDM habituel et j'ai réalisé que je ne pouvais pas me connecter. J'ai découvert plus tard que je n'avais pas de répertoire utilisateur car ils sont tous dans un pool.

Depuis la ligne de commande, j'ai découvert les éléments suivants:

# zfs list
no datasets available

# zpool list
no pools available

# zpool status
no pools available

Mes lecteurs étaient disponibles fdisk a produit la sortie attendue et j'avais mes périphériques / dev / sdaX et / dev / sdbX.

zpool import m'a donné des résultats intéressants. Les autres pools ont déclaré en ligne, mais celui en question a signalé ceci:

   pool: ...
     id: ...
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
    see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        data1       UNAVAIL  insufficient replicas
          sda2      UNAVAIL

J'ai pu importer les autres pools à ce stade en utilisant zpool import poolname et puis voir tout allait bien avec eux zfs list.

Non avec celui-ci:

# zpool import data1
cannot import 'data1': one or more devices are already in use

zpool import a montré la même sortie pour ce pool.

J'ai pensé à supprimer le /etc/zfs/zpool.cache fichier. J'ai tout exporté puis vérifié le répertoire:

# zpool export -a
# ls /etc/zfs

Il n'y avait pas de zpool.cache après l'exportation, alors j'ai simplement redémarré. (Je ne sais pas ce qui se passerait si je supprimais le zpool.cache alors que les pools étaient importés, donc je n'ai pas essayé.)

Même résultat après le redémarrage. Les autres pools sont corrects et celui-ci ne peut pas être importé.


2
2017-11-11 20:36


origine


ZFS est généralement insensible aux noms de périphériques et recherchera un périphérique s'il ne se trouve pas dans le fichier cache. (Chaque périphérique de support ZFS stocke un identifiant unique, 64 bits IIRC, et tous les périphériques d'un pool stockent une liste des périphériques de ce pool par ID.) Cela dit, pouvons-nous voir la sortie de zdb /dev/sda et / ou zdb /dev/sda2 (en supposant que le disque ZFS qui pose problème est en fait identifié par le système d’exploitation sous le nom / dev / sda, - Michael Kjörling


Réponses:


Je voudrais comprendre ce que signifie "répliques insuffisantes"

Cela signifie que ZFS a rencontré une erreur lors de la lecture ou de l'écriture dans le pool, puis a découvert qu'il n'y avait pas suffisamment de redondance dans le pool pour résoudre le problème. Comme il semble que vous ayez configuré ZFS pour des pools à lecteur unique, cela signifie simplement qu’il a rencontré un problème et qu’il ne peut plus être récupéré tout seul.

Dans le cas simple, zpool status -v rapportera des fichiers individuels désormais irrémédiablement corrompus. Les restaurer à partir de sauvegardes ou les supprimer ramènera le pool à un état non corrompu. C'est l'un des avantages que vous obtenez avec ZFS, par opposition au système de fichiers séparé, au gestionnaire de volumes logiques et aux sous-systèmes RAID. Une erreur au niveau du disque affectant un seul fichier peut être signalée comme une erreur dans ce fichier spécifique, tandis qu'avec les attaques de type FS + LVM + RAID, une erreur aux niveaux inférieurs ne peut pas maintenir le contexte sémantique pendant la propagation.

Selon votre question, cependant, zpool status est ne pas signaler un problème avec des fichiers particuliers, ce qui signifie que quelque chose de plus fondamental a mal tourné avec le disque isolé du pool de problèmes. À ce stade, je chercherais à diagnostiquer le disque lui-même: smartctl, badblocks, SpinRite, outils de diagnostic des fournisseurs, etc.

À l'avenir, envisagez fortement d'utiliser au moins des miroirs avec ZFS. ZFS peut soit résoudre ces problèmes lorsque vous avez besoin d’une redondance, ou au moins vous laisser aller jusqu’à ce que vous puissiez organiser le remplacement du disque.

tout moyen de récupérer de cela en toute sécurité avant de sortir les sauvegardes

Si ZFS pouvait le faire, ce serait le cas. ZFS n'abandonne pas facilement, mais quand c'est le cas, cela signifie que vous ne pouvez pas utiliser les données en toute sécurité sur le pool.

À ce stade, votre meilleur espoir est que le problème soit que le support de stockage sous-jacent ait une erreur logicielle qui permettra à SpinRite, badblocks, ou similaire à venir et forcer le disque à extraire une dernière copie du secteur défectueux une dernière fois et le copier dans un secteur de rechange.

Attention, ZFS est plus strict que les autres systèmes de fichiers à cet égard, en ce sens qu’il n’acceptera pas une récupération partielle du secteur. La somme de contrôle des données forte signifie que seule une restauration complète de chaque secteur peut amener ZFS à accepter que le système de fichiers soit désormais propre.

Si vous êtes persuadé que les données partielles sont meilleures que l'absence de données, cela signifie que ZFS est un problème pour vous. Si au contraire, vous pensez que des données incorrectes sont incorrectes, ZFS fait exactement ce que vous voulez.

un ou plusieurs appareils sont déjà utilisés

Ce n'est pas bon.

Cela signifie que vous avez laissé un autre pilote du noyau se connecter à ce disque avant que ZFS puisse y accéder ou que ZFS trouve le même disque par plusieurs chemins.

Votre meilleur espoir est que vous soyez dans le second cas, et forcer ZFS à rechercher des disques par un seul chemin peut vous faire passer ce problème:

$ sudo ZPOOL_IMPORT_PATH="/dev/disk/by-id" zpool import -a

Si cela fonctionne, il est possible que l'exportation et la réimportation du pool de problèmes fonctionnent sans la force, car ZFS se souvient généralement du chemin par lequel ses vdev ont été importés pour la dernière fois.


1
2017-11-11 20:58