Qu'est-ce qu'une erreur ZFS permanente indique?


18

Plusieurs permanent errorsont été signalés sur mon zpool aujourd'hui.

  pool: seagate3tb
 state: ONLINE
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: http://zfsonlinux.org/msg/ZFS-8000-8A
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        seagate3tb  ONLINE       0     0    28
          sda       ONLINE       0     0    56

errors: Permanent errors have been detected in the following files:

        /mnt/seagate3tb/Install.iso
        /mnt/seagate3tb/some-other-file1.txt
        /mnt/seagate3tb/some-other-file2.txt

Edit: je suis sûr que ces CKSUMvaleurs sont exactes. J'étais en train de biffer des données et je les ai peut-être faussées par erreur. Ils peuvent avoir été 0. Malheureusement, je ne trouve pas de réponse concluante dans mes notes et les erreurs sont résolues maintenant, donc je ne suis pas sûr, mais tout le reste est précis / reflète ce que zpool rapportait.

/mnt/seagate3tb/Install.iso est un exemple de fichier signalé comme ayant une erreur permanente.

Voici où je me sens confus. Si je compare mon "erreur permanente" Install.isoavec une sauvegarde de ce même fichier exact sur un autre système de fichiers, ils semblent identiques.

shasum "/mnt/seagate3tb/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/seagate3tb/Install.iso
shasum "/mnt/backup/Install.iso"
1ade72fe65902b2a978e5504aaebf9a3a08bc328  /mnt/backup/Install.iso
cmp /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso
diff /mnt/seagate3tb/Install.iso /mnt/backup/Install.iso

Les fichiers semblent identiques. De plus, le fichier fonctionne parfaitement bien. Si je l'utilise dans une application, il se comporte comme je m'y attendais.

Comme le disent les documents :

Les erreurs de corruption de données sont toujours fatales.

Mais sur la base de mes vérifications rudimentaires de fichiers, je ne suis pas sûr de comprendre la définition de fatal.

état: un ou plusieurs appareils ont rencontré une erreur entraînant une corruption des données. Les applications peuvent être affectées.

action: restaurez le fichier en question si possible. Sinon, restaurez l'intégralité du pool à partir de la sauvegarde.

Peut-être que je manque quelque chose, mais le fichier semble parfaitement bien pour autant que je sache, et n'a besoin d'aucune restauration ni ne montre aucune corruption, malgré les recommandations de ZFS.

J'ai vu d' autres articles avec la même erreur , mais je n'ai pas encore trouvé de réponse à ma question.

Quelle est l'erreur permanente avec le fichier? Y a-t-il un problème de niveau inférieur avec le fichier qui n'est tout simplement pas évident pour moi? Dans l'affirmative, pourquoi cela ne serait-il pas détecté par shasumune différence dans le fichier?

Du point de vue d'un profane, je ne vois rien pour indiquer une erreur avec ce fichier.


Avez-vous des instantanés?
ewwhite

3
Puis-je, puisque personne d'autre ne l'a dit, puis-je vous souhaiter la bienvenue sur ServerFault? Cela me semble être une excellente première question, et j'espère qu'elle continuera à glaner des réponses instructives. J'espère que vous décidez de rester dans SF et de contribuer davantage.
MadHatter

Merci @MadHatter! J'apprécie votre aimable accueil et je resterai certainement dans SF. Je l'ai déjà ajouté à ma brève liste de communautés SE.
Will Haley

Réponses:


22

Le libellé de zpool statusest un peu trompeur. Une erreur permanente (dans ce contexte) indique qu'une erreur d'E / S s'est produite et a été enregistrée dans le journal des erreurs SPA (Storage Pool Allocator) pour ce pool. Cela ne signifie pas nécessairement qu'il existe une corruption irrémédiable des données.

Ce que vous devez faire, c'est exécuter un zpool scrubsur la piscine. Une fois le nettoyage terminé, le journal d'erreurs du SPA pivote et n'affiche plus les erreurs antérieures au nettoyage. Si le gommage ne détecte aucune erreur, il zpool statusn'affichera plus aucune erreur "permanente".

En ce qui concerne la documentation, cela signifie que seules les "erreurs fatales" sont enregistrées de cette manière. Une erreur fatale est une erreur d'E / S qui n'a pas pu être corrigée automatiquement par ZFS et a donc été exposée à une application en tant qu'E / S défaillante. En revanche, si les E / S étaient immédiatement réessayées avec succès ou si les E / S logiques étaient satisfaites à partir d'un périphérique redondant, cela ne serait pas considéré comme une erreur fatale et ne serait donc pas enregistré comme une erreur de corruption de données.

Une erreur fatale ne signifie pas nécessairement une perte de données permanente, cela signifie simplement qu'au moment où elle ne pouvait pas être corrigée avant de se propager jusqu'à l'application. Par exemple, un câble lâche ou un mauvais contrôleur peut provoquer des erreurs fatales temporaires que ZFS qualifierait de «permanentes». La question de savoir s'il s'agit réellement d'un problème dépend de la nature des E / S et de la capacité de l'application à se remettre des erreurs d'E / S.

EDIT: entièrement d'accord avec @bahamat que vous devez investir dans la redondance dès que possible.


Le journal des erreurs SPA signalant cela comme «permanent» semble en effet un peu trompeur. Le zpool scrubfait exactement ce que vous avez suggéré @ tom-shaw, et votre explication est parfaitement logique. Je ne vois plus aucune "erreur permanente" sur ce tableau après le gommage. Je n'ai pas pensé aux erreurs fatales dans le contexte d'une lecture ratée. Je pense que cela doit être juste une erreur d'E / S temporaire sur une lecture comme vous le suggérez. Je suis également totalement d'accord sur la nécessité de la redondance.
Will Haley

Tom, je ne t'ai pas vu depuis un moment. Nous saluons le retour.
le-wabbit du

7

Une erreur permanente signifie qu'il y a eu une erreur de somme de contrôle dans le fichier et qu'il n'y avait pas suffisamment de réplicas pour réparer. Cela signifie qu'au moins une lecture a renvoyé des données corrompues en raison d'une erreur d'E / S. Si quelque chose a reçu la lecture, puis l'a écrit dans le même fichier disque, vous aurez maintenant une corruption de données irrécupérable.

En regardant la configuration de votre pool, il semble que vous n'ayez aucune redondance. C'est très dangereux. Vous ne recevez pas des avantages d'auto-guérison de ZFS, mais il sera en mesure de vous dire quand il y a eu la corruption de données. Normalement, ZFS corrige automatiquement et silencieusement les lectures corrompues, mais dans votre cas, il ne le peut pas. Il semble également que vous ayez déjà exécuté, zpool clearcar le CKSUMnombre est 0pour les deux disques.

Malheureusement, sans répliques, il n'y a vraiment aucun moyen de le savoir.


2
N'effacerait-il pas zpool clearégalement le message d'erreur lui-même, pas seulement le nombre d'erreurs? Il est étrange que le message persiste, mais aucune erreur ne s'affiche.
user121391

2
Mes excuses. J'avais omis les fichiers de la liste des erreurs permanentes pour la confidentialité. En modifiant cette sortie, j'ai également modifié le nombre de CKSUM et perdu un contexte précieux. J'ai édité la question pour refléter la réalité. @ user121391
Will Haley

Dans ce cas, si les chiffres que vous affichez sont corrects, vous avez probablement une erreur matérielle quelque part. Étant donné que les deux disques indiquent CKSUM countsqu'il peut s'agir du contrôleur, du câble ou de tout matériel partagé entre les deux disques. Il est également possible que les deux disques échouent. En tout état de cause, cela souligne la nécessité d'ajouter une redondance dès que possible et d'inspecter les fichiers indiqués pour détecter la corruption.
bahamat

OP ne semble pas avoir de redondance; le vdev a 56 erreurs CKSUM et le pool a 28 erreurs CKSUM. Je ne sais donc pas à quoi vous faisiez référence par "les deux disques" dans votre commentaire précédent. Je suis d'accord avec votre point sur la valeur de la redondance.
un CVn du

Tu as raison. J'ai mal lu le nom du pool comme s'il s'agissait d'un autre disque. Merci d'avoir fait remarquer cela.
bahamat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.