Hallo zusammen,

ich habe eine Verständnisfrage zum Ablauf eines MDADM Raid Checks. Nach längerer Zeit hab ich auf meinem RAID-5 mal wieder einen Raid Check angestoßen. Dabei wurden einige "missmatches" festgestellt:

[root@archmedia ~]# cat /sys/block/md0/md/mismatch_cnt
35744

Im journal wurden folgende Meldungen dazu geschrieben:

Mai 23 13:23:28 archmedia kernel: md0: mismatch sector in range 294250096-294250104
Mai 23 13:23:28 archmedia kernel: md0: mismatch sector in range 294250104-294250112
Mai 23 13:23:44 archmedia kernel: handle_parity_checks5: 432 callbacks suppressed
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553672-294553680
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553680-294553688
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553688-294553696
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553696-294553704
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553704-294553712
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553712-294553720
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553720-294553728
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553728-294553736
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553736-294553744
Mai 23 13:23:44 archmedia kernel: md0: mismatch sector in range 294553744-294553752
Mai 23 13:25:01 archmedia kernel: handle_parity_checks5: 586 callbacks suppressed
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456880-302456888
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456888-302456896
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456896-302456904
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456904-302456912
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456912-302456920
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456920-302456928
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456928-302456936
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456936-302456944
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456944-302456952
Mai 23 13:25:01 archmedia kernel: md0: mismatch sector in range 302456952-302456960
Mai 23 13:36:11 archmedia kernel: handle_parity_checks5: 112 callbacks suppressed
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095312-395095320
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095320-395095328
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095328-395095336
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095336-395095344
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095344-395095352
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095352-395095360
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095360-395095368
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095368-395095376
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095376-395095384
Mai 23 13:36:11 archmedia kernel: md0: mismatch sector in range 395095384-395095392
Mai 23 13:37:17 archmedia kernel: handle_parity_checks5: 1097 callbacks suppressed
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400967960-400967968
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400967968-400967976
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400967976-400967984
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400967984-400967992
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400967992-400968000
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400968000-400968008
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400968008-400968016
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400968016-400968024
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400968024-400968032
Mai 23 13:37:17 archmedia kernel: md0: mismatch sector in range 400968032-400968040

Nach meinem Verständnis werden durch den RAID Check die Fehler auch behoben. Woran kann ich erkennen, dass Fehler nicht behoben werden konnten?

Grüße und Dankeschön

Ein Check behebt Lesefehler, aber keine Mismatches. Dafür bräuchtest du ein Repair.

Bei Mismatches hat RAID das Problem, daß es selber nicht weiß, welche Daten richtig und welche falsch sind. Ein Repair wird hier einfach blind die Parität neu schreiben, in der Hoffnung daß dies richtig ist. Dann bekommen Lesezugriffe vor und nach dem Repair die gleichen Daten (da Parität nur im Degraded Mode gelesen wird).

Mismatches werden leider auch durch künftige Schreibzugriffe nicht immer repariert, da die neue Parität anhand der alten Parität berechnet werden kann (Optimierung um zur Paritätberechnung nicht alle Daten von allen anderen Platten einlesen zu müssen). War die Parität vorher falsch ist es nachher immer noch falsch...

Fällt dir eine Platte aus, und du hattest Mismatches, dann bekommst du beim Syncen der neuen Platte die "falschen" Daten. Im Worst Case ist ein RAID mit Mismatches also auch nur ein RAID-0 ohne Redundanz...

Danke dir für die Erklärung

Somit bleibt mir aktuell nichts anderes übrig als das Raid mit "repair" zu bearbeiten...in der Hoffnung dass dies nicht die Daten zerstört.