Ist es möglich, ein RAID-5-Software-Array auf sichere Weise zu verkleinern?

Ist es möglich, ein RAID-5-Software-Array auf sichere Weise zu verkleinern?

Ist es möglich, das Ext4-Dateisystem und das zugrunde liegende RAID-5-Array auf sichere Weise zu verkleinern?

Ich möchte mein 15 TB/6-Laufwerk-RAID-Array verkleinern, das ein ext4-Dateisystem enthält.

Bevor ich das auf einem Live-System mache, habe ich beschlossen, es in einer Testumgebung auszuprobieren. Ich habe ein Skript geschrieben, das den Lebenszyklus von RAID+Dateisystem simuliert (Assemble, MKFS, Resize2FS, Shrink, ...), aber in einigen Fällen beschädigt es das Dateisystem. Das Skript wurde auf zwei verschiedenen Distributionen ausgeführt (eine davon war Centos-8).

Ich habe versucht, die Fehler zu verstehen und sofern ich nichts übersehen habe, weiß mdadm während des RAID-Verkleinerungsprozesses (mdadm --grow) nichts über das Ext4-Dateisystem und es scheint nicht möglich zu sein, diesem Tool dabei zu helfen, sich ordnungsgemäß zu verhalten.

In meinem Szenario ein Skript zum Simulieren eines Prozesses:

  1. wählt eine ZufallszahlAnzahl_Geräte(zwischen 5 und 10) wird gewählt - das bestimmt die Anzahl der Geräte in unserem Testarray
  2. wählt eine ZufallszahlGerätegröße(zwischen 300 und 350) - Größe (in MiB) eines einzelnen Geräts
  3. kreiert und montiert/dev/md0- ein RAID 5-Array (in meinem Fall waren es 0,90 Metadaten) - Größe eines Arrays istArraygröße = ($Anzahl_Geräte-1)*$Gerätegröße
  4. erstellt ext4-Dateisystem auf/dev/md0und montiert es an/Min.
  5. kopiert eine Referenzdatei (in meinem Fall war es eines der Kernel-Images aus /boot)$Anzahl_Gerätemal zu/Min.(um Daten zur Überprüfung der Integrität des Dateisystems zu haben) - das Dateisystem hat etwa 80 % freien Speicherplatz zur Verfügung
  6. Das Dateisystem wird ausgehängt, mit fsck ( e2fsck -f) überprüft, dann verkleinert (entweder resize2fs -Mauf die Mindestgröße oder reisze2fs /dev/md0 {calculated_size}) und erneut mit fsck

  7. Das Skript wartet, bis der Mdadm-Neuaufbauvorgang abgeschlossen ist (indem es /proc/mdstat betrachtet).

  8. Die neue Arraygröße wird berechnet:neue_Array_Größe=($Anzahl_Geräte-2)*$Gerätegröße
  9. Der Festplattenausfall wird simuliert mdadm --manage /dev/md0 --fail /dev/loop3durch mdadm --manage /dev/md0 --remove /dev/loop3
  10. wartet, bis der Umformungsprozess abgeschlossen ist

Sobald der Umformungsprozess abgeschlossen ist, wird /dev/loop3 als entfernt und ein anderes Loop-Gerät (z. B. /dev/loop2) als Ersatz markiert.

  1. Der Prozess ermittelt das Ersatzteil und fügt es erneut einem Array hinzu ( mdadm --manage /dev/md0 --remove /dev/loop2gefolgt von mdadm --manage /dev/md0 --add /dev/loop2)
  2. Skript wartet, bis der RAID-Neuaufbau abgeschlossen ist (beobachtet /proc/mdstat)

In diesem Moment geschieht das Verderben:

  1. Das Dateisystem wird erneut unter /mnt gemountet.
  2. Der MD5-Prüfsummenvergleich zwischen Referenzdatei und Kopien auf einem verkleinerten Dateisystem ist für 1-2 Dateien entweder erfolgreich oder schlägt fehl
  3. Das Dateisystem wird ausgehängt, einem fsck-Vorgang unterzogen ( e2fsck -f), auf das Maximum vergrößert (resize2fs) und erneut einem fsck-Vorgang unterzogen.
  4. Korruption ist immer noch vorhanden

Mache ich etwas falsch oder wird der RAID-5-Verkleinerungsprozess wirklich nicht unterstützt? Oder liegen die Metadaten der Version 0.90 der Grund?

verwandte Informationen