Grub: различия между версиями
(не показано 65 промежуточных версий 18 участников) | |||
Строка 1: | Строка 1: | ||
[[ | [[en:Grub]] | ||
== Что такое GRUB? == | == Что такое GRUB? == | ||
Wikipedia сообщает "GNU GRUB (англ. GRand Unified Bootloader) — загрузчик операционной системы от проекта GNU. GRUB позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки." | Wikipedia сообщает "GNU GRUB (англ. GRand Unified Bootloader) — загрузчик операционной системы от проекта GNU. GRUB позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки." | ||
Строка 6: | Строка 5: | ||
== Зачем нужен GRUB, если есть LILO/ELILO? == | == Зачем нужен GRUB, если есть LILO/ELILO? == | ||
* Поддержка модулей Raid, LVM | * Поддержка модулей Raid, LVM файловых систем вкупе с интерактивным интерфейсом позволяют выбрать, что загружать откуда угодно ''' в процессе загрузки ''' (а не установки загрузчика). | ||
* Возможность multiboot (для загрузки, к примеру, XEN) | * Возможность multiboot (для загрузки, к примеру, XEN) | ||
Строка 13: | Строка 12: | ||
Установить дистрибутив с GRUB либо мигрировать загрузчик вручную. | Установить дистрибутив с GRUB либо мигрировать загрузчик вручную. | ||
<source lang=bash>apt-get install | <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> | ||
Строка 20: | Строка 19: | ||
'''Проверьте содержимое /etc/sysconfig/grub2''': если там нет раскомментированной переменной GRUB_AUTOUPDATE_DEVICE (при смене загрузчика вручную не будет, т.к. она добавляется только alterator-grub), добавьте устройство или их список; '''если root/boot на md raid1, следует задать список дисков, на которых он размещён''' -- например, не '/dev/md0 ', а '/dev/sdb /dev/sda '. После этого стоит выполнить '''grub-autoupdate'''. | '''Проверьте содержимое /etc/sysconfig/grub2''': если там нет раскомментированной переменной GRUB_AUTOUPDATE_DEVICE (при смене загрузчика вручную не будет, т.к. она добавляется только alterator-grub), добавьте устройство или их список; '''если root/boot на md raid1, следует задать список дисков, на которых он размещён''' -- например, не '/dev/md0 ', а '/dev/sdb /dev/sda '. После этого стоит выполнить '''grub-autoupdate'''. | ||
== Как передать свои параметры загрузки ядра? == | |||
Для однократного изменения таковых при загрузке GRUB следует: | |||
# нажать "e" при курсоре на цели загрузки, соответствующей используемому экземпляру ALT; | |||
# в открывшемся редакторе отыскать строку, начинающуюся с '''linux /boot/vmlinuz'''; | |||
# в её конец дописать требуемые параметры, отделив пробелом; | |||
# нажать F10. | |||
Если нужно, чтобы эти параметры ядра передавались ядру при каждой загрузке, надо прописать их в {{path|/etc/sysconfig/grub2}} и дать команду {{cmd|update-grub}}; подробнее см. следующий пункт. | |||
== Где отредактировать параметры ядра? == | == Где отредактировать параметры ядра? == | ||
Для постоянного применения иных параметров загрузки следует изменить конфигурацию загрузчика. | |||
* | *Параметры ядра содержатся в {{path|/etc/sysconfig/grub2}} | ||
*После редактирования этого файла нужно вызвать {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}} | |||
В /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 | ||
Строка 44: | Строка 56: | ||
*Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось - возможно, придумается какой-то новый общий случай. | *Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось - возможно, придумается какой-то новый общий случай. | ||
*Если вам всё же хочется - допишите то, что считаете нужным в /etc/grub.d/40_custom | *Если вам всё же хочется - допишите то, что считаете нужным в /etc/grub.d/40_custom | ||
Например, если автоматически не обнаружилась ''Windows 10'', может помочь такое описание пункта меню: | |||
<source lang=bash>menuentry 'Windows 10' { | |||
search --fs-uuid --no-floppy --set=root <UUID> | |||
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi | |||
}</source> | |||
Где UUID - UUID раздела с загрузчиком Windows. Узнать UUID раздела можно командой <code>blkid</code> | |||
*После редактирования этого файла нужно вызвать <code># grub-mkconfig -o /boot/grub/grub.cfg</code> | |||
==Как выбрать ядро для загрузки по умолчанию (первый пункт grub)?== | |||
Командой <code>installkernel <имя ядра></code>, можно с переменной — к примеру, для текущего: | |||
# installkernel $(uname -r) | |||
Внесено предложение ([https://bugzilla.altlinux.org/show_bug.cgi?id=38888 altbug #38888]) по добавлению к утилите <strong>update-kernel</strong> опции <code>-d, --default</code> — установка ядра по умолчанию. Будет ли оно реализовано — неизвестно. | |||
== Как выбрать то, что будет загружаться автоматом? == | == Как выбрать то, что будет загружаться автоматом? == | ||
''данный пункт очень похож на следующий, но на этот пункт есть ссылки'' | |||
* Выберите нужный вам пункт один раз при загрузке. savedefault должен сохранять ваш выбор на будущее. | * Выберите нужный вам пункт один раз при загрузке. savedefault должен сохранять ваш выбор на будущее. | ||
* Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2 | * Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2 | ||
* NB: в 2.00+ поведение изменилось, теперь дополнительные ядра для того же корня спрятаны в | * 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. | |||
{{Attention|Обнаружилась возможность внезапного изменения и буквенного названия {{altbug|37379}} }} | |||
=== Способ 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 значения не имеет. | |||
== Как однократно выполнить загрузку произвольного пункта меню? == | |||
Иногда бывает удобно загрузиться с произвольным пунктом меню, но не менять текущий вариант. Это удобно, например, для тестирования нового ядра, когда надо иметь возможность вернуть старое ядро простой перезагрузкой. Для этого надо настроить Grub в соответствии со способом 1 предыдущего пункта, после чего можно задать пункт меню для следующей загрузки командой grub-reboot и запустить команду reboot. В момент начала загрузки конфигурация Grub автоматически вернётся в исходное состояние, и следующая загрузка компьютера произойдёт по-старому. Это аналогично использованию опции -R загрузчика Lilo. | |||
== Как загрузить Xen? == | == Как загрузить Xen? == | ||
Строка 66: | Строка 139: | ||
== Загрузка Linux и Windows c разных жестких дисков == | == Загрузка Linux и Windows c разных жестких дисков == | ||
Grub грузится с основного диска на котором Linux, Windows установлен на дополнительный жесткий диск. | |||
В 40_custom добавляем: | В 40_custom добавляем: | ||
menuentry "Windows XP" { | menuentry "Windows XP" { | ||
Строка 80: | Строка 153: | ||
По умолчанию при загрузке любой пользователь может добавить/изменить параметры. | По умолчанию при загрузке любой пользователь может добавить/изменить параметры. | ||
Этого можно избежать, если установить пароль. | Этого можно избежать, если установить пароль. Проще всего сделать это в центре управления системой. Для этого потребуется пакет {{pkg|alterator-grub}} и выполнить следующие действия: | ||
*Зайдите в ЦУС ({{cmd|acc}}), перейдите в режим эксперта, и в разделе "Система" откройте "Загрузчик GRUB". | |||
*Установите флажок "Установить или сбросить пароль" и введите необходимый пароль. | |||
После нажатия на кнопку "Установить" (переконфигурация 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/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 входит в пакет | Для защиты паролем возможности загрузки именно с изменёнными параметрами придётся [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>, поэтому будет перезаписан при обновлении!). | ||
После подобных операций следует перегенерировать конфигурацию командой {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}} (либо {{cmd|grub-mkconfig}}, в зависимости от дистрибутива). В случае использования {{pkg|alterator-grub}} - это не требуется. | |||
После подобных операций следует перегенерировать конфигурацию командой {{cmd| | |||
== Как переустановить GRUB? == | == Как переустановить GRUB? == | ||
Строка 102: | Строка 182: | ||
рукой любой live disk. Далее: | рукой любой live disk. Далее: | ||
* Загружаемся с rescue-cd, например [[Rescue|ALT Linux Rescue]] | * Загружаемся с rescue-cd, например [[Rescue|ALT Linux Rescue]] | ||
* Если использован [[Rescue|ALT Linux Rescue]]: | * Если использован [[Rescue|ALT Linux Rescue]]: | ||
mount-system | mount-system | ||
chroot /mnt/system1 | chroot /mnt/system1 | ||
* Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2): | * Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2): | ||
mount /dev/sda2 /mnt | mount /dev/sda2 /mnt | ||
mount -o bind /dev /mnt/dev | mount -o bind /dev /mnt/dev | ||
mount -o bind /proc /mnt/proc | mount -o bind /proc /mnt/proc | ||
mount -o bind /run /mnt/run | mount -o bind /run /mnt/run | ||
mount -o bind /sys /mnt/sys | mount -o bind /sys /mnt/sys | ||
chroot /mnt/ /bin/bash | chroot /mnt/ /bin/bash | ||
* Скачиваем предыдущую версию пакета: | * Скачиваем предыдущую версию пакета: | ||
http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/10/30/ | 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 | |||
rpm -Uvh --oldpackage /home/andy/grub2-pc-1.99-alt9.i586.rpm | grub-mkconfig -o /boot/grub/grub.cfg | ||
* | |||
grub-mkconfig -o /boot/grub/grub.cfg | |||
После описанного выше, у меня загрузилась операционная система. | После описанного выше, у меня загрузилась операционная система. | ||
Строка 137: | Строка 203: | ||
По мотивам: http://edoceo.com/notabene/grub-probe-error-cannot-find-device-for-root | По мотивам: http://edoceo.com/notabene/grub-probe-error-cannot-find-device-for-root | ||
== Как установить/восстановить загрузочную запись grub ? == | ==Как установить/восстановить загрузочную запись grub?== | ||
Аналогично предыдущему пункту (см. также [[Восстановление_загрузочной_записи#grub]]: | |||
* Если использован [[Rescue|ALT Linux Rescue]]: | * Если использован [[Rescue|ALT Linux Rescue]]: | ||
mount-system | mount-system | ||
chroot /mnt/system1 | chroot /mnt/system1 | ||
* Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2): | * Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2): | ||
mount /dev/sda2 /mnt | mount /dev/sda2 /mnt | ||
mount -o bind /dev /mnt/dev | mount -o bind /dev /mnt/dev | ||
mount -o bind /proc /mnt/proc | mount -o bind /proc /mnt/proc | ||
mount -o bind /run /mnt/run | mount -o bind /run /mnt/run | ||
mount -o bind /sys /mnt/sys | mount -o bind /sys /mnt/sys | ||
chroot /mnt/ /bin/bash | chroot /mnt/ /bin/bash | ||
После того как проведены подготовительные действия и сделан сhroot, необходимо выполнить | После того как проведены подготовительные действия и сделан сhroot, необходимо выполнить | ||
Строка 163: | Строка 221: | ||
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB</source> | grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB</source> | ||
== | {{Note| Если при выполнении команды {{cmd|grub-install}}, в режиме legaсy, вы получаете ошибку: | ||
<source lang="bash"># grub-install /dev/sda | |||
grub-install: error: cannot find EFI directory</source> | |||
то выполните команду: | |||
<source lang="bash"># grub-install --target=i386-pc /dev/sda</source> | |||
}} | |||
если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi: | |||
mount -a # достаточно смонтировать точку монтирования /boot/efi | |||
grub-efi-autoupdate | |||
grub- | |||
== Что за жалобы про BIOS Boot Partition? == | == Что за жалобы про BIOS Boot Partition? == | ||
Строка 193: | Строка 238: | ||
При загрузке под 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 — может потребоваться создать раздел минимального объёма ( | Инструмент разбивки дисков в составе инсталятора 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 архивную статью]. | ||
== Во время загрузки Windows искажена картинка, что делать? == | |||
Если при загрузке, например, 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>; | |||
* выполните команду {{cmd|update-grub}} или {{cmd|grub-mkconfig -o /boot/grub/grub.cfg}} | |||
Вы можете сделать заставку текстовой, указав <tt>GRUB_GFXMODE='console'</tt>. | |||
== Как изменить время отображения меню? == | |||
Открываем консоль. | |||
$ su - | |||
# mcedit /etc/default/grub | |||
Раскомментируем и правим в файле значение {{path|<nowiki>GRUB_TIMEOUT=0</nowiki>}}. | |||
Вместо нуля устанавливаем количество секунд, сколько должно отображаться меню GRUB. | |||
Не забудем сохранить файл клавишей {{button|F2}} и обновить параметры загрузчика командой: | |||
# update-grub | |||
== Где почитать ещё? == | == Где почитать ещё? == | ||
Строка 206: | Строка 273: | ||
info grub | info grub | ||
info -f grub -n 'Simple configuration' | info -f grub -n 'Simple configuration' | ||
* ...ну и надо хотя бы назвать по имени {{pkg|os-prober}} | |||
== Примечания == | |||
<references /> | |||
[[Категория:Загрузчики]] | |||
{{Category navigation|title=Загрузчики|category=Загрузчики|sortkey={{SUBPAGENAME}}}} | |||
{{Category navigation|title=GRUB|category=GRUB|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 18:28, 19 ноября 2024
Что такое 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 следует:
- нажать "e" при курсоре на цели загрузки, соответствующей используемому экземпляру ALT;
- в открывшемся редакторе отыскать строку, начинающуюся с linux /boot/vmlinuz;
- в её конец дописать требуемые параметры, отделив пробелом;
- нажать 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
Например, если автоматически не обнаружилась Windows 10, может помочь такое описание пункта меню:
menuentry 'Windows 10' {
search --fs-uuid --no-floppy --set=root <UUID>
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}
Где UUID - UUID раздела с загрузчиком Windows. Узнать UUID раздела можно командой blkid
- После редактирования этого файла нужно вызвать
# grub-mkconfig -o /boot/grub/grub.cfg
Как выбрать ядро для загрузки по умолчанию (первый пункт grub)?
Командой installkernel <имя ядра>
, можно с переменной — к примеру, для текущего:
# installkernel $(uname -r)
Внесено предложение (altbug #38888) по добавлению к утилите update-kernel опции -d, --default
— установка ядра по умолчанию. Будет ли оно реализовано — неизвестно.
Как выбрать то, что будет загружаться автоматом?
данный пункт очень похож на следующий, но на этот пункт есть ссылки
- Выберите нужный вам пункт один раз при загрузке. 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 значения не имеет.
Как однократно выполнить загрузку произвольного пункта меню?
Иногда бывает удобно загрузиться с произвольным пунктом меню, но не менять текущий вариант. Это удобно, например, для тестирования нового ядра, когда надо иметь возможность вернуть старое ядро простой перезагрузкой. Для этого надо настроить Grub в соответствии со способом 1 предыдущего пункта, после чего можно задать пункт меню для следующей загрузки командой grub-reboot и запустить команду reboot. В момент начала загрузки конфигурация Grub автоматически вернётся в исходное состояние, и следующая загрузка компьютера произойдёт по-старому. Это аналогично использованию опции -R загрузчика Lilo.
Как загрузить 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)
#!/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
В случае дистрибутивов серии 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. Далее:
- Загружаемся с rescue-cd, например ALT Linux Rescue
- Если использован ALT Linux Rescue:
mount-system chroot /mnt/system1
- Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
mount /dev/sda2 /mnt mount -o bind /dev /mnt/dev 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:
- Если использован ALT Linux Rescue:
mount-system chroot /mnt/system1
- Если в используемом LiveCD нет mount-system, делаем самостоятельно (предполагая/зная, что корень на /dev/sda2):
mount /dev/sda2 /mnt mount -o bind /dev /mnt/dev 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
# grub-install /dev/sda
grub-install: error: cannot find EFI directory
то выполните команду:
# grub-install --target=i386-pc /dev/sda
если же используется 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'.
Как изменить время отображения меню?
Открываем консоль.
$ su - # mcedit /etc/default/grub
Раскомментируем и правим в файле значение GRUB_TIMEOUT=0.
Вместо нуля устанавливаем количество секунд, сколько должно отображаться меню GRUB.
Не забудем сохранить файл клавишей F2 и обновить параметры загрузчика командой:
# update-grub
Где почитать ещё?
- Викиучебник (debian-related документация) http://ru.wikibooks.org/wiki/Grub_2, с небольшими изменениями применимо и у нас.
- http://people.apache.org/~skitching/MineOfInformation/linux/Booting_Linux_on_x86_with_Grub2.html (англ.)
- GNU GRUB Manual 2.00 http://www.gnu.org/software/grub/manual/grub.html (англ.)
- дистрибутивные вики: Arch, Frugalware, Gentoo
А также в операционной системе:
info grub info -f grub -n 'Simple configuration'
- ...ну и надо хотя бы назвать по имени os-prober