Grub: загрузиться с USB-ключа, затем продолжить загрузку с SD-карты?

Ответ собран из комментариев:

Вопрос о том, почему sudo bashработал для кого-то, не входящего в группу wheel, был решен путем осознания того, что основной файл конфигурации sudoersвключал в себя дополнительные файлы конфигурации из /etc/sudoers.d(, и один из этих файлов допускал это. произойти ).

И да, #в начале #includeсбивает с толку.

На следующий вопрос о том, как безопасно предоставить права суперпользователя -системным администраторам, ответили, обратившись к старому вопросу «Какой самый безопасный способ получить привилегии root :sudo, su или login? ». Как видно из ответов на этот вопрос, это не совсем прямой вопрос.

Также относится :" Есть ли веская причина запускать sudo su? "

2
01.12.2019, 16:13
2 ответа

GRUB использует процедуры микропрограммы системы (, т. е. BIOS в вашем случае )для всех своих операций ввода-вывода с диском, поэтому, если BIOS не может прочитать SD-карту, GRUB также не сможет этого сделать.

Задачей GRUB является загрузка ядра Linux и файлов initramfs в ОЗУ, а затем передача управления ядру Linux. На этом работа GRUB завершена, и он не будет участвовать ни в каких дальнейших действиях. Все после этого выполняется ядром Linux и любыми драйверами и инструментами, включенными в файл initramfs.

Итак, если ваши initramfs на USB-накопителе содержат драйвер для SD-карты, все, что вам нужно сделать, это отредактировать параметр загрузки root=в этой строке:

linux   /boot/vmlinuz-4.19.0-6-amd64 root=UUID=aaaa-aaaa-a ro  quiet

к этому:

linux   /boot/vmlinuz-4.19.0-6-amd64 root=/dev/mmcblk0p1 ro  quiet

Но это только первый шаг.

Чтобы ваша система также обновляла ваше ядро ​​и/или загрузчик, когда это необходимо, вы должны настроить каталог /bootна USB-накопителе так, чтобы он автоматически монтировался как /bootна ваша система, в основном -SD -карта -. Поскольку на USB-накопителе уже есть каталог /boot, вам может потребоваться настроить /etc/fstabдля подключения USB-накопителя к другому месту и сделать /bootсимволической ссылкой, указывающей на /wherever_the_USB_is_mounted/boot.

Затем запустите grub-mkconfig -o /tmp/test-grub.cfgдля автоматического создания фиктивного тестового файла grub.cfg в /tmp/, сравните его с активным файлом на USB-накопителе и убедитесь, что результат имеет смысл с точки зрения USB-накопителя. Для проверки вы можете переместить файл grub.cfgна USB-накопителе в сторону и заменить его сгенерированным. Если он работает,теперь ваша система должна быть способна обновлять ядро ​​при использовании схемы «загрузка с USB, корневая файловая система на SD». Это должен быть максимально консервативный (минимальный -риск )способ внесения необходимых изменений.

В качестве альтернативы, как только вы загрузили систему с использованием SD в качестве корневой файловой системы, вы можете просто скопировать файлы ядра и initramfs из текущего каталога /bootв корневой каталог USB-накопителя, смонтировать его как /boot, затем переустановите GRUB на USB-накопитель с помощью grub-install. Он должен автоматически -сгенерировать различные пути в новом файле grub.cfg (теперь в корневом каталоге файловой системы USB-накопителя ), чтобы соответствовать новой ситуации. Вы также можете использовать update-initramfs -uдля обновления файла initramfs, чтобы убедиться, что он соответствует новой конфигурации. После тестирования вы можете удалить /boot/bootи другие оставшиеся подкаталоги -установки на основе USB -. Этот метод приводит к более чистой конфигурации, чем максимально консервативный способ, но есть риск сбоя загрузки, если переустановка GRUB на USB не удалась.

Относительно вашего EDIT 2:

  1. How can I tell grub config where the boot folder is for the SD card? Is it possible to specify it in grub.cfg? I've copied all the files from the /dev/mmcblk0p1 partition to /boot/bootsd on the USB key.

grub-mkconfigпросто ожидает найти каталог, содержащий файлы ядра и initramfs в /boot. Ваша работа состоит в том, чтобы организовать все так, чтобы была правильная файловая система/каталог. Если вы сделаете это, любые обновления ядра и initramfs должны автоматически обрабатываться корректно.

Альтернативным решением может быть запись собственной загрузочной записи в /etc/grub.d/40_custom. Затем вы можете использовать любые пути, которые вы хотите -, но вам также придется иметь дело с их обновлением самостоятельно, поскольку стандартный пакет ядра просто установит файл vmlinuz-<version>в /boot, создайте для него сопутствующий файл initramfs в в том же каталоге и запустите grub-mkconfig, чтобы обновить файл конфигурации в стандартном расположении.

  1. How can I set the USB folder /boot/bootsd as /boot for the SD card? Use fstab and a symbolic link?

Точно. Наличие дополнительной папки bootsdнесколько усложняет ситуацию, но это должно быть выполнимо.Запись fstabможет выглядеть примерно так:

UUID=aaaa-aaaa-a /usbkey <filesystem type> defaults 0 2

Это поместит не -путь символической ссылки к папке в /usbkey/boot/bootsd.

Затем вы можете переместить текущий каталог /bootв файловой системе SD и заменить его символической ссылкой:

mv /boot /boot.old
ln -s /usbkey/boot/bootsd /boot

Помните, что когда GRUB говорит о корневой файловой системе для собственных целей GRUB(set root=<something>или search... --set=root...), это означает только корневой каталог любой файловой системы, из которой GRUB собирается загружать файлы. Во время загрузки GRUB не видит единого дерева каталогов Linux :, он в основном просматривает только одну файловую систему за раз.

Для GRUB параметр root=в строке linux <somewhere>/vmlinuz-<version> root=...является просто еще одним параметром загрузки для ядра Linux -, но для ядра и/или сценариев запуска -в файле initramfs это Параметр указывает, какая файловая система используется Linux в качестве корневой файловой системы.

3
27.01.2020, 21:55

Мой случай

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

Xubuntu использует установщик Ubiquity, и во время установки в окне создания разделов я выбрал «Что-то еще», что означает ручное разделение.

  • Я поместил корневой раздел, / , на карту nvme
  • Я поместил загрузочный раздел /boot на SSD, который распознается при загрузке.

Ваше дело

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

  • Поместите корневой раздел / на карту памяти (, видимую как mmcblk0, и ее первый раздел mmcblk0p1, если он подключен через PCI ).
  • Поместите загрузочный раздел /boot на USB-накопитель.

Затем продолжите и дайте установщику выполнить свою работу.

2
27.01.2020, 21:55

Теги

Похожие вопросы