Linux: изменить порядок загрузки в GRUB

Автор: | 06/07/2014

linux_logoПришло время старому ноутбуку отправляться к родителям.

Что бы не усложнять им жизнь – было решено заменить загрузку с Ubuntu на Windows, что бы им не пришлось выбирать систему во время запуска.

Настройки порядка загрузки хранятся в файле /boot/grub/grub.cfg, в первых же строках которого большими буквами сказано:

#
# DO NOT EDIT THIS FILE

Потому что этот файл создаётся самой системой во время выполнения команды update-grub на основе файлов:

# ls -1 /etc/grub.d/
00_header
05_debian_theme
10_linux
20_linux_xen
20_memtest86+
30_os-prober
30_uefi-firmware
40_custom
41_custom
README

И файла /etc/default/grub, в котором мы и будем менять значение порядка загрузки.

Перед изменениями – делаем резервную копию:

# cp /etc/default/grub /etc/default/grub.bkp

Выглядит файл по-умолчанию так:

# cat /etc/default/grub | grep -v ‘#’

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Строка GRUB_DEFAULT может иметь значение либо числовое (0, 1 и т.д.), либо буквенное – saved.

GRUB_DEFAULT=0 будет загружать первую систему, описанную в файле /boot/grub/grub.cfg, в блоках menuentry.

Тут стоит обратить внимание на строку submenu в файле /boot/grub/grub.cfg – нам нужны номера, не входящие в неё, поэтому строку  submenu мы учитываем как “индекс 1“.

Проще всего во время загрузки GRUB просто посчитать порядковый номер системы, либо – просмотреть файл /boot/grub/grub.cfg в текстовом редакторе, в котором будет чётко видно разделение на “главные” пункты меню, и его “подменю”.

Давайте посмотрим так:

Индекс “ноль” в меню:

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d2a29853-1358-4ba6-949a-768bd15af746' {
recordfail

Индекс 1

submenu 'Дополнительные параметры для Ubuntu'

Второй:

menuentry 'Memory test (memtest86+)'

Третий:

menuentry 'Memory test (memtest86+, serial console 115200)'

И четвёртый:

menuentry 'Windows 7 (loader)

Тут под номером 0 будет считаться строка menuentry 'Ubuntu, with Linux 3.13.0-24-generic (первая в подменю), а Windows 7 (loader) – по счёту будет 4.

Вариант номер за – изменить строку GRUB_DEFAULT= вручную, прямо в файле, и указать номер системы для загрузки.

Либо, вместо номера, указать полное имя:

GRUB_DEFAULT="'Windows 7 (loader) (на /dev/sda1)"

Другой вариант – изменить GRUB_DEFAULT на GRUB_DEFAULT=saved, после чего выполнить:

# grub-set-default 4

Этим мы указываем две вещи:

а) GRUB_DEFAULT=savedGRUB будет загружать ту систему, которая была загружена последней;

б) такой системой мы устанавливаем запись №4, т.е. – Windows 7 (loader).

При чём второй пункт выполнять необязательно – достаточно будет 1 раз выбрать систему во время загрузки – и она будет сохранена как “система по-умолчанию”.

Так же, вместо указания “индекса” системы – можно указать полное её полное “имя”:

# grub-set-default "'Windows 7 (loader) (на /dev/sda1)"

После чего выполнить:

# update-grub
Generating grub configuration file ...
Найден образ linux: /boot/vmlinuz-3.13.0-24-generic
Найден образ initrd: /boot/initrd.img-3.13.0-24-generic
Найден образ linux: /boot/vmlinuz-3.5.0-46-generic
Найден образ initrd: /boot/initrd.img-3.5.0-46-generic
Найден образ linux: /boot/vmlinuz-3.5.0-37-generic
Найден образ initrd: /boot/initrd.img-3.5.0-37-generic
Найден образ linux: /boot/vmlinuz-3.5.0-26-generic
Найден образ initrd: /boot/initrd.img-3.5.0-26-generic
Найден образ linux: /boot/vmlinuz-3.5.0-17-generic
Найден образ initrd: /boot/initrd.img-3.5.0-17-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Найден Windows 7 (loader) на /dev/sda1
завершено

Ссылки по теме

http://ubuntologia.ru (+ описание различных опций, русс)

https://ru.wikibooks.org (вообще всё про GRUB2, русс)

https://help.ubuntu.com (настройка подменю, eng)