F: MDADM mismatch_cnt> 0. Wie kann man feststellen, welche Blöcke nicht übereinstimmen?

12

Okay. Nach einem routinemäßigen Scrub meldet mein MDADM RAID5 mismatch_cnt = 16. Soweit ich weiß, gibt es 16 Blöcke, für die Daten und Parität nicht übereinstimmen, obwohl kein Gerät einen Lesefehler gemeldet hat.

Frage 1: Kann man eine Liste dieser Blöcke erhalten?

Frage 2: Unter der Annahme, dass # 1 möglich ist, gibt es eine Möglichkeit zu identifizieren, welche Dateien diesen Blöcken zugeordnet sind, da das zugrunde liegende Dateisystem EXT4 ist?

Ich habe Nearline-Backups und in einer idealen Welt könnte ich einfach das Live-Array mit den Backup-Daten vergleichen, um alle Dateien zu finden, die unbemerkt beschädigt wurden. Die Realität sieht jedoch so aus, dass das Abrufen von 6 TB Sicherungsdaten sowohl unerschwinglich teuer als auch zeitaufwendig wäre. Zu wissen, wo sie suchen und was sie wiederherstellen müssen, würde die Dinge erheblich vereinfachen.

(Ich sollte beachten, dass ich das RAID-Scrub nur mit der Option 'check' ausführe. Das Ausführen des Scrub mit der Option 'repair' scheint furchtbar gefährlich zu sein, da MDADM nur weiß, dass entweder die Daten oder die Parität falsch sind, aber nicht weiß, welche. Es scheint also eine 50-prozentige Wahrscheinlichkeit zu bestehen, dass MDADM falsche Daten errät und diese rekonstruiert. Daher möchte ich wissen, welche Dateien möglicherweise betroffen sind, damit ich sie bei Bedarf aus dem Backup wiederherstellen kann.

Anregungen sehr geschätzt!

arcasinky
quelle
check dmesgoder / var / log / syslog?
Psusi
Hallo. Soweit ich das beurteilen kann, waren die einzigen Nachrichten, die vom Scrubber in Syslog protokolliert wurden, die Start- und Stoppnachrichten. Es wurden keine Meldungen bezüglich Nichtübereinstimmungen protokolliert.
Arcasinky
Siehe icheck+ ncheckin debugfszum Identifizieren von Dateien basierend auf dem Sektorversatz.
sch
Ich habe versucht, die Protokollierung für die Sektornummer hinzuzufügen. Jetzt versuche ich herauszufinden, was als nächstes zu tun ist: unix.stackexchange.com/questions/266432/…
Peter Cordes
2
Ich weiß, nichts sagt, dass Festplatten schlecht sind, aber überprüfen Sie sie. Verwenden Sie dazu das smartmontools-Paket für jede Festplatte (wie in smartctl -a /dev/sdausw.) oder verwenden Sie eine andere Methode, um einen kurzen SMART-Test für jede Festplatte durchzuführen und einen vollständigen Bericht zu drucken. Es ist sehr wahrscheinlich, dass einer von ihnen im Sterben liegt, und es ist äußerst schlimm, einen allgemeinen SMART-Gesundheitsalarm auszulösen.
Spooler

Antworten:

1

Entschuldigung, 'check' schreibt tatsächlich zurück in das Array, wenn ein Fehler auftritt - siehe https://www.apt-browse.org/browse/ubuntu/trusty/main/amd64/mdadm/3.2.5-5ubuntu4/file /usr/share/doc/mdadm/README.checkarray

'check' ist eine schreibgeschützte Operation, auch wenn die Kernel-Protokolle möglicherweise etwas anderes vorschlagen (z. B. / proc / mdstat und mehrere Kernel-Meldungen erwähnen "resync"). Bitte beachten Sie auch Frage 21 der FAQ.

Wenn jedoch während des Lesens ein Lesefehler auftritt, löst die Prüfung die normale Reaktion auf Lesefehler aus, die darin besteht, die "richtigen" Daten zu generieren und zu versuchen, diese auszuschreiben schreiben. Wenn keine Lesefehler vorliegen, ist dies jedoch schreibgeschützt.

... es kann also schon zu spät sein, die gesuchten Daten zu sammeln, sorry.

Längerfristig sollte beachtet werden, dass RAID5 (und 6 und 1) keinen Schutz gegen Bit-Rot haben, was wahrscheinlich die Situation ist, auf die Sie gestoßen sind. Wenn Daten auf einer Disc fehlerhaft sind, können sie nicht feststellen, welche der Daten gut oder schlecht ist. Ich würde vorschlagen, auf ein Dateisystem zu migrieren, das die einzelnen Datenträger wie btrfs oder zfs prüft.

(RAID-5 sollte in neuen Bereitstellungen wirklich nicht verwendet werden - und sollte wirklich nicht verwendet werden, wenn die Kapazität von Raw-Disks jeweils mehr als 2 TB beträgt - siehe http://www.zdnet.com/article/why-raid-5- stoppt-arbeiten-in-2009 / )

Andrew W
quelle