MD RAID 1 mit externer Bitmap wird nicht vollständig neu synchronisiert

MD RAID 1 mit externer Bitmap wird nicht vollständig neu synchronisiert

Ich habe eine interessante Konfiguration: Dual-Boot-System mit RAID 1, das sowohl unter Windows als auch unter Linux sichtbar sein muss. Die Windows-Installation ist Win 7 Enterprise und die Linux-Installation ist Kubuntu 10.04. Damit das RAID funktioniert, habe ich es mit Windows „Dynamic Disks“ RAID 1 eingerichtet und es unter Linux mit MD ohne persistenten Superblock und einer Schreibabsichts-Bitmap auf einer anderen Partition gestartet. (Ohne diese Bitmap konnte MD nicht wissen, dass das Array synchron war, und würde bei jedem Start des Arrays eine vollständige Neusynchronisierung durchführen.) Das Array ist folgendermaßen zusammengestellt:

mdadm --build /dev/md1 -l 1 -n 2 -b /var/local/md1.bitmap /dev/sdb2 /dev/sdc2

Ich hatte erwartet, dass der Befehl beim ersten Ausführen das Array neu synchronisieren, ein Bitmap ohne schmutzige Chunks ausgeben und alles in Ordnung wäre. Dies war jedoch nicht der Fall: Nach Abschluss der Neusynchronisierung war das Bitmapmeistenssauber, aber etwa 5% schmutzige Blöcke blieben übrig, wie aus

mdadm -X /var/local/md1.bitmap

Ich habe das Dateisystem nicht auf /dev/md1 gemountet oder es auf andere Weise berührt.

Dann habe ich festgestellt, dass das Stoppen und Neustarten des Arrays Folgendes bewirkt:

mdadm --stop /dev/md1
mdadm --build /dev/md1 -l 1 -n 2 -b /var/local/md1.bitmap /dev/sdb2 /dev/sdc2

hat das Bitmap tatsächlich eingelesen, und eine anschließende Neusynchronisierung ging schnell, da die meisten Blöcke als sauber markiert waren. Verwirrend ist, dass diese Neusynchronisierung die Anzahl der schmutzigen Blöcke weiter reduzierte, aber immer noch nicht alle entfernte. Durch wiederholtes Anhalten und Neustarten konnte ich die Anzahl der schmutzigen Blöcke langsam auf etwa 0,6 % senken, wo sie sich dann zu stabilisieren schien.

Irgendwelche Ideen, was die Ursache sein könnte? Für mich riecht es nach einem Race Condition, der dazu führt, dass Blöcke während der Synchronisierung entweder übersprungen oder nicht richtig aus der Bitmap gelöscht werden, aber ich habe wirklich keine Beweise dafür. Es sieht nicht nach Hardwareproblemen aus, da beide Laufwerke neu sind und keine Lesefehler und neu zugewiesene Sektoren aufweisen, die von smartctl -a gemeldet wurden.

Antwort1

Ich hoffe, ich beleidige Sie mit dieser vorschnellen Vermutung nicht, aber haben Sie die /proc/mdstatDatei überwacht, um sicherzustellen, dass --buildder Vorgang abgeschlossen war, bevor Sie sie überprüft haben mdadm -X?

# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      [>....................]  recovery =  1.0% (537088/53246315) finish=203.0min speed=4326K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

Als Zweites muss geprüft werden, ob /var/local ext2/ext3 ist. Zitat von man:

Hinweis: Externe Bitmaps funktionieren nachweislich nur auf ext2 und ext3. Das Speichern von Bitmap-Dateien auf anderen Dateisystemen kann zu schwerwiegenden Problemen führen.

verwandte Informationen