Моя система загружается нормально с этим в моей конфигурации GRUB 2:
linux /bzImage root=/dev/sda2 init=/usr/lib/systemd/systemd ro
Но если я заменю /dev/sda2
на соответствующий UUID:
linux /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e init=/usr/lib/systemd/systemd ro
тогда это терпит неудачу во время загрузки:
kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)
UUID кажется правильным:
# blkid
/dev/sda1: UUID="97ac3744-39de-4d6d-9a81-e3a3ea08a8bb" TYPE="ext2"
/dev/sda2: UUID="666c2eee-193d-42db-a490-4c444342bd4e" TYPE="ext4"
Почему это не работает? Это потому, что я не использую initramfs?
Это x86_64 Gentoo Linux с ядром 3.10.7. Я использую таблицу разделов MBR и таблицу sda
разделов GUID sdb
.
unknown-block(0,0)
выглядит как устройство GRUB для меня. я предполагаю, что GRUB по какой-то причине не может использовать этот UUID.sda1
. Я не показывал эту часть конфига.)init
.Ответы:
Просто чтобы уточнить
UUID
s - единственный надежный способ для ядра идентифицировать жесткие диски. Существует два типа: UUID, который хранится в файловой системе и недоступен ядру во время загрузки, и PARTUUID, который хранится в таблице разделов и доступен во время загрузки. Так что вы должны использоватькак
/dev/sd??
может измениться с устройствами, подключенными / отключенными.Не забудьте извлечь выгоду шестнадцатеричного числа
SSSSSSSS-PP
вы получаете отblkid
!Чем проще в использовании
работать только с тем,
initramfs
который выбирает эти идентификаторы.Так что, если вы используете непустой
initramfs
, вы можете иметь все три! С пустым уinitramfs
вас только естьPARTUUID
.источник
cpio
архив, который распаковывается ядром/
при загрузке. initramfs - это файловая система - она всегда/
монтируется первой и откуда ядро вызываетinit
. Вы можете скомпилировать содержимое в ядро или распаковать его при загрузке - это два варианта.Параметр , который вы должны перейти к загрузке с UUID это
PARTUUID
. Так и должно бытьroot=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e
.Документация объясняет, почему он возвращается с
unknown-block(0,0)
:kernel-parameters.txt :
init / do_mounts.c :
Последний бит в конце говорит, что если он не может понять значение, он возвращает
(0,0)
, следовательно, ваша ошибка.источник
PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e
не работает. Однако я смог использоватьPARTUUID=SSSSSSSS-02
(где SSSSSSSS - это подпись диска NT, отображаемая непосредственно перед сообщением об ошибке).root=UUID
толькоroot=PARTUUID
. Если вы хотите использовать UUID файловой системы, я думаю, вам нужен initramfs, который может обрабатывать монтирование файловых систем с помощью UUID.grub
ботинки вполне довольныroot=UUID
.Это 5-летняя тема. Но все-таки имхо не до конца ответили. Там отсутствует маленький пример. Вот:
В этом примере:
... используя раздел GPT. С MBR (дос раздел) партуиды короче, но процедура такая же ...
получить ПАРТЮУИД с помощью blkid:
/boot/grub/grub.cfg:
/ И т.д. / Fstab /:
Известно, что это работает с lfs8.1 (ядро 4.12.7), но я думаю, что оно должно работать и с большинством других ядер (старые и новые ...)
источник