mdadm Ubuntu 12.04 не может собрать RAID6 во время загрузки
Я постараюсь сохранить это коротким.
У меня есть mdadm RAID 6 с 11 дисками. В течение многих лет это "просто работало" при переустановках и тому подобном, без каких-либо проблем. У меня даже не было необходимости настраивать mdadm.conf.
После выпуска 12.04 я больше не могу загружать машину без mdadm, который не может смонтировать массив, а затем бросить меня в оболочку initramfs. При загрузке mdadm берет 7 дисков и запускает их в /dev/md127, что, конечно, не удастся.
При загрузке я останавливаю, собираю все диски как md0, и все снова хорошо.
Вопрос в том, как мне заставить его вести себя даже во время загрузки?
После некоторого тестирования мой текущий mdadm.conf выглядит так: http://pastebin.com/SWx1nCNg
Состояние mdadm во время загрузки: http://pastebin.com/Ua9W3aj4
Обратите внимание, что ниже на вставке выше, это команда, используемая для повторной сборки, которая прекрасно работает.
Помогите?:)
3 ответа
Проблема в том, что /usr/share/initramfs-tools/scripts/mdadm-functions вызывается до инициализации всех дисков.
У меня есть 6 дисков в массиве RAID. 2 из них на борту SATA и 4 на карте mpt2sas (SAS2008).
Очевидно, mdadm пытается инициализировать массив до того, как все 6 дисков были подключены к системе.
Если я редактирую mdadm-функции для этого, все работает (безобразное исправление):
degraded_arrays()
{
sleep 15
mdadm --misc --scan --detail --test >/dev/null 2>&1
return $((! $?))
}
Для меня эта ошибка была введена, когда я обновил с 10.04 LTS до 12.04.1 LTS сегодня!
Итак, после некоторых советов я понял, что проблема в том, что некоторые диски недостаточно быстро распознаются mdadm, поэтому он просто останавливается.
Кто-то предложил добавить rootdelay=30 в качестве параметра ядра, но Ubuntu просто проигнорировал это. Вместо этого я добавил предварительный сценарий initramfs.
echo "sleep 60" > /etc/initramfs-tools/scripts/init-premount;
chmod +x /etc/initramfs-tools/scripts/init-premount;
update-grub;
update-initramfs -u;
И перезагрузка, загрузка занимает минуту дольше, но потом я знаю, что mdadm обнаружил все диски.
Модификация ответов найдена в другом месте, которое работало на меня.
Симптомы, которые я видел:
RAID, который работал нормально в Lucid/10.04, прекратил автоматическую сборку, когда я обновился до Precise/12.04. RAID собирался как /dev/md127 в Precise. В оболочке initramfs следующее исправило проблему и позволило машине загрузиться.
mdadm --stop /dev/md127 mdadm - собрать /dev/md0
Решение, которое сработало:
Убедитесь, что mdadm.conf имеет правильную строку ARRAY. (Тот факт, что я мог собрать /dev/md0 правильно, предполагал, что mdadm.conf был правильным.)
Создайте скрипт в /usr/share/initramfs-tools/scripts/local-top (я назвал его mdfix)
#!/bin/sh
sleep 6
mdadm --stop /dev/md127
sleep 6
mdadm --assemble /dev/md0
затем
chmod +x mdfix
update-grub
update-initramfs -u
update-initramfs может генерировать "нет такого устройства" для /dev/md127. Положите полотенце на голову и не паникуйте.:)
Перезагрузитесь, и вы должны правильно подключить /dev/md0, если немного медленнее, чем раньше. (Сны могут быть не нужны, но лучше, чем потом сожалеть.)