Как включить деградированную загрузку RAID1 в 16.04LTS?

14

В предыдущих версиях Ubuntu, добавляя BOOT_DEGRADED=trueк /etc/initramfs-tools/conf.d/mdadmпозволяет системе автоматически загружался при корневая файловая система находится на деградированных массиве. Это больше не работает в 16.04 LTS.

Документация ( https://help.ubuntu.com/lts/serverguide/advanced-installation.html ) выглядит устаревшей; sudo dpkg-reconfigure mdadmбольше не просит разрешить ухудшенную загрузку, и bootdegraded=trueаргумент ядра также больше не работает. Система всегда загружается в initramfs при ухудшении массива корневой файловой системы. Оттуда mdadm -IRsпозволяет системе загружаться.

Как включить автоматическую загрузку, когда корневая файловая система находится на поврежденном массиве RAID1 в 16.04LTS?

vdyvp
источник
Фактическая ошибка конфигурации, кажется, исправлена, но документация по-прежнему неверна в соответствии с bugs.launchpad.net/serverguide/+bug/1310162 Насколько я понял, больше нет необходимости в дополнительной конфигурации, чтобы позволить загрузку с деградированным RAID на данный момент (18.04).
Диего

Ответы:

9

Указанная ошибка появляется в mdadm 3.3-2ubuntu7 и исправлена ​​в 3.4-2.

Последний выпуск mdadm для yakkety (16.10) 3.4-4 уже содержит исправление и доступен для 16.10, но не (пока?) Для 16.04LTS.

Таким образом, я обновил mdadm моего 16.04LTS вручную:

wget http://launchpadlibrarian.net/275652884/mdadm_3.4-4_amd64.deb
sudo dpkg -i mdadm_3.4-4_amd64.deb

Чтобы проверить я

  • выключи компьютер
  • отключил один из дисков / ssd
  • Включить компьютер

Наблюдение за консолью: загрузка с деградированного рейд-массива работает !

Ошибка: https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1635049 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784070

Ян Дев
источник
Вы только что решили мои 1 недели поиска ... Спасибо, парень.
Фахад Ахаммед
Эта ошибка - удручающее чтение.
Кевин Лида
1

Кажется, что основной причиной является /usr/share/initramfs-tools/scripts/local-top/mdadmотсутствие скрипта - на Debian-8 он включен в mdadmпакет, но был потерян в том же пакете для Ubuntu-16.04 ;-(

Итак, после того, как я создал его грязную версию и заново создал initramfs- мой тестовый сервер Ubuntu-16.04 LTS смог полностью загрузиться, используя единственный второй жесткий диск из массива RAID1.

#!/bin/sh
# 2016-07-13 andrey@kopeyko.ru - missed mdadm script for Ubuntu-16.04
# see debian8_host:/usr/share/initramfs-tools/scripts/local-top/mdadm for full version

MDADM=/sbin/mdadm 
. /scripts/functions

echo "===>"
cat /proc/mdstat
echo "===>"
log_begin_msg "Assembling all MD arrays"
if $MDADM --assemble --scan --run --auto=yes
then
  log_success_msg "assembled all arrays."
else
  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
      log_success_msg "started $dev"
    else
      log_failure_msg "failed to start $dev"
    fi
  done
fi
log_end_msg
echo "===>"
cat /proc/mdstat
echo "===>"

sleep 5

# TODO: run mdadm --readwrite /dev/mdN
# if array is in 'auto-read-only' mode
Андрей Копейко
источник
1
Вы вставляете этот скрипт, /usr/share/initramfs-tools/scripts/local-top/mdadmа затем устанавливаете с update-initramfs -k all -u. Однако это вызовет предупреждение. отключить предупреждение, поставленное case ${1:-} in prereqs) echo "multipath"; exit 0;; esacперед . /scripts/functionsстрокой.
Кевин Лида
Да, он генерирует предупреждение - но это предупреждение безвредно. Я думаю, что взлом functionsне является хорошей идеей из-за возможных побочных эффектов. Поэтому я просто игнорирую это предупреждение.
Андрей Копейко
0

У меня была такая же проблема с 16.04, массив raid просто отказывался активироваться в своем деградированном режиме.

вот простой обходной путь:

  1. создайте новый файл: / etc / initramfs-tools / scripts / init-premount / delay_mounting (не забудьте установить + x)

добавлять

спать 20 (или любые другие секунды, которые вы предпочитаете)

  1. создайте новый файл: / etc / initramfs-tools / scripts / local-top / mdadm (не забудьте установить + x)

добавить следующее (принудительно запускать массив, если у вас есть / dev / md0, / dev / md1 и / dev / md2)

mdadm - запуск / dev / md0
mdadm - запуск / dev / md1
mdadm --run / dev / md2

тогда

update-initramfs -k all -u , тогда все готово.

Обратите внимание, что для 14.04 требуется только 1), но это не помешает сделать и то, и другое. кроме вы можете увидеть некоторые предупреждающие сообщения, такие как:

mdadm: не удалось запустить массив / dev / md0: устройство или ресурс заняты

что безвредно, так как он говорит только о том, что, поскольку / dev / md0 активен, вы можете написать более умный сценарий, только выполняя --run, когда это необходимо.

Ин-Хун Чен
источник