Как автоматически запустить Degraded Software RAID1 под Debian 8.0.0 при загрузке?

Если вы удаляете компонентный жесткий диск из массива, он попадает в "занятую коробку" в разделе "(initramfs)", говоря что-то похожее на "не удается смонтировать корневое устройство", так как массив RAID1 становится "неактивным".

Можно запустить его используя:

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

после этого он нормально загружается с использованием запущенного RAID1(файловая система находится в массиве RAID1) и будет продолжать загрузку до тех пор, пока вы не удалите другой диск (в этом случае он будет делать то же самое).

Google выкладывает кучу сообщений о UBUNTU, используя "BOOT_DEGRADED = true", но это не работает для DEBIAN.

Также есть пост об использовании "md-mod.start_dirty_degraded = 1" в качестве аргумента загрузки образа ядра. Я попытался передать его в опции меню GRUB, но безрезультатно.

Там может быть что-то, что объясняет это, но я новичок, чтобы понять:(

Есть идеи?

1 ответ

Initramfs выполняет / scripts / local-top / mdadm для обработки рейда. В этом сценарии есть утверждение

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,

  1. Скопируйте скрипт в локальный каталог переопределения
  2. Запустите скрипт с некоторыми дополнительными строками для запуска mdadm --run на каждый массив отдельно, если первая попытка не удалась.
  3. Обновите 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, содержащем корневую файловую систему, отсутствует диск.

Другие вопросы по тегам