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?
Die Frage
Nachdem ein Komponentengerät unerwartetes Bit-Flip erlitt und nachdem ein RAID6 repair
erfolgreich 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.
0 Antworten auf die Frage
Verwandte Probleme
-
16
Wie bleiben iTunes-Bibliotheken synchron?
-
12
Wie kann ich Ordner zwischen mehreren Computern über mein Heimnetzwerk synchronisieren?
-
8
Gibt es Passwort-Manager für iPhone und Windows XP?
-
3
Ist es möglich, eine One-Way-Synchronisation der iPhone-Sprachnachrichten mit einem PC durchzuführen...
-
3
Google-Kontakte und Mac OS X-Adressbuch
-
8
Wie synchronisieren Sie Google Kalender und iCal?
-
3
Kontakte zwischen Mac, Nokia E51 und iPod touch synchronisieren
-
1
Wie können Sie Windows Live Calendar mit einem Windows Mobile Phone synchronisieren?
-
7
Gibt es eine Möglichkeit, Google-Kontakte mit Ihrem iPhone zu synchronisieren?
-
4
Wie synchronisieren Sie GreaseMonkey-Skripts zwischen Computern?