grub, самосборное ядро и rootfs по uuid
Итак, ядро у меня собранное самостоятельно (без genkernel). Запускалось по
title Gentoo root (hd0,0) kernel /boot/kernel root=/dev/sda2
Захотелось мне сделать загрузку по UUID. Естественно, сделал
kernel /boot/kernel root=UUID=rootuuid
где rootuuid - uuid вон того /dev/sda2
Разумеется, система не загрузилась ;) То есть, загрузилось ядро, определило все оборудование, но при переходе к корневому разделу система падала. Весьма естественно, если перед этим почитать этот мануал. Параметр root просто не поддерживает такой фичи, как root. Чисто наугад мне удалось с первого же раза подобрать параметр real_root, который прекрасно заработал с UUID.
Теперь же хочется понять, что он делает (в интернете материалов по этому так и не нашел). Помнится, он использовался при genkernel'ом ядре, но тогда корневая ФС грузилась сначала с initrd, но ядро получало опцию real_root, то есть "мол, настоящий-то корень вот там" и благополучно загружало систему. Но что означает эта опция здесь - для меня пока загадка. Правда, есть идея, что за первый корень загрузчик считает тот раздел, где лежит ядро.
Кто-нибудь может прокомментировать написанное?
- Для комментирования войдите или зарегистрируйтесь
UUID && kernel
Я тоже задавался как-то этим вопросом...
Вышел из ситуации путём создания образа initramfs с включенным в него "mini-udev"
Где-то на просторах gentoo-wiki есть статья про создание "самостийного" initramfs.
Ссылку дать не могу - не помню :)
Спасибо, не надо, я же
Спасибо, не надо, я же написал: все работает лишь с
только хочется понять, почему это работает и как.
А по label оно умеет?:)
А по label оно умеет?:)
да
да
Альтернативное решение
Вопрос не стоит как реальзовать, но решил привести еще одно решение:
пока все работает
Хорошее решение, причем можно
Хорошее решение, причем можно было до него догадаться, а я-то не сообразил.
Теперь хочется, понять, чем лучше тот или иной вариант. *Ушел читать искать документацию*
UPD Интересно, а откуда берется файловая система устройств /dev на этапе загрузки ядра до инициализации корневой ФС? Ведь она формируется с помощью udev, как я понимаю, а это программа, которую нужно прочесть с корневой ФС.
# genkernel --no-clean
# genkernel --no-clean --disklabel initrd
# less /usr/share/genkernel/modules/README ; genkernel --help
# genkernel --integrated-initramfs --disklabel --lvm2 all
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Цитата: Но что означает эта
загруженому ядру пофиг где оно лежит! ему важно тока знать, где находятся его модули и программа init;-) для этого мы и указываем параметр root.
real_root нужен только тогда, когда необходимо решить задачу типа unzip.zip (проблема яйца и курицы). Такое возникает при использовании initramfs. Например: корень находится на разделе с файловой системой ext3, а поддержка этой файловой системы вынесена в модуль. Тогда необходимый модуль помещается в cpio архив и монтируется в качестве корня, после определения файловой системы рельного корня вступает в силу параметр real_root и корень перемонтируется. Далее всё как обычно.
почему root по UUID не монтируется, а real_root монтируется мне, честно говоря, не понятно пока, ибо
говорит, что в документации к ядру про эту опцию ни слова. Однако среди результатов поиска гугля заметил, что между вашими параметрами и паракметрами у других есть одно отличие: там везде udev дописывают к параметрам ядра. Думаю, что стоит попробовать ;-)
Все прекрасно работает и так,
Все прекрасно работает и так, без udev. Проверил список процессов - udev daemon запущен, все в порядке. Да и никаких проблем не замечал.
Интуиция мне подсказывает, что раз опция noudev запрещает udev, то udev должна его принудительно запускать, а у меня это и так происходит.
Пробовать пока не буду, потому что это дело работает на серваке, который находится примерно в 250 км от меня, и мне что-то не хочется экспериментировать ;) (хотя о fallback знаю).