Wie starte ich Degraded Software RAID1 unter Debian 8.0.0 beim Booten automatisch?

Wie starte ich Degraded Software RAID1 unter Debian 8.0.0 beim Booten automatisch?

Wenn Sie eine Komponentenfestplatte aus einem Array entfernen, wird sie in eine „Busy Box“-Shell unter „(initramfs)“ verschoben und meldet etwas Ähnliches wie „Root-Gerät kann nicht gemountet werden“, da das RAID1-Array „inaktiv“ wird.

Der Start ist wie folgt möglich:

(initramfs): mdadm --run /dev/md0
(initramfs): exit

danach wird es unter Verwendung des gestarteten RAID1 normal hochgefahren (das Dateisystem befindet sich im RAID1-Array) und fährt normal fort, bis Sie ein anderes Laufwerk entfernen (in diesem Fall wird genau dasselbe passiert).

Google spuckte eine Reihe von Beiträgen über UBUNTU aus, die "BOOT_DEGRADED=true", aber das funktioniert nicht für DEBIAN.

Es gibt auchein Beitrag über die Verwendung von "md-mod.start_dirty_degraded=1" als Boot-Argument für das Kernel-Image. Ich habe versucht, es in der GRUB-Menüoption weiterzugeben, aber ohne Erfolg.

Es könnte gebenetwas, das es erklärt, aber ich bin ein Neuling, was das Verständnis angeht :(

Irgendwelche Ideen?

Antwort1

Das initramfs führt /scripts/local-top/mdadm aus, um RAID zu handhaben. In diesem Skript steht die Anweisung

if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args};
  then
    verbose && log_success_msg "assembled all arrays."
  else
    log_failure_msg "failed to assemble all arrays."
fi

Bei der mit Debian Jessie ausgelieferten Version von mdadm scheint der Parameter --run in Verbindung mit --scan ignoriert zu werden. Laut Manpage soll er alle Arrays aktivieren, auch wenn sie degradiert sind. Stattdessen werden alle degradierten Arrays als „inaktiv“ markiert. Wenn sich das Root-Dateisystem auf einem dieser inaktiven Arrays befindet, wird der Startvorgang angehalten.

Es ist möglich, dieses Skript zu ändern und dann das Initramfs mit dem Befehl neu zu erstellen update-initramfs -u.

  1. Kopieren Sie das Skript in das lokale Override-Verzeichnis
  2. Patchen Sie das Skript mit einigen zusätzlichen Zeilen, um es auf jedem Array einzeln auszuführen, mdadm --runwenn der erste Versuch fehlschlägt.
  3. Aktualisieren Sie das Initramfs.

Die folgenden Befehle führen die vorherigen Schritte aus. Stellen Sie sicher, dass Sie nicht bereits eine Datei /etc/initramfs-tools/scripts/local-top/mdadm haben, bevor Sie sie darüber kopieren.

cd /etc/initramfs-tools/scripts/local-top
cp /usr/share/initramfs-tools/scripts/local-top/mdadm .
patch --verbose --ignore-whitespace <<'EndOfPatch'
--- mdadm
+++ mdadm
@@ -76,7 +76,15 @@
   if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args}; then
     verbose && log_success_msg "assembled all arrays."
   else
-    log_failure_msg "failed to assemble all arrays."
+    log_warning_msg "failed to assemble all arrays...attempting individual starts"
+    for dev in $(cat /proc/mdstat | grep md | cut -d ' ' -f 1); do
+      log_begin_msg "attempting mdadm --run $dev"
+      if $MDADM --run $dev; then
+        verbose && log_success_msg "started $dev"
+      else
+        log_failure_msg "failed to start $dev"
+      fi
+    done
   fi
   verbose && log_end_msg

EndOfPatch
update-initramfs -u

Mit diesem aktualisierten Initramfs ist ein Booten ohne Eingriff möglich, wenn in einem RAID1, das das Root-Dateisystem enthält, ein Laufwerk fehlt.

verwandte Informationen