На моем компьютере установлена Ubuntu 19.04 вместе с Windows 10 и Fedora 29.
В Ubuntu запуск sudo update-grub
дает следующее:
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.0.0-13-generic
Found initrd image: /boot/initrd.img-5.0.0-13-generic
Found linux image: /boot/vmlinuz-4.18.0-18-generic
Found initrd image: /boot/initrd.img-4.18.0-18-generic
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Found Fedora 29 (Workstation Edition) on /dev/mapper/fedora-root
Adding boot menu entry for EFI firmware configuration
done
, который, на мой взгляд, выглядит нормально, он обнаруживает как Windows Boot Manager, так и Fedora 29 и настраивает меню grub, позволяющее мне выбирать между различными операционными системами во время загрузки.
Моя проблема в том, что Fedora требует особой конфигурации для решения некоторых проблем с графическим драйвером. В частности, для этой записи меню grub необходимо добавить параметры rd.driver.blacklist = nouveau modprobe.blacklist = nouveau
.
Я могу исправить это, вручную отредактировав файл /boot/grub/grub.cfg
, но это изменение будет перезаписано при следующем запуске update-grub
, поэтому это не так. хорошее решение. Кроме того, файл /boot/grub/grub.cfg
, который я затем редактирую, начинается с комментария «НЕ РЕДАКТИРУЙТЕ ЭТО ФАЙЛ», что также указывает на то, что мне, возможно, не следует его редактировать.
Мой вопрос: как мне добавить дополнительные параметры загрузки для записи Fedora grub, которая создается при запуске sudo update-grub
в Ubuntu?
В есть несколько параметров. ] / etc / default / grub
файл, который используется update-grub
, например, я могу выбрать там GRUB_TIMEOUT, который работает нормально, но, насколько я знаю, этот файл не позволяет мне указать варианты загрузки для других операционных систем, только для самого Ubuntu.
Чтобы еще больше прояснить, что я имею в виду, автоматически сгенерированный файл /boot/grub/grub.cfg
(созданный update-grub
) содержит раздел, похожий на этот, с указанием как загружается Fedora, если выбран этот параметр меню grub:
menuentry 'Fedora 29 (Workstation Edition) (on /dev/mapper/fedora-root)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-6398dc3c-28e3-4947-ad82-d9defe5d9a28' {
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b00e70c6-820f-4615-b95d-c933eaea0d3f
else
search --no-floppy --fs-uuid --set=root b00e70c6-820f-4615-b95d-c933eaea0d3f
fi
linux /vmlinuz-5.0.9-200.fc29.x86_64 root=/dev/dm-2
initrd /initramfs-5.0.9-200.fc29.x86_64.img
}
и я бы хотел, чтобы приведенное выше выглядело немного иначе, добавив в конце параметры rd.driver.blacklist = nouveau modprobe.blacklist = nouveau
строки, начинающейся с linux
. Есть ли способ указать update-grub
сделать это?
Я видел предложение здесь о редактировании /etc/grub.d/40_custom
], но это решение означает написание всего элемента меню вручную, чтобы оно не могло адаптироваться при изменении версии ядра в Fedora. Автоматически сгенерированная запись меню, созданная с помощью update-grub
, имеет то преимущество, что она дает последнее ядро Fedora, я хотел бы использовать ее и просто добавить что-нибудь в строку «linux» внутри автоматически сгенерированной статьи меню.Можно ли это сделать, и если да, то как?
Вот мое неэлегантное решение.
Откройте /etc/grub.d/30_os-prober
для редактирования.
Найдите строку, в которой определено LPARAMS
, и измените ее значение на любое, которое вы хотите добавить в конец строки linux в пункте меню grub. Включите все необходимые параметры (включая корневое значение) с соответствующим интервалом. В качестве меры предосторожности оставьте исходную строку LPARAMS, но закомментируйте.
Запустите update-grub.
Этот процесс добавит ваши дополнения в качестве параметров для каждой запрашиваемой ОС Linux.
Конечно, есть более конкретный способ сделать это, добавив пользовательскую логику в /etc/grub.d/30_os-prober
, но я не знаю, как это сделать.