Это абсолютно безопасно, если вы не знаете, как откат видео драйверов до стабильной версии из командной строки, потому что это то, что вы собираетесь делать.
Вот что я почерпнул из info grub и этого урока grub.
Короче говоря, да, если вы измените файл /boot/grub/grub.cfg, загрузчик grub2 будет читать эти изменения и действовать соответственно.
Оговорка заключается в том, что если вы сделаете крошечную опечатку, ваша система не загрузится (хотя сам grub2 будет запущен, и вы можете использовать оболочку grub для загрузки с тремя командами, если знаете, что вы делаете). Поэтому вместо фактического редактирования загрузочной записи внутри grub.cfg, дублируйте ее и укажите новое имя для нового menuentry.If новый загружается правильно, вы можете либо сделать его новым по умолчанию (см. Ниже), либо удалить старый один. Усложнение состоит в том, что по умолчанию, когда Ubuntu подталкивает обновление grub или ядра, он полностью перезаписывает grub.cfg (через скрипт оболочки / usr / sbin / update-grub2). Поэтому, если вы вручную замените grub.cfg на загрузку настраиваемого ядра, эти изменения могут быть перезаписаны.В этом случае, вместо того, чтобы возиться с grub.cfg, добавьте пользовательскую команду меню ядра в конец /etc/grub.d/40_custom и запустите #sudo update-grub2 [!d13 ]
(Это гарантирует, что ваше пользовательское ядро всегда будет находиться в файле grub.cfg grub даже в случае наличия обновлений grub или ядра, продвигаемых Ubuntu).
Вам все равно необходимо убедиться, что ваше ядро загружается по умолчанию. Сделайте это, отредактировав файл / etc / default / grub
Измените строку
GRUB-DEFAULT=0
на
GRUB-DEFAULT='My super duper kernel 3.11.xxx'
, где указанная строка - это именно то, что находится в кавычках для соответствующего пункта в grub.cfg
Возможно, вам придется снова запустить update-grub2.
Все, все готово.
У меня есть следующее ядро и initrd:
vmlinuz-3.11.0-18-generic
initrd.img-3.11.0-18-generic
и вы хотите вместо этого загружать Следующее пользовательское ядро по умолчанию
my_super_duper_kernel_3.11
initrd.img-my_super_duper_kernel_3.11
1) Я просматриваю / boot / grub / grub / cfg для текущей записи. (Обратите внимание: в каждом меню нет много несущественного материала - см. Конец этого сообщения для голых костей).
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os
$menuentry_id_option 'gnulinux-simple-83af7d46-f6f8-4161-b7a4-47c44de0dd5e' {
... stuff deleted for brevity...
#this specifies first hard disk, first partition (i have a separate /boot partition)
set root='hd0,msdos1'
linux /vmlinuz-3.11.0-18-generic root=/dev/mapper/linuxlvm-lvubuntu ro quiet splash $vt_handoff
initrd /initrd.img-3.11.0-18-generic
}
2) Я добавляю элемент меню в / etc /grub.d/40_custom, заменив новое имя меню, образ ядра и initrd:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
#menu entry changed. It can be anything as long as it's unique
menuentry 'my_super_duper_kernel_3.11' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-83af7d46-f6f8-4161-b7a4-47c44de0dd5e' {
set root='hd0,msdos1'
#kernel image here must match the one in /boot
linux /my_super_duper_kernel_3.11 root=/dev/mapper/linuxlvm-lvubuntu ro quiet
splash $vt_handoff
#initrd image, if you use one
initrd /initrd-my_super_duper_kernel_3.11
#don't forget the closing bracket
}
3) запустите #sudo update-grub2
4) перезагрузитесь. вы увидите новое ядро внизу списка загрузчиков.
5) Внесите его по умолчанию, отредактировав строку по умолчанию в / etc / default / grub. Он должен точно соответствовать тому, что вы положили в кавычки в /etc/grub.d/40_custom сразу после menuentry=
GRUB-DEFAULT='My super duper kernel 3.11'
6) Не уверен, если это необходимо, но не повредит повторному запуску ` #sudo update-grub2
Способ вокруг этого `Загрузочный загрузчик называется grub2, но разговорное слово ppl все еще вызывает его grub. Поэтому, если вы обратитесь за помощью в Google, обязательно выполните поиск именно для grub2. Googling просто «grub» принесет некоторую устаревшую информацию о старом загрузчике grub (который все еще используется, но переименован в «grub-legacy»).
Как он знает: Grub2 состоит из крошечной части (boot.img), который установлен (как правило, на MBR вашего диска) и жестко закодировал в нем места на вашем диске файла grub.cfg и больше программного обеспечения (core.img и различные файлы * .mod), которые фактически загрузите ядро Linux. Поэтому boot.img знает, как найти core.img, который, в свою очередь, будет читать grub.cfg
grub.cfg создается сценарием оболочки / usr / sbin / update-grub2. Он выполняет все исполняемые скрипты в /etc/grub.d/ (в алфавитном порядке, поэтому 10_linux выполняется до 40_custom и т. Д.) И отправляет свои выходы в grub.cfg
Как он знает: Если вы не используете нестандартные файловые системы или оборудование, вам потребуется всего несколько строк для загрузки ядра Linux на стандартный ПК с grub. Другой материал для графических экранов заставки, и я не знаю, что еще (было протестировано с помощью раздела ext4 / boot и / in lvm-ext4):
menuentry 'foo' {
set root='hd0,msdos1' #depends on your partitioning scheme
linux /kernel_image root=/dev/mapper/linuxlvm-lvubuntu ro
#root= should be set to whatever /etc/fstab (or the mount command) says for the device that / is mounted on.
#initrd image, if you use one
initrd /initrd-my_super_duper_kernel_3.11
}
Он не знает. Он ищет только определенные файлы (initrd*, vmlinuz*) внутри каталога /boot и записывает файл конфигурации (/boot/grub/grub.cfg). Вы можете обновить этот файл, используя
sudo update-grub2
или
sudo grub2-mkconfig -o /boot/grub/grub.cfg
. Затем на этапе загрузки GRUB просматривает файл и использует информацию, которую он там размещает. Это просто.
Пример вывода:
$ sudo update-grub2 Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.11.0-18-generic Found initrd image: /boot/initrd.img-3.11.0-18-generic Found memtest86+ image: /memtest86+.bin No volume groups found doneЧтобы подробно рассказать о ответе Данателы, в /etc/grub.d/ существуют вспомогательные скрипты grub-mkconfig, которые определяют, где GRUB должен искать ядра (10_linux), и если в него должны быть включены другие операционные системы (30_os-prober выключен, добавив GRUB_DISABLE_OS_PROBER=true в /etc/default/grub).
Вы можете посмотреть код в 10_linux, чтобы получить представление о том, как GRUB «находит» ядра и пытается их включить, или добавьте свой собственный код в 40_custom, что может быть немного затруднительным, поскольку код 10_linux выглядит довольно сложным и непростым для настройки.