Установка и настройка загрузчика GRUB ОС Linux

Альтернативные загрузчики

Если вы не желаете использовать загрузчик, то
имеется несколько альтернативных вариантов:

загрузочный диск

Вы можете загружаться с загрузочного диска,
созданного инсталляционной программой (если вы указали эту опцию во время
установки системы).

LOADLIN

Можно загружать Linux из-под MS DOS. К сожалению, он требует копию ядра
Linux (и начальный RAM диск, если у вас есть SCSI адаптер) на
разделе MS DOS. Единственный способ сделать это — загрузить Red Hat Linux,
используя другой способ (например, с загрузочного диска) и затем скопировать
ядро в раздел MS DOS. LOADLIN доступен по адресу

ftp://metalab.unc.edu/pub/Linux/system/boot/dualboot/ 

и на различных
зеркалах сайта.

SYSLINUX

SYSLINUX — это MS DOS программа, очень похожая на LOADLIN. Также
доступна по адресу

ftp://metalab.unc.edu/pub/Linux/system/boot/loaders/ 

и на различных
зеркалах сайта.

Некоторые коммерческие загрузчики

Вы можете загрузить Linux при помощи коммерческих загрузчиков. Например, System Commander и Partition Magic, которые умеют загружать
Linux (но требуют, чтобы GRUB или LILO были установлены в корневом разделе
Linux).

Настройка Grub через /boot/grub/grub.cfg

Файл /etc/boot/grub/grub.cfg управляет непосредственно работой загрузчика, здесь указаны все его параметры и настройки, а также сформировано меню. Поэтому, изменяя этот файл, мы можем настроить Grub как угодно. Сначала попытаемся разобраться с синтаксисом файла. Он очень напоминает синтаксис bash и состоит из нескольких команд, которые что-то делают, загружают и настраивают.

Команды могут быть объединены в функции или блоки с помощью инструкций if else, синтаксис которых аналогичен bash. Рассмотрим основные из этих команд:

  • load_env – загрузить переменные окружения из файла;
  • set – установить значение переменной окружения. Используется как set имя_переменной=значение;
  • insmod – загрузить модуль из папки с модулями Grub;
  • linux – загружает ядро Linux;
  • initrd – подготавливает образ initrd для загрузки ядра;
  • boot – пытается загрузить систему;
  • chainloader – запускает загрузчик из другого раздела;
  • search – установить значение переменной выполнив поиск по заданным параметрам, например, может найти диск по его UUID или метке;
  • menuentry – позволяет создать пункт меню;

Это все команды, которые вам понадобятся. Но две последние нужно рассмотреть подробнее, так как они будут использоваться чаще всего.

Команда search используется для поиска дисков и имеет такой синтаксис:

$ search опции_поиска –set=имя_переменной –hint приметы_устройства основной_параметр

  • Опции поиска задают по какому критерию нужно искать, например, –fs-uuid – искать по UUID, –label – по метке, –no-floppy – не искать в схемных носителях.
  • Приметы устройства дают программе дополнительные подсказки для более быстрого поиска;
  • Основной параметр – значение, по которому будем выполнять поиск.

Например, команда может выглядеть вот так:

Вторая команда, которая нам очень понадобится, это menuentry. Она используется для создания пунктов меню, с помощью которых будут загружаться операционные системы и дистрибутивы linux. Синтаксис этой команды такой:

menuentry имя_пункта {команды установки переменных окружениязагрузка модулейlinux файл_ядра параметры_ядраinitrd файл_initrd}

Обычно, для нормальной загрузки операционной системы сначала необходимо установить корневой раздел, для этого, возможно, нужно загрузить некоторые модули, дальше нужно запустить ядро с нужными параметрами и добавить образ initrd если это требуется. Самый простой пример пункта меню:

Теперь давайте попробуем собрать всю информацию воедино и создадим самый просто конфигурационный файл для Grub вручную:

# Время показа меню 5 секунд

set timeout=5

# Установим разрешение экрана и укажем что это же разрешение нужно сохранять для ядра:

set gfxmode=”1280×800″
set gfxpayload=keep

# Загрузим необходимые модули для работы видео режима, нужно для использования фоновой картинки

insmod vbe
insmod gfxterm
terminal_output gfxterm

# Установка шрифта с поддержкой Unicode:

font “/boot/grub2/fonts/unicode.pf2”
loadfont unicode

# Загрузим модуль работы с jpeg и зададим фоновый рисунок:

insmod jpeg
background_image “/boot/fon.jpg”

# Установим переменные окружения для настройки цвета меню:

set menu_color_normal=red/black
set menu_color_highlight=yellow/black
set color_normal=yellow/black

menuentry “Ubuntu” {
root=(hd0,1)
linux /casper/vmlinuz boot=casper noeject noprompt splash
initrd /casper/initrd.lz
}

menuentry “OpenSUSE” {
insmod gzio
insmod part_msdos
insmod ext2
set root=’hd0,msdos5′
linux /boot/vmlinuz-4.1.31-30-default root=UUID=c52ca066-e48f-4df2-bc7e-4d885a354090 resume=/dev/sda7 splash=silent quiet showopts
initrd /boot/initrd-4.1.31-30-default
}

Теперь, когда вы знаете как примерно выглядит конфигурационный файл Grub, вы сможете разобраться с файлом, созданным автоматически. Пункты меню выводятся по порядку, поэтому чтобы поменять их местами будет достаточно поменять местами команды в файле

Программа настройки Grub – это хорошо, но также важно понимать как все работает на низком уровне

Настройка Grub через конфигурационные файлы

Сразу нужно сказать, что существует два способа настройки Grub Ubuntu, через конфигурационные файлы. Первый – через конфигурационный файл утилиты grub-mkconfig, который позволяет задать общие параметры для загрузчика и ручное редактирование /boot/grub/grub.cfg.

Первый – рекомендованный, и с помощью него можно настроить большинство параметров, в этом случае настройки не собьются, когда вы обновите ядро или загрузчик. Второй вариант еще более гибкий, но после любого обновления вы потеряете свои настройки. Так что то что можно настроить через /etc/default/grub настраиваем через него, все остальное – через /boot/grub/grub.cfg. Сначала рассмотрим первый вариант.

Настройка Grub через /etc/default/grub

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

  • GRUB_DEFAULT – указывает какой пункт нужно загружать по умолчанию. Может быть указан номер, или полное название или же строка saved, которая значит, что нужно загрузить пункт, указанный с помощью grub-reboot;
  • GRUB_SAVEDEFAULT – загружать последнюю использованную запись по умолчанию;
  • GRUB_HIDDEN_TIMEOUT – сколько секунд ждать перед тем, как вывести меню;
  • GRUB_HIDDEN_TIMEOUT_QUIET – если установлено true, то меню не будет показано;
  • GRUB_TIMEOUT – сколько секунд будет показано меню;
  • GRUB_CMDLINE_LINUX – добавить опции ядра для всех ядер, как обычных, так и режима восстановления;
  • GRUB_CMDLINE_LINUX_DEFAULT – добавить опции ядра только для обычных ядер;
  • GRUB_CMDLINE_LINUX_RECOVERY – опции ядра, только для режима восстановления;
  • GRUB_BADRAM – указать адреса оперативной памяти, которые не нужно использовать;
  • GRUB_TERMINAL – модуль терминала для Grub. Можно использовать console, только для текстового режима или gfxterm с поддержкой графики;
  • GRUB_GFXMODE – разрешение экрана в Grub, лучшие использовать auto, чтобы система выбрала сама то что ей нужно.
  • GRUB_DISABLE_RECOVERY – не включать в меню пункты восстановления;
  • GRUB_DISABLE_OS_PROBER – не искать другие операционные системы;
  • GRUB_BACKGROUND – адрес картинки для фона, должна находиться в той же папке что и файлы grub;
  • GRUB_THEME – устанавливает тему Grub.

Например, можно использовать такую конфигурацию:

Но как вы могли понять, этим способом вы не можете настроить порядок пунктов загрузки, а также некоторые другие параметры, поэтому давайте рассмотрим настройку непосредственно конфигурационного файла Grub.

Восстановление Grub2

Повреждение загрузчика Grub2 и прекращение с его помощью процесса загрузки может быть связано с установкой / попыткой установки другого загрузчика, например Syslinux или при установке ОС семейства Windows, либо при изменении структуры жёсткого диска, например именования раздела на котором установлен загрузчик, либо в иных случаях.
В связи с этим может возникнуть потребность восстановления загрузчика Grub2.
Для Grub2 разрушение может выглядеть как полное или частичное с различием между ними в том, что старт загрузчика не происходит вовсе или он запускается, но в Rescue mode.

  Замечание:
  В целях настоящей статьи под полным разрушением загрузки понимается разрушении MBR от Grub2.
  Если предположить отсутствии на носителе информации и папки с файлом конфигурации и модулями Grub2, то
  следует считать, что Grub2 не установлен и требуется .

При появлении экрана Rescue mode Grub2 существует возможность старта системы и последующего восстановления загрузчика без привлечения внешних ресурсов.
При полном разрушении загрузчика (разрушении MBR) на носителе информации остаются файл конфигурации и модули Grub2, но для восстановления требуется предварительная загрузка с внешнего “источника”.
Восстановления Grub2 при полном разрушении может быть осуществлено двумя способами:

  • Первый способ заключается в загрузке “внешней” операционной среды с установленным загрузчиком Grub2, например с CD/DVD привода, USB-флешки или по сети через PXE/Etherboot, и последующей его “установкой” на целевой жёсткий диск.
  • Второй способ использует возможность загрузки целевой операционной системе с установленным загрузчиком Grub2 минуя разрушенный MBR с последующим восстановлением Grub2 из “родной” среды.

Для восстановления Grub2 в Rescue mode

в окне Rescue mode Grub2 выполняются команды

  # ls (hd0,1)/                        - устанавливается раздел с установленным загрузчиком
  # set root=(hd0,1)                   - установка пути корневой файловой системы
  # set prefix=(hd0,1)/boot/grub       - установка пути к модулям загрузчика
  # insmod /boot/grub/linux.mod        - загрузка модуля загрузки linux
  # linux /vmlinuz root=/dev/sda1 ro   - установка расположения модуля ядра linux
  # initrd /initrd.img                 - установка стартовой файловой системы ядра linux
  # boot                               - загрузка установленной linux-системы

после загрузки операционной среды осуществляется восстановление Grub2, например командой

  # dpkg-reconfigure grub-pc

Для восстановления Grub2 при разрушении MBR из внешней “живой” (Live) системы

запускается “живая” (Live CD) система с внешнего носителя

  Замечание:
  В качестве загружаемой "живой" операционной среды могут быть использованы различные Linux Live системы,
  например такие как Debian Live, Parted Magic, SystemRescueCD, Rescatux, а также 
  операционная система Debian запускаемая по сети, например с сервера терминалов NFS.

устанавливается загрузчик с помощью команд

  # su                                           - получение прав суперпользователя
  # mount        /dev/sda1 /mnt                  - подключение носителя с разрушенным Grub
  # mount --bind /dev      /mnt/dev              - подключение устройств для выполнения команды chroot
  # mount --bind /proc     /mnt/proc
  # mount --bind /sys      /mnt/sys
  # chroot /mnt                                  - перехода в chroot-режим
  $ grub-install --recheck --no-floppy /dev/sda  - установка Grub2
  $ exit                                         - выход из chroot-режима
  # umount -l /mnt/dev                           - отмонтирование служебных папок 
  # umount -l /mnt/proc
  # umount -l /mnt/sys
  # umount -l /mnt                               - отмонтирование носителя, Grub2 установлен
  Замечание:
  Существует и возможность осуществить проверку загрузочного меню Grub2 без перезапуска компьютера.
  Например с помощью команд
  # sync
  # echo 3 > /proc/sys/vm/drop_caches
  # qemu -hda /dev/sda

Для восстановления Grub2 при разрушении MBR с загрузкой минуя носитель

запускается целевая операционная система минуя разрушенный MBR

  Замечание:
  Для загрузки операционной системы с установленным загрузчиком Grub2 минуя разрушенный MBR
  могут быть использованы такие средства как SuperGRUB2 disk, специальные ядра altker32/altker64 распространяемые
  на LiveCD диске проекта Systemrescue, а также ручная загрузка из любого загрузчика, позволяющего осуществлять это
  вручную, например те же Grub2 или Syslinux запускаемые с CD/DVD привода или флешки.

устанавливается загрузчик с помощью команд

  # su                                           - получение прав суперпользователя
  # grub-install /dev/sda                        - или
  # grub-install --recheck --no-floppy --root-directory=/ /dev/sda
                                                 - установка Grub2 на жёсткий диск /dev/sda
                                                 с (во)созданием каталога /boot/grub
                                                 в точке подключения носителя 

Ссылки:

Расширенные возможности

В GRUB2 есть много возможностей, которые делают GRUB2 очень мощным загрузчиком. Он поддерживает:

  • Загрузку с платформ UEFI.
  • Загрузку с дисков с таблицей разделов GPT без необходимости использования гибридного MBR (при необходимости, гибридный MBR можно включить для совместимости или переносимости).
  • Загрузку с раздела /boot с файловой системой btrfs.
  • Загрузка с ZFS pool.
  • Непосредственную загрузку с raid set btrfs без необходимости использования initramfs для настройки раннего монтирования.
  • Непосредственную загрузку с системы управления логическими томами (например, LVM2).
  • Загрузку с поддержкой DM-RAID (RAID 0, 1, 4, 5, 6, 9 и 10).
  • Загрузку с зашифрованных устройств (LUKS).

Некоторые возможности будут рассмотрены более детально дальше.

Chainloading

GRUB2 была улучшена поддержка режима chainload по сравнению с GRUB Legacy. Чтобы загрузить другой загрузчик с помощью chainloader используйте опцию .

Файл Загрузка другого загрузчика с помощью chainloader

menuentry "Custom Super-bootloader example" {
     insmod part_msdos
     insmod chain
     chainloader (hd1,1)+1
}

Для более подробной информации о chainloading, пожалуйста, смотрите статью Chainloading.

Password protection of GRUB menu

If you want to secure GRUB so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB’s configuration files. The program grub-mkpasswd-pbkdf2 generates password hashes for GRUBː

Then, add the following toː

Файл

# Grub user
echo 'set superusers="username"'
# Grub password
echo 'password_pbkdf2 <username> <password>'

Использование фрейбуфера

Чтобы GRUB2 использовал framebuffer, перекомпилируйте GRUB с включенным USE-флагом . Это установит шрифт True Type по умолчанию, а также утилиту для преобразования шрифтов.

Приступим к конфигурации конфигурационного файла по умолчанию GRUB2, который расположен в /etc/default/grub. Например:

Файл Настройки связанные с фрейбуфером

# настройка разрешения и глубины цвета
GRUB_GFXMODE=1366x768x32
 
# сохранить разрешение после загрузки ядра
GRUB_GFXPAYLOAD_LINUX=keep
 
# настройка фонового изображения
GRUB_BACKGROUND="/boot/grub/bg.png"
 
# использование пользовательского шрифта, конвертированного с помощью утилиты grub-mkfont
GRUB_FONT="/boot/grub/fonts/roboto.pf2"

Изменение порядка загрузки Grub через терминал

Как я и обещал, теперь рассмотрим как сделать загрузку WIndows первой в Grub с помощью конфигурационных файлов. Конфигурация Grub находится в файле /boot/grub/grub.cfg.

Как правило, строки меню выглядят вот так:

Например пункт Windows:

Теперь чтобы изменить порядок пунктов меню достаточно вырезать все до обратной закрывающей скобочки, вместе с этой строкой, и вставить перед всеми другими пунктами. Затем можно сохранить файл и готово. Перезагружайте и смотрите. Загрузка Windows выполняется по умолчанию. Только минусом данного способа является то, что при обновлении конфигурации Grub все настройки собьются.

Аналогично тому как мы настраивали пункт, загружаемый по умолчанию в Grub Customizer, это можно сделать и в терминале. Откройте файл /etc/default/grub.

Здесь нас интересует строчка:

Замените 0, на нужный пункт для загрузки, также вместо цифры можно указать имя пункта, например:

Посмотреть доступные пункты загрузки не открывая файл конфигурации можно командой:

Еще можно настроить загрузку последней загруженной системы, для этого добавьте строчку

А в GRUB_DEFAULT укажите saved:

Очевидным плюсом этого способа есть то, что настройки во время обновления конфигурации Grub не собьются, так как во время обновления информация берется из этого файла. Теперь давайте обновим конфигурацию и сохраним настройки командой:

Не во всех системах работает такой вариант, поэтому можно использовать другую команду:

Вот и все. Теперь вы знаете как сделать загрузку Windows первой в Grub. Но представленную в этой статье информацию можно использовать в более широких целях. Она будет полезна не только для Windows, но и для любых других нескольких систем, очередностью загрузки которых нужно управлять.

Скачивание Arch Linux ISO и создание USB

Если вам нужно переустановить Grub в Arch Linux, вам понадобится установочный ISO на USB. Если вы потеряли исходный установочный ISO-файл, вам необходимо загрузить ISO-образ и создать новый загрузочный USB-накопитель.

Примечание: если у вас все еще есть исходный установщик Arch Linux USB, вы можете пропустить этот раздел руководства.

Загрузив файл ISO, перейдите на Etcher.io и скачайте последнюю версию приложения. Etcher является кроссплатформенным и работает в Windows, Mac OS и любой ОС Linux.

После загрузки Etcher откройте его и следуйте пошаговым инструкциям ниже, чтобы создать новый файл ISO.

Шаг 1: Найдите кнопку «Flash из файла» и щелкните по ней мышью. Когда вы выбираете кнопку «Flash from file», Etcher откроет окно файлового браузера. В этом окне найдите файл ISO Arch Linux и выберите его, чтобы добавить в приложение.

Шаг 2. Вставьте USB-накопитель в USB-порт компьютера. Вставив его, нажмите кнопку «Выбрать цель» и откройте область выбора устройства. Затем используйте его, чтобы щелкнуть USB-накопитель, который вы будете использовать для установки Arch Linux ISO.

Шаг 3. Найдите «Вспышка!» кнопку и щелкните по ней мышью. При нажатии на «Вспышка!» Нажмите кнопку, Etcher начнет записывать ISO-файл Arch Linux на USB-накопитель.

Когда перепрошивка будет завершена, отсоедините USB от запасного ПК и подключите его к вашей системе Arch Linux. Затем загрузитесь в BIOS Arch PC и настройте его для загрузки с USB.

Как однократно выполнить загрузку произвольного пункта меню?[править]

Иногда бывает удобно загрузиться с произвольным пунктом меню, но не менять текущий вариант. Это удобно, например, для тестирования нового ядра, когда надо иметь возможность вернуть старое ядро простой перезагрузкой. Для этого надо настроить Grub в соответствии со способом 1 предыдущего пункта, после чего можно задать пункт меню для следующей загрузки командой grub-reboot и запустить команду reboot. В момент начала загрузки конфигурация Grub автоматически вернётся в исходное состояние, и следующая загрузка компьютера произойдёт по-старому. Это аналогично использованию опции -R загрузчика Lilo.

Защита от зацикливания на перезагрузке

Если загрузка ОС не закончилась успешно, или осуществлялась загрузка в режим восстановления, то при следующей загрузке – меню выбора GRUB будет выводится и ждать явного вмешательства оператора (так же, как если бы вы выставили GRUB_TIMEOUT=-1). При этом последующие аппаратные сбросы системы – не помогут проскочить меню.

Зачем это сделано

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

Совсем иная ситуация при загрузке – никакие сервисы по очистке логов не работают (они запускаются позже) и, если, в процессе загрузки система свалится и начнет перезагружаться, то лог будет только расти. И расти он будет до тех пор пока будут повторятся перезагрузки, и будет хватать места на том разделе диска, где расположен каталог /var/log. А когда на разделе с /var/log место кончится то система зависнет уже наглухо и даже в режим восстановления ее будет не загрузить. Загрузится можно будет только с LiveCD/USB (с Live системы и надо будет лечить систему, первым делом руками зачистив логи).

Защита встроенная в GRUB не позволит системе попасть в столь тяжелое положение.

А что если…

Функция (как видно) – безусловно полезная, однако она может быть неудобной для без-клавиатурных станций – на них «зависшее» меню GRUB-а – это не преимущество, а некоторые сложности (без подключения клавиатуры такая станция, попавшая в меню GRUB, никогда не загрузится вообще).

А что если отключить?

Собственно сами случаи, когда циклится загрузка – не так и часты, если машина работает без графики то там вообще мало чему падать на этапе загрузки, да еще так, что бы система вышла на перезагрузку. Разве что совсем кривой прикладной софт встроенный в процесс загрузки…

Гораздо чаще загрузка прерывается из за внешних условий – например пропадает питание, или кто-то сбрасывает грубо систему.

Как это работает

Реализовано все достаточно просто – в скрипте /boot/grub/grub.cfg переменная окружения GRUB recordfail устанавливается в ходе каждой загрузки в 1.
Скрипт /etc/init.d/grub-common запускается на финальных этапах загрузки (линки с именем S99grub-common есть в /etc/rc2.d, /etc/rc3.d, … /etc/rc5.d). grub-common сбрасывает переменную recordfail в 0.
Если скрипт /etc/init.d/grub-common не отработает, то не сброшенное значение recordfail предотвращает автоматическую загрузку, меню GRUB появляется и потребуется явное интерактивное вмешательство со стороны оператора.

Для того, что бы убрать необходимость интерактивного вмешательства в процесс загрузки нужно установить переменную GRUB_RECORDFAIL_TIMEOUT в /etc/defaul/grub в то количество секунд, которые меню GRUB-а будет ждать ввода в случае когда recordfail=1.
Сохранить изменения и обновить GRUB (sudo update-grub).

Вы должны понимать, что проделанные изменения могут привести к довольно печальным последствиям, если все-таки у вас случится ситуация, при которой зациклится перезагрузка системы.

Финт с GRUB_RECORDFAIL_TIMEOUT может не сработать в некоторых (старых) версиях GRUB. Тогда нужно редактировать /etc/grub.d/00_header. Нужно найти функцию make_timeout (), которая выглядит примерно так:

make_timeout ()
{
    cat << EOF
if ; then
  set timeout=-1
else
  set timeout=${2}
fi
EOF
}

и заменить в ней строчку

set timeout=-1

на

set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1}

После этого финт с GRUB_RECORDFAIL_TIMEOUT заработает. Нужно сохранить изменения и обновить GRUB (sudo update-grub).

Изменения в скрипте /etc/grub.d/00_header могут быть утеряны при обновлении пакета grub-common. Но в новых версиях GRUB переменная GRUB_RECORDFAIL_TIMEOUT уже внедрена (т.е. эти изменения уже сделаны в 00_header).

Как установить/восстановить загрузочную запись 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, в режиме legaсy, вы получаете ошибку:

# 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

Способы инсталляции загрузчика

Установка GRUB может быть произведена не только в MBR. По желанию, загрузчик можно расположить в любом загрузочном секторе абсолютно любого жёсткого диска. Несмотря на то, что бывают ситуации, когда такое решение оказывается неоправданным, в перечисленных ниже случаях, установка GRUB в другой раздел весьма упрощает задачу юзера.

Прибегнуть к GRUB install можно в том случае, если запуск загрузчика осуществляется посредством аналогичного устройства Windows. Также решение будет целесообразным, если на компьютере установлено несколько вариантов ОС Linux и ранее инсталлированный GRUB пользователь не собирается менять на другой загрузчик.

Предпочтительнее для оптимизации процесса выбирать системный раздел Linux. Иными словами, если операционная система находится в /dev/sda7, для правильной установки, пользователь должен использовать нижеприведённые команды. Главным различием установки GRUB в MBR или системный раздел является необходимость указать в setup вместо hd0 выбранный раздел.

Прежде чем осуществить GRUB install, следует учесть одну особенность некоторых файловых систем, так как иногда загрузочные сектора раздела не могут быть использованы загрузчиком или иным типовым приложением. В частности, одной из таких систем является XFS — инсталлированный в её загрузочный сектор GRUB, попросту разрушит всю файловую систему.

Автоматическая настройка

GRUB2 традиционно настраивается использованием утилиты grub-mkconfig для генерации конфигурационного файла.

grub-mkconfig создаёт конфигурационный файл основываясь на шаблонах расположенных в /etc/grub.d. Стандартных шаблонов, в основном, должно хватить для большинства схем загрузок.

00_header  10_linux  20_linux_xen  30_os-prober  40_custom  41_custom  README

Схема именования ядер

Чтобы grub-mkconfig определила доступные ядра, их имена должны начинаться с vmlinuz- или kernel-.

Например:

Код Пример названия ядер, которые GRUB2 может определить

 /boot/vmlinuz-3.4.3
 /boot/kernel-2.6.39-gentoo
 /boot/kernel-genkernel-x86_64-3.17.1-gentoo-r1

Если используется initramfs, то название initramfs файла должно начинаться с initramfs- или initrd-. Версия initramfs должна совпадать с версией образа ядра. Файлы, созданные с помощью genkernel, также будут найдены.

Например:

Код Пример initramfs имён, которые GRUB2 может определить

 /boot/initrd.img-3.4.3
 /boot/initrd-3.4.3.img
 /boot/initrd-3.4.3.gz
 /boot/initrd-3.4.3
 /boot/initramfs-3.4.3.img
 /boot/initramfs-genkernel-3.4.3-gentoo
 /boot/initramfs-genkernel-x86_64-2.6.39-gentoo

Для создания файла grub.cfg выполните команду grub-mkconfig:

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.9
done

Тихая загрузка ядра

Для загрузки ядра без вывода на экран системных сообщений отредактируйте файл /etc/default/grub, добавив в переменную GRUB_CMDLINE_LINUX_DEFAULT.

Файл Пример параметров тихой загрузки

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

Systemd

Для загрузки systemd при использовании GRUB2 отредактируйте переменную GRUB_CMDLINE_LINUX вот так:

Файл Systemd пример

GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"

Как работает GRUB?

Загрузчик GRUB – это GNU-проект, разработанный специально для использования в качестве загрузчика по-умолчанию для систем UNIX и Linux. Для подавляющего числа дистрибутивов GRUB давно поставляется «из коробки». Его главной задачей является работа со списком (который подготавливается заранее вручную или автоматически) вариантов загрузки, из которого выбирается нужный для последующей загрузки системного ядра с определёнными для выбранного варианта параметрами.

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

GRUB читает конфигурацию загрузки при каждом запуске компьютера. Сами файлы конфигурации (в зависимости от используемой версии и дистрибутива) следующие: /boot/grub/menu.lst, /boot/grub/grub.conf или /boot/grub/grub.cfg для версии 2. В системах Red Hat используются файлы grub.conf, а для Ubuntu, SUSE и Solaris – menu.lst. Эти файлы имеют незначительные различия в синтаксисе конфигурации. Для примера, содержимое grub.conf может быть таким:

default=0
timeout=10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Enterprise Linux Server (2.6.18-92.1.10.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.1.10.el5 ro root=LABEL=/

В этом примере конфигурируется загрузка всего одной системы Red Hat, которая (согласно default=0) будет загружена автоматически по прошествии 10 секунд (timeout=10), если не будет нажата какая-либо клавиша на клавиатуре. При этом корневая файловая система должна искаться, согласно параметру (hd0,0) команды root, на первом разделе первого жесткого диска.

Для поиска файла ядра задаётся путь относительно загрузочного раздела, монтируемого в каталог /boot. Для приведённого примера ядро будет загружаться из файла /vmlinuz-2.6.18-92.1.10.el5. Затем загрузчик выведет на экран заставку из файла /boot/grub/splash.xpm.gz, находящегося, как указано в команде splashimage, на разделе (hd0,0).

Настраивать параметры загрузки можно и в интерактивном режиме, используя интерфейс командной строки. Для этого нужно на экране меню загрузки нажать клавишу «c».

После чего мы попадем в командную строку. В которой уже можно выполнять команды.

Таким образом с помощью командной строки возможны все те же действия, что выполняются по инструкциям из файлов конфигурации. Как можно видеть, для этого загрузчик предоставляет целый набор команд со своими параметрами. Это бывает очень полезным, когда необходимо загружать системы, не имеющие соответствующей конфигурации в конфигурационных файлах или когда нужно восстановить «сломанную» конфигурацию. Для ознакомления со списком самых главных команд используется клавиша <Tab> в режиме работы командной строки загрузчика. В следующей таблице представлены наиболее часто используемые команды GRUB:

КомандаНазначение
rebootПерезагружает систему
findПроизводит поиск файла во всех смонтированных логических разделах
rootЗадаёт корневое устройство (логический раздел)
kernelЗагружает ядро системы с корневого устройства
helpВыводит интерактивную справку по команде
bootЗагружает систему с указанного образа ядра
Поделитесь в социальных сетях:FacebookXВКонтакте
Напишите комментарий