Назад | Перейти на главную страницу

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

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

Его можно запустить с помощью:

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

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

Google выплюнул кучу сообщений об использовании UBUNTU "BOOT_DEGRADED = правда"но это не работает для ДЕБИАНА.

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

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

Любые идеи?

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, содержащем корневую файловую систему, отсутствует диск.