Как md
устройства собираются при загрузке в Ubuntu? Действительно ли /etc/mdadm/mdadm.conf
уместный фактор здесь?
Мой mdadm.conf
звук, и я проверил это, находясь в среде спасательного CD. При запуске mdadm -A --scan
он находит и назначает имена устройств по желанию. mdadm.conf
Содержит AUTO -all
вынимать все автоматизм от сборки массивов.
Что мне нужно сделать, так это уметь автоматически собирать md
устройства, как указано во mdadm.conf
время загрузки, или что при сборке он учитывает super-minor
значение для массива 0,9 и name
(по-видимому <hostname>:<super-minor>
) для массивов 1,2 и делает правильную работу без него mdadm.conf
. Какой кусок головоломки мне не хватает?
У меня следующая проблема. Есть два md
устройства с RAID1 ( md0
и md1
) и одно с RAID6 ( md2
). Я имею в виду их по нужным названиям устройств. md0
имеет версию метаданных 0.9, два других имеют версию 1.2. md0
карты /
и другие две не имеют отношения к загрузке .
Загрузочный диск разделен на GPT. На нем есть клей "BIOS Boot Partition" ( sda1
). grub-install --no-floppy /dev/sda
сообщает об успехе.
md0 == sda3 + sdb3
md1 == sda2 + sdb2
md2 == sdc + sdd + sde + sdf + sdg + sdh
sda1
иsdb1
"BIOS Boot Partition" каждый
GRUB2 доволен /boot/grub/devicemap
я дал , и я добавил part_gpt
, raid
, mdraid09
и ext2
к модулям для предварительной нагрузки в GRUB2.
Поскольку у меня все еще был корневой том в среде аварийного восстановления, я просто смонтировал все, а затем chroot
вставил в него:
mkdir /target
mount /dev/md0 /target
mount -o bind /dev /target/dev
mount -o bind /dev/pts /target/dev/pts
mount -o bind /sys /target/sys
mount -o bind /proc /target/proc
chroot /target /bin/bash
Оттуда я сбрасываю super-minor
на md0
(с метаданными 0,9) и name
на md1
и md2
. Я также проверил, что это работает с помощью mdadm --detail ...
. Помимо этого я настроил /etc/default/grub
, запустить, update-grub
а также grub-install --no-floppy /dev/sda
и grub-install --no-floppy /dev/sdb
.
После этого при загрузке меня всегда закапывают в initramfs
оболочку восстановления, поскольку корневая файловая система не может быть смонтирована. Причина, по- /proc/mdstat
видимому , после проверки заключается в том, что соответствующее md
устройство даже не собирается и не запускается. Не говоря уже о том, что два других диска (метаданные версии 1.2) получают номер устройства где-то в диапазоне 125..127.
Примечание: GRUB2 появляется с загрузочного диска. Так что, по крайней мере, он был вставлен правильно. Проблема заключается в переходе от начальной rootfs
к правильной корневой файловой системе.
/dev/mdX
именно по этой причине. Используйте/dev/md/NAME
вместо этого. Это никогда не изменится./etc/fstab
. Настройка не зависит от имен, я все еще хотел бы, чтобы они были такими;)Not to mention that the other two (meta-data version 1.2) drives receive a device number somewhere in the 125..127 range
. Я не знаю достаточно о том, как Ubuntu собирает тома рейдов, чтобы ответить на большую проблему.Ответы:
Базовый процесс загрузки
надрываться
Существует резервный режим, когда Grub не может прочитать файловую систему - либо потому, что не было достаточно места для встраивания всего этого кода в загрузочную запись, либо потому, что он не знает файловую систему или слои под ней. В этом случае GRUB встраивает список секторов и читает код из них. Это гораздо менее надежно и лучше избегать. Это может даже быть в состоянии сделать ядро и initramfs подобным образом (не уверен).
ядро
Затем ядро берет на себя управление и выполняет основную аппаратную инициализацию. Этот этап довольно быстрый. Затем ядро распаковывает initramfs в tmpfs и ищет
/init
на этом tmpfs. Затем он выполняется (в обычном смысле, ядро работает на этом этапе)/init
. Это, кстати, простой старый скрипт оболочки.Initramfs
Вы можете извлечь initramfs вручную, выполнив что-то вроде
mkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv
.Initramfs отвечает за загрузку всех драйверов, запуск udev и поиск корневой файловой системы. Это шаг, который вам не удался - он не может найти корневую файловую систему, поэтому выручает.
После завершения initramfs она монтирует корневую файловую систему и передает управление в / sbin / init.
Загрузка системы
На данный момент ваш инициатор вступает во владение - я думаю, что Ubuntu в настоящее время использует выскочку.
Что сломано
Я не совсем уверен, что не работает (отчасти, признаюсь, потому что я гораздо лучше знаком с тем, как он работает в Debian, чем с Ubuntu, хотя он похож), но у меня есть пара предложений:
mdadm.conf
. Возможно, вам просто нужно бежать,update-initramfs -u
чтобы исправить это.источник
Ладно, я узнал, что мне не хватает всего лишь одного куска. Эти
initrd
изображения не были обновлены после переделываяmdadm.conf
.Так что я сделал?
Я загрузился в спасательную систему установочного компакт-диска Ubuntu Server. Выберите выполнить оболочку из среды установщика и не использовать корневую файловую систему. Затем (комментарии с добавлением
#
):Это звучит сложно, но может быть сделано и с
bash
одной строкой (хотя и длинной):Это использует текущие имена
md
устройств и их UUID и создаетdevicemap
для просмотра GRUB2. Таким образом, предполагая, что все было сделано правильно, у вас уже должны быть правильные имена устройств.Далее:
Убедитесь, что он содержит:
если вы настроили свой
/
или/boot
раздел для метаданных версии 1.2, используйтеmdraid1x
вместоmdraid09
.Дальше:
Этот шаг был недостающим звеном . Это, очевидно, гарантирует, что
mdadm.conf
эффект вступает в силу при загрузке.После этого выйдите
chroot
и перезагрузитесь.источник