Если извлечь компонентный жесткий диск из массива, он перейдет в оболочку «busy box» в разделе «(initramfs)» с сообщением, похожим на «невозможно смонтировать корневое устройство», поскольку массив RAID1 станет «неактивным».
Запустить его можно с помощью:
(initramfs): mdadm --run /dev/md0
(initramfs): exit
после этого он нормально загружается, используя запущенный RAID1 (файловая система находится на массиве RAID1), и будет продолжать нормально загружаться, пока вы не извлечете другой диск (в этом случае он будет делать то же самое).
Google выдал кучу постов об использовании UBUNTU "BOOT_DEGRADED=истина" но это не работает для DEBIAN.
А также естьпост об использовании "md-mod.start_dirty_degraded=1" как аргумент загрузки для образа ядра. Я пробовал передать его в меню GRUB, но безрезультатно.
Там может бытьчто-то, что это объясняет, но я новичок, чтобы понять :(
Есть идеи?
решение1
Initramfs выполняет /scripts/local-top/mdadm для обработки raid. В этом скрипте есть оператор
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
В версии mdadm, поставляемой с Debian Jessie, параметр --run, похоже, игнорируется при использовании вместе с --scan. Согласно странице руководства, предполагается активировать все массивы, даже если они деградировали. Но вместо этого все массивы, которые деградировали, помечаются как «неактивные». Если корневая файловая система находится на одном из этих неактивных массивов, процесс загрузки останавливается.
Можно изменить этот скрипт, а затем пересобрать initramfs с помощью команды update-initramfs -u
.
- Скопируйте скрипт в локальный каталог переопределения.
- Добавьте в скрипт несколько дополнительных строк, которые будут запускаться
mdadm --run
для каждого массива по отдельности, если первая попытка окажется неудачной. - Обновите initramfs.
Следующие команды выполнят предыдущие шаги. Убедитесь, что у вас еще нет файла /etc/initramfs-tools/scripts/local-top/mdadm, прежде чем копировать его поверх него.
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
Благодаря обновленной версии initramfs возможна загрузка без вмешательства пользователя, если в RAID1, содержащем корневую файловую систему, отсутствует диск.