You are on page 1of 17

Руководство по GRUB2

(оригинал http://ubuntuforums.org/showthread.php?t=1195275)

Примечание: Большая часть этой информации была собрана и


размещена на странице сайта поддержки Ubuntu. Страница
поддержки находится здесь:
https://help.ubuntu.com/community/Grub2

1. Введение

Я написал это руководство, чтобы представить некоторые основные


сведения о GRUB2. Он предназначен для пользователей, которые знакомы
с основами редактирования файла конфигурации GRUB (GRUB Legacy)
menu.lst и которым интересно, как оно стало в GRUB 2 (Ver 1.97). Я не
буду рассказывать, как установить или удалить GRUB 2, или как вы
должны преобразовать GRUB в GRUB2.

Startup-Manager поддерживает GRUB 2, но не все настройки. Два


наиболее часто используемых элемента однако имеются: установка
загружаемого по умолчанию ядра или OS и настройка времени ожидания
реакции пользователя. Есть планы по выпуску Startup-Manager 2, который
работает только с GRUB 2, но он (Startup-Manager 2) находится в стадии
разработки. Для просмотра руководства по установке и запуску
StartUpManager, смотрите документацию по StartUpManager или форум:
http://ubuntuforums.org/showthread.php?t=818177

Также отметим, что сам GRUB2 находится в разработке. Официальная


документация на данный момент является ограниченной и тоже еще на
стадии разработки. Это частично является причиной появления данной
инструкции. Более подробная и полная документация, я надеюсь, будет
поступать от разработчиков и добровольцев. Я оставил несколько ссылок
на лучшие источники информации в конце инструкции.

Во-первых, прежде чем продолжить, проверьте версию GRUB, который у


вас установлен. Запуск этой команды должен вывести в ответ версию:
grub-install -v
В ответ оно покажет что-то вроде этого:
Grub-Install (GNU GRUB 1.97 ~ beta2)

2. Отличия GRUB от GRUB2 на первый взгляд

При первой загрузке не будет большой разницы в том, что пользователь


увидит в загрузочном меню. Единственным исключением является чистая
установка Ubuntu 9.10 без установленной другой операционной системы.
В этом случае, GRUB 2 будет загружаться непосредственно в меню входа
в ОС или загрузит ОС без отображения меню входа. Другие важные
различия:
• Нет больше файла /boot/grub/menu.lst. Он был заменен на
/boot/grub/grub.cfg.
• Удерживайте клавишу <shift>, чтобы отобразить меню, скрытое во
время загрузки (ранее это была клавиша <esc>).
• Теперь нет "find /boot/grub/stage1" в командной строке GRUB2. Stage
1.5 также был ликвидирован.
• Основной файл конфигурации меню теперь /boot/grub/grub.cfg. Это
не означает, что его можно редактировать вручную, как раньше,
даже если вы root.
• grub.cfg может быть перезаписан в любое время, если есть
обновление (GRUB2), если вы добавили или удалили ядро, или если
пользователь выполняет команду update-grub.
• Пользователь может использовать свои настройки в файле
/etc/grub.d/40_custom, в котором он может размещать свои
собственные записи. Этот файл не будет перезаписан системой в
дальнейшем.
• Основной конфигурационный файл для изменения настроек
отображения меню на экране /etc/default/grub.
• Есть несколько файлов для настройки меню — это /etc/default/grub,
упомянутый выше, и все файлы в /etc/grub.d/.
• Другие операционные системы, такие как Windows, автоматически
опознаются и добавляются в меню.
• Изменения в файлах конфигурации не вступят в силу до выполнения
команды update-grub.

Примечание:
Для обновления меню GRUB2 в этом руководстве используется
команда sudo update-grub. Update-grub фактически выполняет команду
grub-mkconfig -o /boot/grub/grub.cfg. Эта команда запускает на
выполнение несколько скриптов и помещает результаты выполнения
в /boot/grub/grub.cfg, который определяет вид меню, которое вы видете
на экране во время загрузки. Поскольку разработчики GRUB2 не
намерены удалять команду update-grub, эта команда будет
использоваться для простоты и легкости в использовании.

3. Улучшения

Основные улучшения в GRUB2 по сравнению с оригинальным GRUB


включают в себя следующее:
Новая структура конфигурационного файла
Поддержка скриптов, в том числе условные операторы и функции
Динамическая загрузка модулей
Режим восстановления
Темы
Поддержка графического режима меню загрузки и улучшения
возможностей splash.
Легкость загрузки образов LiveCD в формате ISO непосредственно с
жесткого диска
Поддержка не-x86 платформ (таких, как PowerPC)
Всеобщая поддержка UUID
Улучшение интернационализации, включая поддержку для не-ASCII
символов
4. Загрузка Grub

GRUB 2 загружается до операционной системы. Модульные компоненты


загружаются по мере необходимости. Внешний вид меню как правило
определяется настройками в /etc/default/grub. Смотрите следующую часть
"GRUB2. Файлы и опции" для получения конкретной информации.

Основными параметрами для отображения меню являются:


Первоначальные значения по умолчанию:
GRUB2 будет загружаться прямо в операционную систему по умолчанию,
если не обнаружено другой операционной системы. Меню GRUB2 не
будет отображаться. Если обнаружена другая операционная система,
GRUB2 отобразит меню.
Время отображения:
По умолчанию интервал составляет 10 секунд. Если пользователь не
сделал иной выбор, GRUB2 загрузит ОС по умолчанию. Отсчет можно
остановить, нажав любую клавишу. Затем пользователь должен сделать
выбор вручную.
ОС по умолчанию задается в строке DEFAULT= в файле /etc/default/grub.
Нумерация с нуля (т. е. первая в списке ОС для GRUB2 задается нулем,
вторая 1 и так далее)
Скрытие меню:
Пользователь может прервать процесс загрузки и отобразить меню,
удерживая клавишу <shift>. GRUB2 отслеживает нажатие клавиши
<shift> во время загрузки. Если клавиша нажата или GRUB2 не может
определить состояние клавиши, то меню отображается.
Время задержки перед загрузкой ОС при скрытом меню, но при этом
доступное для отображения меню, определяется настройкой в
/etc/default/grub.
Для обеспечения наглядности, время, оставшееся до загрузки ОС может
быть показано на экране.
По окончании тайм-аута, ОС по умолчанию, определенная в
/etc/default/grub будет загружена.
Опция «saved»:
Если в настройках установлена опция DEFAULT=saved, то последнее
успешно загруженное ядро запомнится и будет впредь запускается, если
вручную не будет указано иное.

5. GRUB2. Файлы и опции

Многие файлы в каталоге /boot/grub не будет узнаны пользователями


GRUB Legacy. Особенно заметны множество .mod файлов. GRUB2
является модульным и эти файлы загружаются по мере необходимости
загрузчиком GRUB2.

Изменяемые пользователем настройки GRUB2 находятся главным


образом в /etc/default/grub и в файлах в каталоге /etc/grub.d/. Результаты
выполнения команды update-grub записываются в файл
/boot/grub/grub.cfg.
Файл /boot/grub/grub.cfg
Это основной файл конфигурации GRUB2. Он заменил файл
/boot/grub/menu.lst. Этот файл содержит информацию меню GRUB2, но в
отличие от файла menu.lst, grub.cfg не должен редактироваться
вручную!!!.
grub.cfg является автоматически генерируемым файлом при выполнении
update-grub:
Каждый раздел (обозначаемый вот так «# # # BEGIN») четко определен и
ссылается на файл в каталоге /etc/grub.d, из которого была сгенерирована
информация.
grub.cfg обновляется при выполнении команды update-grub2 или update-
grub с привилегиями рута.
По умолчанию и как результат выполения команды update-grub2, этот
файл является read-only. Это согласуется с тем, что файл не должен быть
отредактирован вручную. Если вам нужно отредактировать этот файл,
инструкции приведены в разделе 2.

Примеры grub.cfg, включая Windows и одну запись, добавленную вручную


(41 srcd):

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###


load_env
set default="0"
if [ ${prev_saved_entry} ]; then
saved_entry=${prev_saved_entry}
save_env saved_entry
prev_saved_entry=
save_env prev_saved_entry
fi
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 7ebcfe33-6914-42ec-9d2e-0859f7396925
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640x480
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't
# understand terminal_output
terminal gfxterm
fi
fi
if [ ${recordfail} = 1 ]; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###


menuentry "Ubuntu, Linux 2.6.31-12-generic" {
recordfail=1
save_env recordfail
set quiet=1
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 7ebcfe33-6914-42ec-9d2e-0859f7396933
linux /boot/vmlinuz-2.6.31-12-generic root=UUID=7ebcfe33-6914-42ec-
9d2e-0859f7396933 ro quiet splash
initrd /boot/initrd.img-2.6.31-12-generic
}
menuentry "Ubuntu, Linux 2.6.31-12-generic (recovery mode)" {
recordfail=1
save_env recordfail
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 7ebcfe33-6914-42ec-9d2e-0859f7396933
linux /boot/vmlinuz-2.6.31-12-generic root=UUID=7ebcfe33-6914-42ec-
9d2e-0859f7396933 ro single
initrd /boot/initrd.img-2.6.31-12-generic
}
menuentry "Ubuntu, Linux 2.6.31-11-generic" {
recordfail=1
save_env recordfail
set quiet=1
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 7ebcfe33-6914-42ec-9d2e-0859f7396933
linux /boot/vmlinuz-2.6.31-11-generic root=UUID=7ebcfe33-6914-42ec-
9d2e-0859f7396933 ro quiet splash
initrd /boot/initrd.img-2.6.31-11-generic
}
menuentry "Ubuntu, Linux 2.6.31-11-generic (recovery mode)" {
recordfail=1
save_env recordfail
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 7ebcfe33-6914-42ec-9d2e-0859f7396933
linux /boot/vmlinuz-2.6.31-11-generic root=UUID=7ebcfe33-6914-42ec-
9d2e-0859f7396933 ro single
initrd /boot/initrd.img-2.6.31-11-generic
}
### END /etc/grub.d/10_linux ###

### END /etc/grub.d/20_memtest86+ ###


### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" {
set root=(hd0,1)
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###


menuentry "Jaunty 2.6.28-15-custom" {
saved_entry=${chosen}
save_env saved_entry
set root=(hd0,8)
linux /boot/vmlinuz-2.6.28-15-custom root=UUID=48e03255-22b3-488b-
ae7e-9dbe4e2beac7 ro quiet splash
initrd /boot/initrd.img-2.6.28-15-custom
}
menuentry "SystemRescue" {
saved_entry=${chosen}
save_env saved_entry
set root=(hd0,6)
linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}
### END /etc/grub.d/40_custom ###

Файл /etc/default/grub
Этот файл содержит информацию, ранее содержащуюся в верхней части
menu.lst GRUB Legacy и элементов, содержащихся в конце строки
инициализации ядра. Пункты в этом файле могут быть отредактирован
пользователем с правами администратора (root).
Вот содержимое этого файла:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

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

# Uncomment to disable graphical terminal (grub-pc only)


#GRUB_TERMINAL=console

# The resolution used on graphical terminal


# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to


Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entrys

Примечание: Несколько ошибок все еще существуют в функции


скрытия меню (hidden). Скрытие меню, даже с правильными
настройками времени "Timeout" в файле /etc/default/grub может не
работать так, как описано выше.

GRUB_DEFAULT - Устанавливает номер ОС, загружаемой по умолчанию.


Значение может быть числом или "saved".
GRUB_DEFAULT=0 - загружаться будет первая ОС/ядро в списке меню.
Как и в Grub Legacy, первая запись в grub.cfg нумеруется 0, вторая 1 и т.д.
GRUB_DEFAULT=saved - по умолчанию будет загружена последняя
удачно загруженная ОС/ядро. Если меню отображается во время
загрузки, последний удачный вариант загрузки будет выделен. Если не
предпринять никаких действий, то выбранный вариант будет загружен.

Команда grub-set-default устанавливает значение «menuentry» по


умолчанию. Вы можете быстро изменить загружаемую по умолчанию ОС
или ядро этой командой.
Формат команды sudo grub-set-default X, где Х номер позиции в меню
GRUB2 (начиная с 0 в качестве первой записи) или точное название
строки меню.
Примеры:
sudo grub-set-default 3 или sudo grub-set-default "Ubuntu, Linux
2.6.31-14-generic''.
Чтобы получить номер существующей записи в меню (начиная с 0) или
имя записи, запустите команду grep menuentry /boot/grub/grub.cfg.
GRUB_DEFAULT="xxxx" - точное наименование пункта меню также может
быть использовано. В данном случае, номер строки в меню не будет иметь
значения. Пример: GRUB_DEFAULT = "Ubuntu, Linux 2.6.31-9-generic".
Пример использования опции "saved" в варианте с пользовательским
(самодельным) меню, см. в разделе "Пользовательские записи".

GRUB_TIMEOUT = 5 - без изменений по сравнению с GRUB Legacy. Это


количество секунд до загрузки ОС или ядра, установленных по
умолчанию.
Установка этого значения в -1 заставит показывать меню, пока
пользователь делает выбор.
Для отображения меню при каждой загрузке нужно использовать
значение 1 или выше.
Если меню загрузки было скрыто и загрузка прервана нажатием
клавиши, то счетчик GRUB_TIMEOUT начинает отсчет.
Вы можете выполнить следующие команды для проверки и изменения
значения тайм-аута по умолчанию.

cat /etc/default/grub | grep 'GRUB_TIMEOUT=' # Проверит значение


тайм-аута.
sudo sed 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=T/g' -i
/etc/default/grub # Заменит значение тайм-аута на время T.

GRUB_HIDDEN_TIMEOUT=0
Меню будут скрыты, если символ # присутствует в начале этой строки.
(#GRUB_HIDDEN_TIMEOUT=0).
По умолчанию изначально зависит от присутствия других операционных
систем:
Обнаружена другая ОС: меню будет отображаться. (Линия будет
начинаться с символа #.)
Ни одна другая ОС не обнаружена: меню будет скрыто.
Для целых чисел больше, чем 0, система будет ждать столько секунд,
сколько вы укажете, но при этом меню отображаться не будет.
Если значение равно 0, то меню не будет отображаться. Там не будет
никаких задержек. Даже если этот параметр равен 0, то пользователь все
равно может заставить показать меню, если в процессе загрузки
компьютера будет удерживать клавишу SHIFT.
Во время загрузки, система будет проверять статуса клавиши SHIFT. Если
она не может определить положение клавиши, небольшая задержка
позволит пользователю для отображения меню нажать клавишу Esc.
Если опция включена, заставки, указанные в разделе 05_debian_theme
будут отображаться. Этот параметр скрывает только текст меню.

GRUB_HIDDEN_TIMEOUT_QUIET=
True - никакого счета. Экран будет пустым.
False - счетчик будет отображаться на пустой экран, на протяжении
значения, указанного в опции GRUB_HIDDEN_TIMEOUT.

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`


Определяет описательное название в меню. (Ubuntu, Xubuntu, Debian и
т.д.)

GRUB_CMDLINE_LINUX
Если строка существует, то она импортирует все записи до конца строки
'Linux' в командной строке (в GRUB's Legacy это была строка "kernel") для
нормального режима и режима восстановления. Это похоже на строку
"altoptions" в menu.lst

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Эта строка импортирует все записи до конца строки 'Linux' (в GRUB
Legacy было "kernel"). Записи добавляются в конец строки инициализации
только в нормальном режиме. Это похоже на строку "defoptions" в
menu.lst. Для отображения черного экрана при загрузке с
отображением процесса загрузки в тексте удалите "quiet splash". Для
совмещения splash и вывода текста используйте только "splash". Эта
строка, где помещают и другие инструкции для ядра, такие, как
"ACPI=OFF".

# GRUB_TERMINAL=console
Раскомментируйте чтобы отключить графический терминал (Grub-pc)
# GRUB_DISABLE_LINUX_UUID= True
Раскомментируйте, если вы хотите чтобы GRUB не принимал параметр
root=UUID=xxx для ядра

# GRUB_GFXMODE=640x480
Вы можете добавить эту строку и удалить символ #, чтобы сделать его
активным. Эта запись устанавливает разрешение графического меню.
Она обеспечивает поддержку разрешения графических карт пользователя
(например, 640x480, 800x600, 1280x1024 и т.д.). Этот параметр
применяется только к тексту меню загрузки.
В меню GRUB 2 можно отображать имеющиеся разрешения, набрав "C", а
затем в оболочке GRUB> строку типа vbeinfo

# GRUB_DISABLE_LINUX_RECOVERY=True
Добавить или раскомментировать эту строку, чтобы предотвратить
"Восстановление" Параметры режима ядра появятся в меню. Если вы
хотите задать опцию "Восстановление" только для одного ядра, нужно
будет сделать специальную запись в файле /etc/grub/40_custom.

GRUB_DISABLE_OS_PROBER="True" - включает/выключает проверку


других разделов на наличие операционных систем, включая Windows,
Linux, OSX и Hurd.

Каталог /etc/grub.d/
Файлы в этом каталоге читаются во время исполнения команды update-
grub или update-grub2. Результат обработки помещается в файл
/boot/grub/grub.cfg.

Порядок записи в меню GRUB2 основывается на порядке их имен. Файлы,


с именами начинющимися с цифры запускаются перед теми, имена
которых начинаются с буквы. Порядок запуска файлов определяет
порядок меню в grub.cfg.
Пользовательские записи могут быть добавлены в файл "40_custom" или
во вновь созданный вами файл.

Любой созданный файл должен быть исполняемым, чтобы быть


включенным в файл grub.cfg во время исполнения команды update-grub2.

Перечень файлов в каталоге /etc/grub.d/ :


00_header
05_debian_theme: Определяет фон и цвет текста, темы
10_hurd: Обнаруживает ядра Hurd
10_linux: Обнаруживает ядра Linux, основываясь на результатах команды
"lsb_release"
20_memtest86 +: Если файл /boot/memtest86 +.bin существует, он будет
включен в качестве пункта меню.
30_os-prober: Ищет Linux и ОС на других разделах и включает их в меню.
40_custom: шаблон для добавления пользовательских меню записей,
которые будут вставлены в grub.cfg при выполнении команды update-
grub2. Эти и любые другие пользовательские файлы должны быть
исполняемыми.

6. Добавление записи в меню GRUB2


Пункты меню могут быть добавлены в файл grub.cfg автоматически или
вручную.
Добавление автоматически.
При запуске команды update-grub или update-grub2, GRUB2 выполняет
поиск ядер Linux и других операционных систем. Что и как будет
выполнятся описано в файлах, содержащихся в каталоге /etc/grub.d/.
10_linux ищет установленные ядра Linux на этом же разделе.
30_os-prober ищет другие операционные системы.
Пользовательские записи (файл /etc/grub.d/40_custom).
Записи в grub.cfg можно добавлять вручную путем создания файла в
каталоге /etc/grub.d/.
Имя файла определяет его номер по порядку в меню. Строка меню,
созданная из файла 30_os-prober будет помещена перед строкой меню,
созданной из файла 40_custom, которые в свою очередь будут помещены
перед строкой меню, созданной из файла 50_my, поскольку сортировка
строк в меню идет по имени исходного файла.
Любой созданный файл должен быть исполняемым. Это можно сделать,
выполнив команду sudo chmod + x /etc/grub.d/имя_файла.
При выполнении команды update-grub2 файлы в каталоге /etc/grub.d/
будет прочитаны и результат их обработки будет включен в grub.cfg.

Приведем пример. Этот файл создаст пункт меню для запуска


SystemRescueCD (ранее установленного) из раздела sda10. Папки и файлы
должны быть скопированы в нужное место в соответствии с их
расположением на SystemRescueCD, если вы хотите действительно
использовать эту запись:

#!/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.

echo "Adding SystemRescueCD" >&2


menuentry "System Rescue CD" {
set root=(hd0,10)
linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}

Обратите внимание на новые правила наименований разделов. Разделы


считают от "0", как это было раньше. sda обозначен как "hd0", sdb как
"hd1", и т.д. Однако первом разделе в настоящее время называется sda1.
При таком обозначении номера разделов не начинается с "0". sda5 это
"5".
Строка echo "Adding SystemRescueCD" >&2 не обязательна. Включение
её в файл позволяет этой строке отображаться на экране, когда
выполняется команда update-grub2. Она обеспечивает визуальную
обратную связь, которая скажет нам о том, что запись была найдена и
учтена.

Подсказка: Если вы хотите, чтобы ваши пользовательские записи были в


верхней части меню, создайте новый файл и назовите его "07_xxxx". Так
как файлы в каталоге /etc/grub.d/ читаются последовательно, то строка
меню из "07_custom" будет представлен перед строкой из "10_linux".
Создаваемые файлы не рекомендуется называть на цифру меньшую, чем
06, так как описание темы меню находится в файле 05_debian_theme.
После создания файла, выполните sudo update-grub, а затем проверьте
значение "DEFAULT" в /etc/default/grub. Если оно не указывает на
желаемую строку меню, измените это значение для получения желаемого
результата.

Исключение строки меню memtest86+: Чтобы исключить строку


"memtest86 +" из меню Grub 2, удалите бит исполнения с
/etc/grub.d/20_memtest86 +. Вы можете сделать это из командной строки:
sudo chmod - x /etc/grub.d/20_memtest86+
Исключение строк меню с записями Recovery mode: Файл
/etc/grub.d/10_linux недавно был обновлен и теперь включает проверку
ссылок на режим восстановления. Измените /etc/default/grub и добавьте
или измените эту строку:
GRUB_DISABLE_LINUX_RECOVERY = True

Если у вас старая версия /etc/grub.d/10_linux и выше не работают после


обновления GRUB2, вы можете исключить строки с записями Recovery
mode в меню GRUB2, отредактировав /etc/grub.d/10_linux. Если нет
заявления "if", касающегося recovery mode, закомментируйте (#)
следующие строки (примерно строка 146) в старом файле:

# linux_entry "${OS}, Linux ${version} (recovery mode)" \


# "single ${GRUB_CMDLINE_LINUX}"

Если вы хотите сохранить одну запись с режимом восстановления для


страховки, вы можете добавить ее в файл /etc/grub.d/40_custom. Строка
меню, созданная из него, появится в нижней части меню Grub2.

Создание своего меню: Итак, Вы хотите видеть в меню только то, что вы
написали сами. Вот как это делается:
Выполните команду sudo update-grub, чтобы получить список доступных
ядер.
Скопируйте требуемые записи меню из файла /boot/grub/grub.cfg в
файл /etc/grub.d/40_custom. Запись должна начинается со строки,
начинающиеся "menuentry" и заканчиваться на строку, содержащую ")".
Добавьите любую другую запись, которую вы хотели бы видеть в
загрузочном меню.
Измените название строки "menuentry" по желанию. Не изменяйте строки
после "menuentry". Каждая запись должна начинаться с "menuentry" и
заканчивается ")" в последней строке.
Удалите исполняемый бит с файлов /etc/grub.d/10_linux,
/etc/grub.d/20_memtest86 + и /etc/grub.d/30_os-prober.
Удаление исполняемого бита любого файла в каталоге /etc/grub.d
означает невозможность включить их содержимое в обновленное меню
GRUB2.
sudo chmod - x /etc/grub.d/10_linux /etc/grub.d/20_memtest86+
/etc/grub.d/30_os-prober
sudo update-grub
Обновленный файл /boot/grub/grub.cfg теперь содержит только разделы
"00_header", "05_debian_theme" и "40_custom".

Теперь файл grub.cfg не будет обновляться с добавлением нового ядра.


Чтобы добавить новое ядро, сделайте файл "10_linux" исполняемым,
выполните команду sudo update-grub, чтобы обновить список доступных
ядер, и повторит инструкции, изложенные выше.

Включение опции DEFAULT=save: Для того, чтобы опция


"DEFAULT=save" (при которой GRUB2 загружает последние успешно
используемые опции, опция "DEFAULT=save" должна быть прописана в
/etc/default/grub, а также должен быть изменен файл 40_custom. Пример
такого 40_custom файла:

#! /bin/sh -e

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
. ${libdir}/grub/grub-mkconfig_lib
echo "Adding SystemRescueCD & Custom Kernel" >&2

menuentry "Jaunty 2.6.28-15-custom" {


save_default_entry | sed -e "s/^/\t/"
set root=(hd0,7)
linux /boot/vmlinuz-2.6.28-15-custom root=UUID=12c55255-27b3-
488b-hje7e-9dbe4e2esfg5 ro quiet splash
initrd /boot/initrd.img-2.6.28-15-custom
}

menuentry "SystemRescue" {
save_default_entry | sed -e "s/^/\t/"
set root=(hd0,6)
linux /sysrcd/rescuecd subdir=sysrcd setkmap=us
initrd /sysrcd/initram.igz
}

Добавление ОС Windows вручную (с неисполняемым файлом


/etc/grub.d/30_os-prober)

#! /bin/sh -e

echo "Adding Windows 43_custom" >&2


menuentry "Windows Vista 43_custom" {
insmod ntfs
set root=(hd0,1)
search --no-floppy --fs-uuid --set CFFCFF9EECFF7F49
chainloader +1
}

Не забудьте выполнить команду sudo update-grub после внесения


изменений в файлы из каталога /etc/grub.d/.

Ручное редактирование файла grub.cfg (не


рекомендуется)
Ручное редактирование файла /boot/grub/grub.cfg не поощряется. Файлы,
подлежащие отредактированию — это файлы из каталога /etc/grub.d/ и
файл /etc/default/grub.

Для защиты от случайного редактирования файл grub.cfg имеет флаг


«только для чтения». Даже имея права рута, отредактировать и сохранить
этот файл вы не сможете, пока не измениете статус «только для чтения».
Если вам вдруг нужно отредактировать этот файл:

sudo chmod + w /boot/grub/grub.cfg


gksudo gedit /boot/grub/grub.cfg

Примечание: Файлу возвратится флаг «только для чтения» во время


выполнения команды update-grub.

7. Удаление записей из меню GRUB2


Записи должны удаляться путем редактирования или удаления файлов в
каталоге /etc/grub.d/. Файл /boot/grub/grub.cfg имеет флаг «только для
чтения» и обычно не требуют редактирования.
Автоматическое удаление записей из меню.
Слишком много ядер? Ядра удаленные через Synaptic или командой apt-
get remove будут инициировать автоматическое обновление файла
grub.cfg и не потребуют дополнительных действий от пользователя.
Если вы не уверены в версии ядра, которое вы сейчас используете, в
консоли выполните команду uname -r.
Другие операционные системы (неLinux), которые были удалены, также
будут удалены из меню сразу после выполнения команды sudo update-
grub2.
Чтобы не включать записи из файлов в каталоге /etc/init.d удалите у них
бит исполняемости так, как это было сказано выше.

Пример: Если вы не хотите видеть запись "Memtest86 +", запустите


следующую команду:
sudo chmod -x /etc/grub.d/20_memtest86+
Запустите команду update-grub, чтобы обновить меню.

Удаление записей меню, созданных пользователем.


Чтобы удалить созданные пользователем записи в меню, нужно удалить
созданные пользователем файлы из каталога /etc/grub.d/.
Если пользовательский файл содержит несколько записей, одни записи
могут быть удалены, а другие сохранены.
После того как файл был удален или изменен, выполните комнаду update-
grub2 для обновления файла grub.cfg.

8. GRUB2 Splashimages (фоновые рисунки меню)


Посетите сайт http://members.iinet.net/ ~ herman546/p20/GRUB2%
20Splashimages.html для получения информации по созданию фоновых
изображений для GRUB2.

Или вы можете попробовать сделать так, как показано ниже:


Вручную скопируйте splashimages GRUB2 в каталог /usr/share/images/grub
или установите splashimages grub2 через Synaptic или:

sudo apt-get install grub2-splashimages

Splashimages Grub2 контролируются файлом /etc/grub.d/05_debian_theme.


Откройте этот файл для редактирования:

gksudo gedit /etc/grub.d/05_debian_theme

Найдите следующие строки и отредактируйте выделенное красным,


заменив имя на ваш вариант фонового изображение для GRUB2
(находятся в /usr/share/images/grub):

for i in {/boot/grub,/usr/share/images/grub}/moreblue-orbit-grub.
{png,tga}; do
Примечание: Есть точка (.) после имени файла.

Сохраните файл, а затем обновите grub2:

sudo update-grub2

9. Изменение разрешения экрана меню


Если пользователь желает изменить разрешение экрана GRUB2 при
использовании splashimages, выполните следующие действия:
Установите необходимое разрешение экрана в файле /etc/default/grub
Опция GRUB_GFXMODE= (Например: GRUB_GFXMODE = 800x600)
Если не уверены, что разрешение экрана доступно для GRUB2 их можно
отобразить, введя vbeinfo в командной строке GRUB2. Командная строка
доступна по клавише "С" в момент отображения основного экранного
меню GRUB2.
Выберите изображение того же размера и внесите изменения в файл
/etc/grub.d/05_debian_theme
Название изображения находится в строке, начинающуюся с "for i in
{/boot"
Если изображение не такого размера, то меню будет неверно
позиционировано на экране.
Используйте графический редактор для создания/изменения размера
изображения до необходимого размера.
Выполните команду sudo update-grub для добавления новых параметров в
файл /boot/grub/grub.cfg.

10. Как загрузить Linux в режиме восстановления


(recovery mode), при отсутствии такого пункта в меню
Если у вас GRUB2 настроен на загрузку без отображения меню,
удерживайте клавишу SHIFT, чтобы показать меню. (в GRUB это была
клавиша ESC.)
Нажмите любую клавишу, когда на дисплее отобразится меню. Выберите
пункт меню с необхоимым вам ядром.
Нажмите E.
Перейдите в конец строки, начинающейся на "linux /boot/vmlinuz ....".
Удалите слова "quiet" и/или "splash". Добавьте слово "single" в конец
строки.
Нажмите <CTRL> + <X> для загрузки в меню Recovery.

11. Удаление GRUB2


Удаление GRUB2 лучше производить из консоли/терминала для полного
удаления. Хотя установку и удаление пакетов можно выполнить в
Synaptic, определенные шаги нужно выполнять в терминале.
Откройте терминал: меню Приложения - Стандартные - Терминал.
Сделайте резервные копии основных файлов и каталогов GRUB2:

sudo cp /etc/default/grub /etc/default/grub.old


sudo cp -R /etc/grub.d /etc/grub.d.old
sudo cp -R /boot/grub /boot/grub.old

Удалите GRUB2

sudo apt-get purge grub2 grub-pc

Пользователь будет предупрежден, что система будет загружаться без


установки другого загрузчика.
После удаления пакетов, многие файлы по-прежнему будут находится в
/boot/grub

Установите GRUB 0.97

sudo apt-get install grub

После установки GRUB пользователь должен создать файлы menu.lst и


stage1/stage2.

sudo update-grub

Команда сформирует menu.lst, выберите "Yes" при запросе.


sudo grub-install /dev/sdX
Выберите нужный жесткий диск (sda, sdb и т.д.), это как правило тот
жесткий диск, на котором установлена Ubuntu.
Команда создаст файлы stage1 и stage2 в /boot/grub и записывает
загрузчик в MBR.
Перезагрузитесь.

12. Переустановка GRUB2 с LiveCD


Если вы не можете загрузить GRUB2 и нужно его переустановить, то
сделайте следующее:
Загрузитесь с LiveCD Ubuntu 9.10.
Откройте терминал.
Определите раздел с утановленной ОС - sudo fdisk -l
Если вы не уверены, какой именно раздел системный, выполните команду
df -Th. Ищите правильный размер диска и файловую систему родную для
Linux, типа ext3, ext4, reiserFS.
Смонтируйте системный раздел:
sudo mount /dev/sdXX/ /mnt
Примечание: Вы должны указать номер своего системного раздела,
найденного ранее: sda1, sdb5 и т.д.
Примечание: GRUB2 считает разделы (hd) с "0", а разделы (sdX) с "1"
Только если у вас /boot сделан отдельным разделом:
sudo mount /dev/sdYY /mnt/boot
где sdYY это ваш раздел с /boot.
Примечание: Если у Вас есть другие системные каталоги на отдельных
разделах типа /usr, их также нужно смонтировать.
Монтирование блочных устройств:
sudo mount --bind /dev/ /mnt/dev
Установим смонтированную ФС, как корневую:
sudo chroot /mnt
Переустановка GRUB2:
sudo grub-install /dev/sdX
Примечание: Указывайте правильное устройство - sda, sdb, и т.д., не
указывая номер раздела.
Проверка установки:
sudo grub-install --recheck /dev/sdX
Примечание: Указывайте правильное устройство - sda, sdb, и т.д., не
указывая номер раздела.
Окончание действия команды chroot: <CTRL> + <D>
Отмонтирование блочных устройств:
sudo umount /mnt/dev
Если вы монтировали каталог /boot с отдельного раздела:
sudo umount /mnt/boot
Отмонтирование всего остального:
sudo umount /mnt
Перезагрузитесь.

13. Загрузка с образа LiveCD.iso


Данный раздел находится в разработке.

14. Загрузка из режима восстановления


В строке восстановления GRUB2 rescue> выполните следующие команды,
чтобы предпринять попытку загрузки рабочего ядра:
ls - команда отобразит список устройств и разделов. На основе этой
информации, пользователь должен определить устройство и раздел, на
котором установлена система.
set root=/dev/sdXY - команда установит раздел, как корень, где Х
устройство/диск, номер с 0, а У раздел, начиная с 1. Например: (hd0, 1)
sda1, (hd2, 5) sdc5.
ls /boot - проверка содержимого каталога. Вы должны увидеть несколько
вариантов ядер, файлов initrd и каталог grub. Если не увидели,
используйте команду ls для проверки устройства и попытайтесь найти эти
файлы и папки. При необходимости установите другой раздел, как корень.
insmod /boot/grub/_linux.mod - загрузит модуль Linux. Без этого модуля
загрузки пользователь получит сообщение "Unknown command linux" при
попытке загрузить ядро.
linux /vmlinuz root=/dev/sdXY ro — загрузит ядро Linux. Замените "Х" и
"Y" на корректные значения (пример: sda1). Пользователь увидит
сообщение о загрузке ядра.
initrd /initrd.img - загрузка образа initrd.
boot

15. Обнаруженные проблемы


Если вы обнаружите проблему, вам нужно будет удалить следующие
строки вручную, чтобы GRUB2 загрузился:
recordfail=1
save_env recordfail

Откройте файл /etc/grub.d/10_linux:


gksu gedit /etc/grub.d/10_linux
Найдите следующую секцию и закомментируйте строки, выделенные
красным, поставив в начало строки символ #
linux_entry ()
(
menuentry "$1" {
recordfail=1
save_env recordfail

У вас получится вот так:


linux_entry ()
(
menuentry "$1" {
# recordfail=1
# save_env recordfail

Сохраните файл и выполните в терминале команду: sudo update-grub

Эти две строки больше не появятся при нажатии <Е> в меню Grub 2. Вы
увидите строку "save_env save_entry", но это не должно привести к
невозможности загрузки, если вы успешно загружались в прошлый раз.

Пауза в 10-30 секунд между моментом загрузки Grub2 и


появлением его меню на экране.
Это известный баг в GRUB 2. Он проявляется, если GRUB2 и /boot
находятся на разных разделах. Для решения проблемы выполните
команду:
sudo dpkg-reconfigure grub-pc
Выберите загрузку Grub 2 с того же раздела, где находится /boot. В вашем
BIOS измените порядок загрузки с дисков так, чтобы процесс загрузки
начинался с того устройства, где находится /boot.

You might also like