Grub: различия между версиями

Материал из ALT Linux Wiki
(не показано 16 промежуточных версий 9 участников)
Строка 4: Строка 4:


== Зачем нужен GRUB, если есть LILO/ELILO? ==
== Зачем нужен GRUB, если есть LILO/ELILO? ==
* Поддержка модулей Raid, LVM, файловых систем вкупе с интерактивным интерфейсом позволяют выбрать, что загружать откуда угодно ''' в процессе загрузки ''' (а не установки загрузчика).
* Поддержка модулей Raid, LVM файловых систем вкупе с интерактивным интерфейсом позволяют выбрать, что загружать откуда угодно ''' в процессе загрузки ''' (а не установки загрузчика).
* Возможность multiboot (для загрузки, к примеру, XEN)
* Возможность multiboot (для загрузки, к примеру, XEN)


Строка 11: Строка 11:
Установить дистрибутив с GRUB либо мигрировать загрузчик вручную.
Установить дистрибутив с GRUB либо мигрировать загрузчик вручную.


<source lang=bash>apt-get install grub2
<source lang=bash>apt-get install grub
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
grub-mkconfig -o /boot/grub/grub.cfg</source>
grub-mkconfig -o /boot/grub/grub.cfg</source>
Строка 22: Строка 22:
Для однократного изменения таковых при загрузке GRUB следует:
Для однократного изменения таковых при загрузке GRUB следует:


# нажать "e" при курсоре на цели загрузки, соответствующей используемому экземпляру ALT Linux;
# нажать "e" при курсоре на цели загрузки, соответствующей используемому экземпляру ALT;
# в открывшемся редакторе отыскать строку, начинающуюся с '''linux /boot/vmlinuz''';
# в открывшемся редакторе отыскать строку, начинающуюся с '''linux /boot/vmlinuz''';
# в её конец дописать требуемые параметры, отделив пробелом;
# в её конец дописать требуемые параметры, отделив пробелом;
# нажать F10.
# нажать F10.


 
Если нужно, чтобы эти параметры ядра передавались ядру при каждой загрузке, надо прописать их в {{path|/etc/sysconfig/grub2}} и дать команду {{cmd|update-grub}}; подробнее см. следующий пункт.
Если вам нужно, что-бы эти параметры ядра передавались при загрузке ядру, надо прописать их в /etc/sysconfig/grub и дать команду
 
<source lang=bash>
grub-mkconfig -o /boot/grub/grub.cfg
</source>
 
Например, для нормальной работы ноутбука ASUS вписываем параметры '''acpi_backlight=vendor acpi_osl=Linux''':
 
<source lang=bash>
GRUB_CMDLINE_LINUX_DEFAULT='resume=/dev/disk/by-uuid/a2841b6b-...-094674d1fd26 panic=30 quiet=0 splash acpi_backlight=vendor acpi_osl=Linux'
</source>
 
Подробнее смотри следующий пункт.


== Где отредактировать параметры ядра? ==
== Где отредактировать параметры ядра? ==
Строка 47: Строка 34:
*Параметры ядра содержатся в {{path|/etc/sysconfig/grub2}}
*Параметры ядра содержатся в {{path|/etc/sysconfig/grub2}}
*После редактирования этого файла нужно вызвать {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}}
*После редактирования этого файла нужно вызвать {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}}
<!--
 
* По многочисленным просьбам трудящихся в Сизиф был направлен grub2-1.98-alt22.20100804. http://lists.altlinux.org/pipermail/sisyphus/2011-January/351598.html
-->
В {{path|/etc/sysconfig/grub2}} поддерживаются следующие опции:
В {{path|/etc/sysconfig/grub2}} поддерживаются следующие опции:


  GRUB_AUTOUPDATE_CFG=true/false
  GRUB_AUTOUPDATE_CFG=true/false
обновлять ли конфиг файл из файлтриггера установки/удаления ядер (по умолчанию true)
обновлять ли конфиг файл из файлтриггера установки/удаления ядер (по умолчанию true)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ваш_пукт1 ваш_пункт2"
опции загрузки ядра


  GRUB_AUTOUPDATE_CFGNAME=/boot/grub/grub.cfg
  GRUB_AUTOUPDATE_CFGNAME=/boot/grub/grub.cfg
Строка 70: Строка 58:


== Как выбрать то, что будет загружаться автоматом? ==
== Как выбрать то, что будет загружаться автоматом? ==
''на самом деле этот пункт очень похож на следующий, но на него есть ссылки''
* Выберите нужный вам пункт один раз при загрузке. savedefault должен сохранять ваш выбор на будущее.  
* Выберите нужный вам пункт один раз при загрузке. savedefault должен сохранять ваш выбор на будущее.  
* Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2
* Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2
* NB: в 2.00+ поведение изменилось, теперь дополнительные ядра для того же корня спрятаны в подменю "Advanced options".
* NB: в 2.00+ поведение изменилось, теперь дополнительные ядра для того же корня спрятаны в подменю "Advanced options".
== Как отучить GRUB2 запоминать последний выбранный пункт? ==
Поведение Grub в плане запоминания пунктов зависит от переменных GRUB_DEFAULT и GRUB_SAVEDEFAULT в файле {{path|/etc/sysconfig/grub2}}. GRUB_DEFAULT может содержать пункт меню для загрузки, либо служебное слово 'saved'. В случае, если GRUB_DEFAULT='saved' (в ALT по-умолчанию), загрузка определяется содержимым файла {{path|/boot/grub/grubenv}}: утилита grub-set-default задаёт значение переменной saved_entry, утилита grub-reboot значение переменной next_entry (используется однократно при следующей загрузке, потом очищается). Утилита grub-entries ({{altbug|36048}}) выводит список существующих вариантов (правда неполный с точки зрения допустимых вариантов написания: не выводятся смешанные варианты выбора и выбор на основе ID пунктов меню). В случае, если GRUB_SAVEDEFAULT=true (в ALT по-умолчанию), в пункты меню Grub добавляется команда savedefault, вызывающая изменение переменной saved_entry в файле {{path|/boot/grub/grubenv}}.
=== Способ 1 ===
В файле {{path|/etc/sysconfig/grub2}} изменить значение GRUB_SAVEDEFAULT на false, перегенерировать конфиг grub:
grub-mkconfig -o /boot/grub/grub.cfg
посмотреть имеющийся список вариантов загрузки утилитой grub-entries:
grub-entries
например
0      ALT p8 starter kit
1>0    Advanced options for ALT p8 starter kit>ALT p8 starter kit, vmlinuz
1>1    Advanced options for ALT p8 starter kit>ALT p8 starter kit, vmlinuz (recovery mode)
1>2    Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.14.97-un-def-alt0.M80P.1
1>3    Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.9.154-std-def-alt0.M80P.1
2      Memtest86+-5.01
задать нужный вариант загрузки:
grub-set-default "Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.14.97-un-def-alt0.M80P.1"
или
grub-set-default "1>2"
цифровой вариант лучше не использовать, так как номера строк меню могут измениться, но его вполне можно использовать для указания варианта на следующую перезагрузку утилитой grub-reboot.
=== Способ 2 ===
В файле {{path|/etc/sysconfig/grub2}} изменить строку
  GRUB_DEFAULT='saved'
на
  GRUB_DEFAULT=n
где n номер пункта меню, либо на
  GRUB_DEFAULT='точное название пункта меню'
Вариант с названием предпочтительнее, поскольку после обновления ядра количество пунктов в меню увеличится и нумерация некоторых пунктов изменится.
'''Внимание!''' Нумерация пунктов начинается с 0.
Список пунктов можно получить по команде
grep menuentry /boot/grub/grub.cfg | nl -v0
Например, пусть мы имеем следующие пункты меню (этот пример не учитывает текущее состояние с подменю; оставлено в качестве примера, удобнее использовать grub-entries, как в первом варианте):
# grep menuentry /boot/grub/grub.cfg | nl -v0
0 menuentry "ALT Linux 6.0.1 KDesktop" --class gnu-linux --class gnu --class os {
1 menuentry "ALT Linux 6.0.1 KDesktop (failsafe mode)" --class gnu-linux --class gnu --class os {
2 menuentry "ALT Linux 6.0.1 KDesktop, 3.0.8-std-def-alt0.M60P.1" --class gnu-linux --class gnu --class os {
3 menuentry "Windows Vista (loader) (on /dev/sda1)" --class windows --class os {
4 menuentry "Memtest86+-4.20" {
#
и хотим, чтобы по умолчанию грузился Windows. Тогда в {{path|/etc/sysconfig/grub2}} пишем
  GRUB_DEFAULT='Windows Vista (loader) (on /dev/sda1)'
Потом в терминале от пользователя root:
grub-mkconfig -o /boot/grub/grub.cfg
Перезагрузка. Так как в GRUB_DEFAULT задано конкретное значение, а не 'saved', переменная GRUB_SAVEDEFAULT значения не имеет.


== Как загрузить Xen? ==
== Как загрузить Xen? ==
Строка 89: Строка 122:
== Загрузка Linux и Windows c разных жестких дисков ==
== Загрузка Linux и Windows c разных жестких дисков ==


Grub2 грузится с основного диска на котором Linux, Windows установлен на дополнительный жесткий диск.
Grub грузится с основного диска на котором Linux, Windows установлен на дополнительный жесткий диск.
В 40_custom добавляем:
В 40_custom добавляем:
  menuentry "Windows XP" {
  menuentry "Windows XP" {
Строка 103: Строка 136:


По умолчанию при загрузке любой пользователь может добавить/изменить параметры.
По умолчанию при загрузке любой пользователь может добавить/изменить параметры.
Этого можно избежать, если установить пароль.
Этого можно избежать, если установить пароль. Проще всего сделать это в центре управления системой. Для этого потребуется пакет {{pkg|alterator-grub}} и выполнить следующие действия:
 
*Зайдите в ЦУС ({{cmd|acc}}), перейдите в режим эксперта, и в разделе "Система" откройте "Загрузчик GRUB".
Для ограничения загрузки (как с изменением параметров, так и без) можно добавить в файл {{path|/etc/grub.d/40_custom}} строки:
*Установите флажок "Установить или сбросить пароль" и введите необходимый пароль.
После нажатия на кнопку "Установить" (переконфигурация GRUB происходит автоматически) при запуске системы и попытке либо изменить параметры загрузки (клавиша Е), либо выбрать другой пункт загрузочного меню, будет требоваться логин/пароль. Логин по умолчанию сейчас '''boot''' ({{altbug|33098}})
{{note|Логин/пароль (последний в хэшированном виде) записываются в файл {{path|/etc/grub.d/50_password}}:
<source lang="sh">#!/bin/sh
cat << EOF
set superusers="boot"
password_pbkdf2 boot grub.pbkdf2.sha512.10000.<hash>
EOF</source>}}


Также для ограничения загрузки (как с изменением параметров, так и без) можно добавить в файл {{path|/etc/grub.d/40_custom}} строки:
  set superusers="user"
  set superusers="user"
  password user password
  password user password
{{Attention| В этом случае не забудьте запретить чтение данного файла обычным пользователям (см. {{altbug|33099}}). А лучше всего используйте хэшированные пароли. Для этого следует воспользоваться [http://www.gnu.org/software/grub/manual/grub.html#password_005fpbkdf2 password_pbkdf2] и командой {{cmd|grub-mkpasswd-pbkdf2}}.}}


и в случае дистрибутивов серии 6.0 отключить графику в {{path|/etc/sysconfig/grub}} (см. {{altbug|26198}}):
В случае дистрибутивов серии 6.0 отключить графику в {{path|/etc/sysconfig/grub2}} (см. {{altbug|26198}}):
  GRUB_TERMINAL_OUTPUT='console'
  GRUB_TERMINAL_OUTPUT='console'


Для защиты паролем возможности загрузки именно с изменёнными параметрами придётся [https://bugzilla.novell.com/show_bug.cgi?id=821387#c3 добавить] в переменную <tt>CLASS</tt> в скрипте {{path|/etc/grub.d/10_linux}} опцию <tt>--unrestricted</tt> ('''внимание''': этот скрипт по состоянию на версию 2.00-alt20 входит в пакет grub2-common и ''не'' помечен как <tt>%config</tt>, поэтому будет перезаписан при обновлении!).
Для защиты паролем возможности загрузки именно с изменёнными параметрами придётся [https://bugzilla.novell.com/show_bug.cgi?id=821387#c3 добавить] в переменную <tt>CLASS</tt> в скрипте {{path|/etc/grub.d/10_linux}} опцию <tt>--unrestricted</tt> ('''внимание''': этот скрипт по состоянию на версию 2.00-alt20 входит в пакет grub-common и ''не'' помечен как <tt>%config</tt>, поэтому будет перезаписан при обновлении!).
 
Для использования хэшированного пароля следует воспользоваться [http://www.gnu.org/software/grub/manual/grub.html#password_005fpbkdf2 password_pbkdf2] и командой {{cmd|grub-mkpasswd-pbkdf2}}.


После подобных операций следует перегенерировать конфигурацию командой {{cmd|grub2-mkconfig -o /boot/grub/grub.cfg}}
После подобных операций следует перегенерировать конфигурацию командой {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}} (либо {{cmd|grub-mkconfig}}, в зависимости от дистрибутива). В случае использования {{pkg|alterator-grub}} - это не требуется.


== Как переустановить GRUB? ==
== Как переустановить GRUB? ==
Строка 125: Строка 165:
рукой любой live disk. Далее:
рукой любой live disk. Далее:
* Загружаемся с rescue-cd, например [[Rescue|ALT Linux Rescue]]
* Загружаемся с rescue-cd, например [[Rescue|ALT Linux Rescue]]
* Если использован [[Rescue|ALT Linux Rescue]]:
* Если использован [[Rescue|ALT Linux Rescue]]:
<code bash>
  mount-system
  mount-system
  chroot /mnt/system1
  chroot /mnt/system1
</code>
* Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
* Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
<code bash>
  mount /dev/sda2 /mnt  
  mount /dev/sda2 /mnt  
  mount -o bind /dev /mnt/dev
  mount -o bind /dev /mnt/dev
Строка 141: Строка 176:
  mount -o bind /sys /mnt/sys
  mount -o bind /sys /mnt/sys
  chroot /mnt/ /bin/bash
  chroot /mnt/ /bin/bash
</code>
* Скачиваем предыдущую версию пакета:
* Скачиваем предыдущую версию пакета:
http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/10/30/
http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/10/30/
 
* Устанавливаем rpm
* устанавливаем rpm
rpm -Uvh --oldpackage /home/andy/grub2-pc-1.99-alt9.i586.rpm
<code bash>
* Переконфигурируем меню grub
rpm -Uvh --oldpackage /home/andy/grub2-pc-1.99-alt9.i586.rpm
grub-mkconfig -o /boot/grub/grub.cfg
</code>
 
* переконфигурируем меню grub
<code bash>
grub-mkconfig -o /boot/grub/grub.cfg
</code>


После описанного выше, у меня загрузилась операционная система.
После описанного выше, у меня загрузилась операционная система.
Строка 163: Строка 190:


Аналогично предыдущему пункту (см.  также [[Восстановление_загрузочной_записи#grub]]:
Аналогично предыдущему пункту (см.  также [[Восстановление_загрузочной_записи#grub]]:
* Если использован [[Rescue|ALT Linux Rescue]]:
* Если использован [[Rescue|ALT Linux Rescue]]:
<code bash>
  mount-system
  mount-system
  chroot /mnt/system1
  chroot /mnt/system1
</code>
* Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
* Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
<code bash>
  mount /dev/sda2 /mnt  
  mount /dev/sda2 /mnt  
  mount -o bind /dev /mnt/dev
  mount -o bind /dev /mnt/dev
Строка 180: Строка 201:
  mount -o bind /sys /mnt/sys
  mount -o bind /sys /mnt/sys
  chroot /mnt/ /bin/bash
  chroot /mnt/ /bin/bash
</code>


После того как проведены подготовительные действия и сделан сhroot, необходимо выполнить
После того как проведены подготовительные действия и сделан сhroot, необходимо выполнить
Строка 188: Строка 208:
если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi:
если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi:


<code bash>
mount -a # достаточно смонтировать точку монтирования /boot/efi
mount -a # достаточно смонтировать точку монтирования /boot/efi
grub-efi-autoupdate
grub-efi-autoupdate
</code>
 
== Как отучить GRUB2 запоминать последний выбранный пункт? ==
 
В файле ''/etc/sysconfig/grub2'' изменить строку
  GRUB_DEFAULT='saved'
на
  GRUB_DEFAULT=n
где n номер пункта меню, либо на
  GRUB_DEFAULT='точное название пункта меню'
Вариант с названием предпочтительнее, поскольку после обновления ядра количество пунктов в меню увеличится и нумерация некоторых пунктов изменится.
'''Внимание!''' Нумерация пунктов начинается с 0.
Список пунктов можно получить по команде:
grep menuentry /boot/grub/grub.cfg | nl -v0
Например, пусть мы имеем следующие пункты меню
# grep menuentry /boot/grub/grub.cfg | nl -v0
0 menuentry "ALT Linux 6.0.1 KDesktop" --class gnu-linux --class gnu --class os {
1 menuentry "ALT Linux 6.0.1 KDesktop (failsafe mode)" --class gnu-linux --class gnu --class os {
2 menuentry "ALT Linux 6.0.1 KDesktop, 3.0.8-std-def-alt0.M60P.1" --class gnu-linux --class gnu --class os {
3 menuentry "Windows Vista (loader) (on /dev/sda1)" --class windows --class os {
4 menuentry "Memtest86+-4.20" {
#
и хотим, чтобы по умолчанию грузился Windows. Тогда в ''/etc/sysconfig/grub2'' пишем
  GRUB_DEFAULT='Windows Vista (loader) (on /dev/sda1)'
Потом в терминале от пользователя root:
grub-mkconfig -o /boot/grub/grub.cfg
Перезагрузка.


== Что за жалобы про BIOS Boot Partition? ==
== Что за жалобы про BIOS Boot Partition? ==
Строка 223: Строка 215:
При загрузке под PC BIOS используется MBR и небольшая свободная область диска после него (31 килобайт до 63-го сектора) — соответственно первая стадия и core.img; при использовании UEFI ожидается GPT-разбивка загрузочного диска, при которой нет ни MBR, ни этой области. Отсюда возникает необходимость встроить вторую стадию загрузчика куда-то ещё. Таким местом и решили взять определённый в GPT тип раздела BIOS Boot Partition.
При загрузке под PC BIOS используется MBR и небольшая свободная область диска после него (31 килобайт до 63-го сектора) — соответственно первая стадия и core.img; при использовании UEFI ожидается GPT-разбивка загрузочного диска, при которой нет ни MBR, ни этой области. Отсюда возникает необходимость встроить вторую стадию загрузчика куда-то ещё. Таким местом и решили взять определённый в GPT тип раздела BIOS Boot Partition.


Инструмент разбивки дисков в составе инсталятора ALT Linux сделает такой раздел автоматически под UEFI, если разбиваете вручную или большой диск для BIOS — может потребоваться создать раздел минимального объёма (например, мегабайт) с типом «bios boot partition» в терминологии {{pkg|alterator-vm}} либо меткой «bios_grub» в терминологии {{pkg|parted}}.
Инструмент разбивки дисков в составе инсталятора ALT Linux сделает такой раздел автоматически под UEFI, если разбиваете вручную или большой диск для BIOS — может потребоваться создать раздел минимального объёма (RED Hat рекомендует 1 мегабайт) с типом «bios boot partition» в терминологии {{pkg|alterator-vm}} либо меткой «bios_grub» в терминологии {{pkg|parted}}.


См. тж. [http://web.archive.org/web/20100502053927/http://grub.enbug.org/BIOS_Boot_Partition архивную статью].
См. тж. [http://web.archive.org/web/20100502053927/http://grub.enbug.org/BIOS_Boot_Partition архивную статью].
Строка 231: Строка 223:
Если при загрузке, например, Windows 7 часть экрана содержит "шум", возможно, отдалённо напоминающий картинку заставки GRUB -- попробуйте выровнять используемые видеорежимы VESA:
Если при загрузке, например, Windows 7 часть экрана содержит "шум", возможно, отдалённо напоминающий картинку заставки GRUB -- попробуйте выровнять используемые видеорежимы VESA:
* в файле {{path|/etc/sysconfig/grub2}} поменяйте <tt>GRUB_GFXMODE='800x600'</tt> на <tt>GRUB_GFXMODE='640x480'</tt><ref>возможно, понадобится подобрать разрешение, например, <tt>1024x768</tt> -- см. тж. [https://forums.linuxmint.com/viewtopic.php?t=173945#p1046496 здесь] и [http://askubuntu.com/a/613707/106963 здесь]</ref>;
* в файле {{path|/etc/sysconfig/grub2}} поменяйте <tt>GRUB_GFXMODE='800x600'</tt> на <tt>GRUB_GFXMODE='640x480'</tt><ref>возможно, понадобится подобрать разрешение, например, <tt>1024x768</tt> -- см. тж. [https://forums.linuxmint.com/viewtopic.php?t=173945#p1046496 здесь] и [http://askubuntu.com/a/613707/106963 здесь]</ref>;
* выполните команду {{cmd|update-grub}}
* выполните команду {{cmd|update-grub}} или {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}}


Вы можете сделать заставку текстовой, указав <tt>GRUB_GFXMODE='console'</tt>.
Вы можете сделать заставку текстовой, указав <tt>GRUB_GFXMODE='console'</tt>.

Версия от 20:39, 12 февраля 2019

Что такое GRUB?

Wikipedia сообщает "GNU GRUB (англ. GRand Unified Bootloader) — загрузчик операционной системы от проекта GNU. GRUB позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки." GRUB 2

Зачем нужен GRUB, если есть LILO/ELILO?

  • Поддержка модулей Raid, LVM файловых систем вкупе с интерактивным интерфейсом позволяют выбрать, что загружать откуда угодно в процессе загрузки (а не установки загрузчика).
  • Возможность multiboot (для загрузки, к примеру, XEN)

Как установить GRUB?

Установить дистрибутив с GRUB либо мигрировать загрузчик вручную.

apt-get install grub
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
grub-mkconfig -o /boot/grub/grub.cfg

Последний пункт выполняет генерацию конфига GRUB на основе шаблонов/скриптов в /etc/grub.d/. Редактировать полученный конфиг руками не рекомендуется т.к. он будет уничтожен следующей автогенерацией (выполняемой, к примеру, installkernel-ом).

Проверьте содержимое /etc/sysconfig/grub2: если там нет раскомментированной переменной GRUB_AUTOUPDATE_DEVICE (при смене загрузчика вручную не будет, т.к. она добавляется только alterator-grub), добавьте устройство или их список; если root/boot на md raid1, следует задать список дисков, на которых он размещён -- например, не '/dev/md0 ', а '/dev/sdb /dev/sda '. После этого стоит выполнить grub-autoupdate.

Как передать свои параметры загрузки ядра?

Для однократного изменения таковых при загрузке GRUB следует:

  1. нажать "e" при курсоре на цели загрузки, соответствующей используемому экземпляру ALT;
  2. в открывшемся редакторе отыскать строку, начинающуюся с linux /boot/vmlinuz;
  3. в её конец дописать требуемые параметры, отделив пробелом;
  4. нажать F10.

Если нужно, чтобы эти параметры ядра передавались ядру при каждой загрузке, надо прописать их в /etc/sysconfig/grub2 и дать команду update-grub; подробнее см. следующий пункт.

Где отредактировать параметры ядра?

Для постоянного применения иных параметров загрузки следует изменить конфигурацию загрузчика.

  • Параметры ядра содержатся в /etc/sysconfig/grub2
  • После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg

В /etc/sysconfig/grub2 поддерживаются следующие опции:

GRUB_AUTOUPDATE_CFG=true/false

обновлять ли конфиг файл из файлтриггера установки/удаления ядер (по умолчанию true)

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ваш_пукт1 ваш_пункт2"

опции загрузки ядра

GRUB_AUTOUPDATE_CFGNAME=/boot/grub/grub.cfg

имя автообновляемого конфигфайла. (по умолчанию /boot/grub/grub.cfg)

GRUB_VMLINUZ_SYMLINKS=true/false/default

добавлять ли симлинки в меню (добавлять, не добавлять, добавлять только /boot/vmlinuz [по умолчанию])

GRUB_VMLINUZ_FAILSAFE=true/false/default

добавлять ли failsafe-пункты (добавлять, не добавлять, добавлять только для /boot/vmlinuz [по умолчанию])

Как дописать свои собственные пункты меню?

  • Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось - возможно, придумается какой-то новый общий случай.
  • Если вам всё же хочется - допишите то, что считаете нужным в /etc/grub.d/40_custom
    • После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg

Как выбрать то, что будет загружаться автоматом?

на самом деле этот пункт очень похож на следующий, но на него есть ссылки

  • Выберите нужный вам пункт один раз при загрузке. savedefault должен сохранять ваш выбор на будущее.
  • Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2
  • NB: в 2.00+ поведение изменилось, теперь дополнительные ядра для того же корня спрятаны в подменю "Advanced options".

Как отучить GRUB2 запоминать последний выбранный пункт?

Поведение Grub в плане запоминания пунктов зависит от переменных GRUB_DEFAULT и GRUB_SAVEDEFAULT в файле /etc/sysconfig/grub2. GRUB_DEFAULT может содержать пункт меню для загрузки, либо служебное слово 'saved'. В случае, если GRUB_DEFAULT='saved' (в ALT по-умолчанию), загрузка определяется содержимым файла /boot/grub/grubenv: утилита grub-set-default задаёт значение переменной saved_entry, утилита grub-reboot значение переменной next_entry (используется однократно при следующей загрузке, потом очищается). Утилита grub-entries (altbug #36048) выводит список существующих вариантов (правда неполный с точки зрения допустимых вариантов написания: не выводятся смешанные варианты выбора и выбор на основе ID пунктов меню). В случае, если GRUB_SAVEDEFAULT=true (в ALT по-умолчанию), в пункты меню Grub добавляется команда savedefault, вызывающая изменение переменной saved_entry в файле /boot/grub/grubenv.

Способ 1

В файле /etc/sysconfig/grub2 изменить значение GRUB_SAVEDEFAULT на false, перегенерировать конфиг grub:

grub-mkconfig -o /boot/grub/grub.cfg

посмотреть имеющийся список вариантов загрузки утилитой grub-entries:

grub-entries

например

0       ALT p8 starter kit
1>0     Advanced options for ALT p8 starter kit>ALT p8 starter kit, vmlinuz
1>1     Advanced options for ALT p8 starter kit>ALT p8 starter kit, vmlinuz (recovery mode)
1>2     Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.14.97-un-def-alt0.M80P.1
1>3     Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.9.154-std-def-alt0.M80P.1
2       Memtest86+-5.01

задать нужный вариант загрузки:

grub-set-default "Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.14.97-un-def-alt0.M80P.1"

или

grub-set-default "1>2"

цифровой вариант лучше не использовать, так как номера строк меню могут измениться, но его вполне можно использовать для указания варианта на следующую перезагрузку утилитой grub-reboot.

Способ 2

В файле /etc/sysconfig/grub2 изменить строку

 GRUB_DEFAULT='saved'

на

 GRUB_DEFAULT=n

где n номер пункта меню, либо на

 GRUB_DEFAULT='точное название пункта меню'

Вариант с названием предпочтительнее, поскольку после обновления ядра количество пунктов в меню увеличится и нумерация некоторых пунктов изменится. Внимание! Нумерация пунктов начинается с 0. Список пунктов можно получить по команде

grep menuentry /boot/grub/grub.cfg | nl -v0

Например, пусть мы имеем следующие пункты меню (этот пример не учитывает текущее состояние с подменю; оставлено в качестве примера, удобнее использовать grub-entries, как в первом варианте):

# grep menuentry /boot/grub/grub.cfg | nl -v0
0	menuentry "ALT Linux 6.0.1 KDesktop" --class gnu-linux --class gnu --class os {
1	menuentry "ALT Linux 6.0.1 KDesktop (failsafe mode)" --class gnu-linux --class gnu --class os {
2	menuentry "ALT Linux 6.0.1 KDesktop, 3.0.8-std-def-alt0.M60P.1" --class gnu-linux --class gnu --class os {
3	menuentry "Windows Vista (loader) (on /dev/sda1)" --class windows --class os {
4	menuentry "Memtest86+-4.20" {
# 

и хотим, чтобы по умолчанию грузился Windows. Тогда в /etc/sysconfig/grub2 пишем

 GRUB_DEFAULT='Windows Vista (loader) (on /dev/sda1)'

Потом в терминале от пользователя root:

grub-mkconfig -o /boot/grub/grub.cfg

Перезагрузка. Так как в GRUB_DEFAULT задано конкретное значение, а не 'saved', переменная GRUB_SAVEDEFAULT значения не имеет.

Как загрузить Xen?

Xen грузится с помощью multiboot:

  • проверить, что вы используете grub2 >= 1.98-alt11
  • apt-get install xen xen-libs xen-runtime xen-hypervisor
  • запустить grub-mkconfig -o /boot/grub/grub.cfg
  • выбрать соответствующий пункт при загрузке (savedefault запомнит выбор на будущее)

Как включить работу с последовательным портом?

Примерно такими строчками в /etc/sysconfig/grub2:

GRUB_TERMINAL='console serial'
GRUB_SERIAL_COMMAND='serial --unit=0 --speed=115200'

(см. также). Не забываем про grub-mkconfig.

Загрузка Linux и Windows c разных жестких дисков

Grub грузится с основного диска на котором Linux, Windows установлен на дополнительный жесткий диск. В 40_custom добавляем:

menuentry "Windows XP" {
drivemap -s (hd1) ${root}
set root='(hd1)'
chainloader +1
}

Если жестких дисков больше двух, играемся с hdX.

Как установить пароль на редактирование параметров ядра?

По умолчанию при загрузке любой пользователь может добавить/изменить параметры. Этого можно избежать, если установить пароль. Проще всего сделать это в центре управления системой. Для этого потребуется пакет alterator-grub и выполнить следующие действия:

  • Зайдите в ЦУС (acc), перейдите в режим эксперта, и в разделе "Система" откройте "Загрузчик GRUB".
  • Установите флажок "Установить или сбросить пароль" и введите необходимый пароль.

После нажатия на кнопку "Установить" (переконфигурация GRUB происходит автоматически) при запуске системы и попытке либо изменить параметры загрузки (клавиша Е), либо выбрать другой пункт загрузочного меню, будет требоваться логин/пароль. Логин по умолчанию сейчас boot (altbug #33098)

Примечание: Логин/пароль (последний в хэшированном виде) записываются в файл /etc/grub.d/50_password:
#!/bin/sh
cat << EOF
set superusers="boot"
password_pbkdf2 boot grub.pbkdf2.sha512.10000.<hash>
EOF


Также для ограничения загрузки (как с изменением параметров, так и без) можно добавить в файл /etc/grub.d/40_custom строки:

set superusers="user"
password user password
Внимание! В этом случае не забудьте запретить чтение данного файла обычным пользователям (см. altbug #33099). А лучше всего используйте хэшированные пароли. Для этого следует воспользоваться password_pbkdf2 и командой grub-mkpasswd-pbkdf2.


В случае дистрибутивов серии 6.0 отключить графику в /etc/sysconfig/grub2 (см. altbug #26198):

GRUB_TERMINAL_OUTPUT='console'

Для защиты паролем возможности загрузки именно с изменёнными параметрами придётся добавить в переменную CLASS в скрипте /etc/grub.d/10_linux опцию --unrestricted (внимание: этот скрипт по состоянию на версию 2.00-alt20 входит в пакет grub-common и не помечен как %config, поэтому будет перезаписан при обновлении!).

После подобных операций следует перегенерировать конфигурацию командой grub-mkconfig -o /boot/grub/grub.cfg (либо grub-mkconfig, в зависимости от дистрибутива). В случае использования alterator-grub - это не требуется.

Как переустановить GRUB?

После обновления до grub2-pc-2.00-alt1 операционная система может не загрузиться. В таком случае, необходимо иметь под рукой любой live disk. Далее:

mount-system
chroot /mnt/system1
  • Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
mount /dev/sda2 /mnt 
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /proc /mnt/proc
mount -o bind /run /mnt/run
mount -o bind /sys /mnt/sys
chroot /mnt/ /bin/bash
  • Скачиваем предыдущую версию пакета:

http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/10/30/

  • Устанавливаем rpm
rpm -Uvh --oldpackage /home/andy/grub2-pc-1.99-alt9.i586.rpm
  • Переконфигурируем меню grub
grub-mkconfig -o /boot/grub/grub.cfg

После описанного выше, у меня загрузилась операционная система.

По мотивам: http://edoceo.com/notabene/grub-probe-error-cannot-find-device-for-root

Как установить/восстановить загрузочную запись grub ?

Аналогично предыдущему пункту (см. также Восстановление_загрузочной_записи#grub:

mount-system
chroot /mnt/system1
  • Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
mount /dev/sda2 /mnt 
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /proc /mnt/proc
mount -o bind /run /mnt/run
mount -o bind /sys /mnt/sys
chroot /mnt/ /bin/bash

После того как проведены подготовительные действия и сделан сhroot, необходимо выполнить

grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB

если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi:

mount -a # достаточно смонтировать точку монтирования /boot/efi
grub-efi-autoupdate

Что за жалобы про BIOS Boot Partition?

При загрузке под PC BIOS используется MBR и небольшая свободная область диска после него (31 килобайт до 63-го сектора) — соответственно первая стадия и core.img; при использовании UEFI ожидается GPT-разбивка загрузочного диска, при которой нет ни MBR, ни этой области. Отсюда возникает необходимость встроить вторую стадию загрузчика куда-то ещё. Таким местом и решили взять определённый в GPT тип раздела BIOS Boot Partition.

Инструмент разбивки дисков в составе инсталятора ALT Linux сделает такой раздел автоматически под UEFI, если разбиваете вручную или большой диск для BIOS — может потребоваться создать раздел минимального объёма (RED Hat рекомендует 1 мегабайт) с типом «bios boot partition» в терминологии alterator-vm либо меткой «bios_grub» в терминологии parted.

См. тж. архивную статью.

Во время загрузки Windows искажена картинка, что делать?

Если при загрузке, например, Windows 7 часть экрана содержит "шум", возможно, отдалённо напоминающий картинку заставки GRUB -- попробуйте выровнять используемые видеорежимы VESA:

  • в файле /etc/sysconfig/grub2 поменяйте GRUB_GFXMODE='800x600' на GRUB_GFXMODE='640x480'[1];
  • выполните команду update-grub или grub-mkconfig -o /boot/grub/grub.cfg

Вы можете сделать заставку текстовой, указав GRUB_GFXMODE='console'.

Где почитать ещё?

А также в операционной системе:

info grub
info -f grub -n 'Simple configuration'

Примечания

  1. возможно, понадобится подобрать разрешение, например, 1024x768 -- см. тж. здесь и здесь