О Linux без initramfs
Как настроить grub-mkconf для этого?
Одна страница
Распечатать
. Редактировалось 2 раза, последний — #1
Давно хотел избавиться от initramfs в целях ускорения загрузки. Для этого пытался вкомпилировать все необходимое (драйвера SATA и файловой системы) в ядро, а не в модули, но при загрузке все равно получал kernel panic. И только недавно нашел на Linux.Org.Ru объяснение, почему так происходит. Если кратко, то ядро не видит UUID файловой системы, а видит только UUID раздела. И для нормальной загрузки нужно передать root=PARTUUID=значение. (Посмотреть значения для разделов можно с помощью partx --show /dev/sdбуква).
Но дальше вылезла другая проблема. В grub-mkconf вроде бы до сих пор нет штатных средств для того, чтобы генерировать PARTUUID вместо UUID при автоматическом создании grub.conf. Сейчас я это частично решил тем, что прописал в /etc/defaults/grub параметр
GRUB_CMDLINE_LINUX_DEFAULT="quiet root=PARTUUID=мой_ид", и вроде бы даже работает. Но может быть, есть решения лучше?
Но дальше вылезла другая проблема. В grub-mkconf вроде бы до сих пор нет штатных средств для того, чтобы генерировать PARTUUID вместо UUID при автоматическом создании grub.conf. Сейчас я это частично решил тем, что прописал в /etc/defaults/grub параметр
GRUB_CMDLINE_LINUX_DEFAULT="quiet root=PARTUUID=мой_ид", и вроде бы даже работает. Но может быть, есть решения лучше?
Ребята, давайте жить спокойно!
. Редактировалось 3 раза, последний — #2
Решение есть, это можно автоматизировать на уровне скрипта "/etc/grub.d/10_linux", который используется при генерации "grub.cfg".
- В начале файла /etc/grub.d/10_linux есть примерно такой фрагмент кода (возможно в разных дистрибутивах или версиях пакета он будет отличаться):
if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ || uses_abstraction "${GRUB_DEVICE}" lvm; then LINUX_ROOT_DEVICE=${GRUB_DEVICE} else LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} fi
Перед ним добавляем:
if [ "$GRUB_DEVICE" = use_rootfs_partuuid ]; then GRUB_DISABLE_LINUX_UUID=true GRUB_DEVICE=PARTUUID=$(blkid -d -o value -s PARTUUID "$(mount | awk '$3 == "/" { print $1; exit }')") fi
/etc/grub.d/10_linux помечен в пакете, как конфигурационный файл, поэтому его можно смело редактировать, использовать dpkg-divert в этом случае не нужно. - В /etc/default/grub добавляем:
GRUB_DEVICE=use_rootfs_partuuid
Казалось бы, почему бы не создать для этого отдельную опцию? Дело в том, что в скрипте grub-mkconfig, который читает /etc/default/grub и выполняет скрипты из /etc/grub.d, почему-то решили захардкодить экспортируемые из /etc/default/grub переменные, вместо того, чтобы использовать "set -a" для автоматического экспорта объявляемых в /etc/default/grub переменных ("set +a" отменяет это поведение). Из-за этого мы не можем использовать произвольные имена переменных, т.к. для этого придётся править grub-mkconfig и все правки слетят при следующем обновлении пакета (если, конечно, не воспользоваться dpkg-divert). - Выполняем update-grub и проверяем содержимое /boot/grub/grub.cfg, в нём параметры запуска ядра должны иметь примерно такой вид:
linux /boot/vmlinuz-5.0.9 root=PARTUUID=uuid_раздела [параметры_запуска_ядра]…
Одна страница
Распечатать У вас нет прав для отправки сообщений в эту тему.