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
.
- Kopieren Sie das Skript in das lokale Override-Verzeichnis
- Patchen Sie das Skript mit einigen zusätzlichen Zeilen, um es auf jedem Array einzeln auszuführen,
mdadm --run
wenn der erste Versuch fehlschlägt. - 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.