Wie erzwinge ich, dass mdadm nach der Reparatur von raid6 mit dem Gerät synchronisiert wird, und wie erhält man die Anzahl der Fehler?

1035
Max-Julian Pogner

Die Frage

Nachdem ein Komponentengerät unerwartetes Bit-Flip erlitt und nachdem ein RAID6 repairerfolgreich auf dem RAID-Gerät ausgeführt wurde, wie kann man mdadm zwingen, die Änderungen vom Puffer (?) Auf das Komponentengerät zu synchronisieren?

Und wie überwacht man, wann eine solche Reparatur eintritt?

Die Einrichtung

Zu Testzwecken habe ich folgende Einstellungen vorgenommen (mit bash für eine debian jessie):

sudo -i mkdir testbed cd testbed for i in 1 2 3 4; do dd if=/dev/zero of=disk$i bs=1M count=4 losetup loop$i disk$i done mdadm --create /dev/md/test --level=6 --raid-devices=4 /dev/loop mkfs.vfat /dev/md/test # Note: has easier hexdump than ext mkdir mounted mount /dev/md/test mounted echo "Hello World!" > mounted/message 

Der unerwartete Bit-Flip

Das Testszenario geht davon aus, dass sich einige Bits auf einem der Komponentengeräte ändern, während das RAID-Gerät nicht ausgeführt wird.

umount mounted mdadm --stop /dev/md/test # Note: does show 'H' from 'Hello World!' at position 0x00107a00 hexdump -C /dev/loop1 # manipulate some bits in first component device at 0x00107a00 dd if=/dev/zero bs=1 count=1 seek=1079808 of=/dev/loop1 # Note: now changed to ".ello World!" at position 0x00107a00 hexdump -C /dev/loop1 

Die Reparatur

Starten Sie nun das RAID-Gerät erneut, und versuchen Sie, mdadm zu überzeugen, die fehlerhaften Bits auf dem Komponentengerät zu erkennen und zu reparieren.

Montage und Montage

mdadm --assemble /dev/md/test /dev/loop mount /dev/md/test mounted # dmesg does not show error # hexdump still shows faulty bits 

das wird erwartet.

Lesen der fehlerhaften Sektoren

cat mounted/message # always reads the non-faulty message # nothing in dmesg # no raid6 related message in /var/log/syslog # /sys/block/md127/md/mismatch_cnt == 0 # hexdump still shows faulty bits 

Mittlerweile hätte mdadm die nicht übereinstimmende Prüfsumme erkennen müssen, und durch Mehrheitsentscheidung wurde festgestellt, dass / dev / loop1 fehlerhaft ist. Es gibt jedoch nirgendwo eine Warnung oder Fehlerzählung.

Reparatur einleiten

echo repair > /sys/block/md127/md/sync_action sync # should be completely unrelated for this question # dmesg reports successful resync # /var/log/syslog replicates the dmesg messages # hexdump -C /dev/loop1 still shows faulty bits as 0x00107a00 

Sicherlich hat mdadm die fehlerhaften Bits bereits bemerkt, aber aus irgendeinem Grund hat der reparierte Block nicht zurück auf die Festplatte geschrieben.

müssen das RAID-Gerät stoppen

Es scheint notwendig, das RAID-Gerät anzuhalten (wodurch das Dateisystem vorübergehend nicht verfügbar ist!), um die Synchronisierung des reparierten Blocks zu erzwingen.

umount mounted mdadm --stop /dev/md/test 

endlich zeigt hexdump endlich wieder 'h'. aber kein Hinweis auf fehlerhafte Stücke in dmesg oder syslog oder mismatch_cnt.

1

0 Antworten auf die Frage