Как мне настроить grub для загрузки ядра Linux с жесткого диска USB?

17

У меня есть жесткий диск ноутбука во внешнем корпусе, который я использую как большой Pendrive. Для дополнительного поворота я установил Linux на нем, так что я могу загрузить любую машину с моим дистрибутивом по своему выбору (например, для восстановления данных или восстановления системы b0rked или просто с помощью заимствованного ноутбука без разрушения предустановленной Windows). Проблема заключается в том, что в зависимости от конфигурации оборудования жесткий диск USB может быть виден по разным путям. Для конфигурации grub я просто использую (hda0,0)ее относительно устройства, с которого был запущен grub. У меня есть записи UUID в /etc/fstab. Я также указываю rootwaitв параметрах ядра, чтобы она ожидала, пока подсистема USB не успокоится, прежде чем пытаться подключить устройство.

Что я должен передать ядру как root=? В настоящее время загружайтесь с pendrive один раз, проверьте сообщения отладки, чтобы увидеть, какое /dev/sdXустройство было назначено ядру на USB-накопителе, затем перезагрузите и отредактируйте конфигурацию grub. Я не могу ничего изменить на ПК, кроме включения Boot from USB hard driveв BIOS и установки более высокого приоритета, чем на внутренних жестких дисках.

Существуют различные сценарии создания initrd, которые включают поддержку UUID в пути к корневому устройству, к сожалению, родной Gentoo (genkernel) не поддерживает, rootwaitи мне не повезло, пытаясь использовать другие.

Процесс загрузки происходит следующим образом ( он очень похож в Windows ):

  1. BIOS выбирает загрузочное устройство и загружает его MBR (который является grub stage-1).
  2. Grub загружает свою конфигурацию и файлы стадии 2 с устройства, которое он установил root, используя (hd0)для устройства, с которого он был загружен BIOS.
  3. Grub загружает и запускает ядро ​​(все та же нумерация, поэтому я могу использовать (hd0,0)снова).
  4. Ядро инициализирует все встроенные устройства ( rootwaitтеперь это волшебство).
  5. Ядро монтирует раздел, которому он был передан root(это параметр ядра, а не параметр grub).
  6. init.dзапускает процесс загрузки пользовательского пространства, включая монтирование /etc/fstab.

Часть 5 - это то, что доставляет мне проблемы.

skolima
источник

Ответы:

6

Я думаю , что ответ должен быть использовать либо root=LABEL=...илиroot=UUID=...

Но вы указываете, что это не работает для вас. Я бы посоветовал разобраться, есть ли проблемы с действиями вашего initrd.

matli
источник
У меня нет initrd, вот и вся проблема. genkernel не поддерживает опцию «rootwait», а другие не работают с Gentoo.
Сколима
2

Я могу ошибаться или, возможно, просто недопонимать вас, но не является ли выбор загрузочного устройства чем-то, что будет настроено из BIOS компьютера, который вы загружаете?

Я думаю, что это будет вопрос выбора USB-накопителя, на котором GRUB установлен в качестве загрузчика, и выбора дистрибутива, который вы хотите загрузить, из меню GRUB.

Джастин Беннетт
источник
2

Ты можешь использовать:

set root='(hd0,msdos5)'
user40070
источник