GRUB — загрузчик системы
GRUB (GRand Unified Bootloader 1) ) — программа-загрузчик операционных систем.
GRUB является эталонной реализацией загрузчика, соответствующего спецификации Multiboot и может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS -DOS, OS /2 и другие системы.
После настройки GRUB пользователь при включении компьютера видит список операционных систем, которые установлены на его компьютер и которые можно загрузить, выбрав подходящую и нажав Enter .
GRUB позволяет пользователю при загрузке задавать произвольные параметры и передавать их в ядро Multiboot-совместимой ОС для дальнейшей обработки.
GRUB — самый популярный загрузчик в мире Linux и является загрузчиком по умолчанию в большинстве известных дистрибутивов.
Здесь и далее в иных статьях под названием программы GRUB подразумевается GRUB 2, который используется в операционных системах семейства Ubuntu начиная с версии 9.10, до него использовался GRUB первой версии, сейчас известный как GRUB Legacy. GRUB 2 полностью переписан с нуля и не имеет ничего общего с GRUB Legacy, разработка которого была остановлена в пользу более совершенного и мощного GRUB.
Первые шаги
При первом сравнении GRUB со старым GRUB Legacy самым весомым различием оказывается измененная структура файлов конфигурации.
Настройка GRUB производится теперь принципиально иным способом — основным файлом конфигурации является «/boot/grub/grub.cfg«. Однако же, не торопитесь править его так, как привыкли это делать с «menu.lst» в GRUB Legacy. При внимательном прочтении мы видим в начале файла «grub.cfg» такие строки:
# # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub #
И об этом нас предупреждают не просто так. Ведь «grub.cfg» генерируется автоматически с использованием нескольких скриптов. Поэтому после следующего обновления GRUB ваш «grub.cfg» будет создан заново, и все ваши правки будут утрачены.
Кроме файла «grub.cfg», отвечающего за загрузочное меню, имеются файл «/etc/default/grub» и папка «/etc/grub.d«. Рассмотрим их подробнее.
/etc/default/grub
Данный файл содержит в себе основные настройки для GRUB. Через него, собственно, они и изменяются. Для наглядности ниже приводится примерное содержимое этого файла:
GRUB_DEFAULT=6 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT="2" GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entrys #GRUB_DISABLE_LINUX_RECOVERY="true"
Файл представляет из себя набор опций в понятном формате ОПЦИЯ=ЗНАЧЕНИЕ.
Наиболее часто встречающаяся потребность при настройке GRUB — изменение стандартного пункта загрузки и/или времени показа меню. Рассмотрим же, как это делается.
Изменение стандартного пункта загрузки
По умолчанию стандартный пункт (выделенный при показе меню) — верхний в списке. После установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом.
Значением «GRUB_DEFAULT» является номер пункта меню, который должен быть выбран стандартным. Чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. Есть два варианта:
Просмотреть содержимое «/boot/grub/grub.cfg» и сосчитать, какой по счету окажется нужная запись;
Перезагрузиться и более наглядно посмотреть меню загрузки.
Нумерация пунктов меню начинается с нуля. Значение по умолчанию — 0, поэтому и выбирается первый пункт.
Пятому сверху пункту будет соответствовать значение 4, второму — 1, первому — 0. В вышеприведенном примере установлено значение 6, то есть стандартным задан седьмой пункт меню.
Команда sudo grub-reboot 1 однократно выбирает второй пункт меню по-умолчанию (только для следующей загрузки),
Команда sudo grub-set-default 2 выбирает на постоянной основе третий пункт меню по-умолчанию.
Или же можно указать значение идентификатора (id), оно должно быть именно таким, каким мы его видим в «/boot/grub/grub.cfg«. Данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за сбившейся нумерации.
Пример
Если в «grub.cfg» пункт меню выглядит так:
menuentry ‘Example GNU/Linux distribution’ —class gnu-linux —id example-gnu-linux
То значение параметра «GRUB_DEFAULT» должно указываться именно в виде:
GRUB_DEFAULT=example-gnu-linux
Ранее документацией предлагалось указывать название пункта меню загрузки (так, как он отображается в самом меню). Хотя этот способ по-прежнему работает, использовать его не рекомендуется, поскольку эти названия могут меняться, например, при обновлении ядра/версии ОС
Изменение времени отображения меню
По умолчанию меню загрузки отображается 10 секунд (при наличии других установленных ОС, если система одна — GRUB по умолчанию не отображается и сразу начинает загрузку), после чего загружается стандартный пункт, если раньше не нажат Enter или не выбран другой пункт, что останавливает таймер. За эту задержку отвечает параметр «GRUB_TIMEOUT», значение задается в секундах.
Если поставить значение «-1», то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт
Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение — 2, то есть меню отображается две секунды.
«Скрытое» меню
В случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а GRUB будет загружать вас напрямую в систему. Однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. Для этого предусмотрено «скрытое меню» за него отвечает параметр «GRUB_HIDDEN_TIMEOUT».
В случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). Данное значение позволит приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Esc .
Если значение установлено в 0, то задержки не будет, однако вызвать меню можно, удерживая при загрузке Shift
Параметр «GRUB_HIDDEN_TIMEOUT_QUIET» отвечает за отображение таймера во время паузы. Если его значение «true» таймер отображаться не будет, а со значением «false» будет.
Чтобы GRUB отображал меню со списком установленных операционных систем, без нажатия клавиш вызова меню (например Shift или Esc ) необходимо:
Открыть файл /etc/default/grub для редактирования:
sudo gedit /etc/default/grub
Выставить время до автоматической загрузки выделенной системы/ядра (например 10 секунд):
GRUB_TIMEOUT="10"
Чтобы меню GRUB отображалось, необходимо закомментировать следующую строчку (значком #):
#GRUB_HIDDEN_TIMEOUT=0
Как открыть меню GRUB при загрузке компьютера
Если при загрузке Linux вы не видите меню GRUB, то, скорее всего, установлена нулевая задержка (таймаут); меню не показывается, и сразу начинается загрузка операционной системы.
Чтобы показать меню GRUB нужно нажать (в некоторых случаях удерживать) определенную клавишу во время загрузки компьютера, а именно после того, как показался экран приветствия (логотип) BIOS/UEFI.
Для компьютеров с BIOS
Для старых компьютеров, с классическим BIOS, чтобы показать меню GRUB, нужно нажать и удерживать клавишу Shift .
Для компьютеров с UEFI
Для современных компьютеров, использующих UEFI, чтобы показать меню GRUB, нужно нажать клавишу Esc .
Если вы нажали и удерживали клавишу Esc , то, возможно, вы попадете в командную строку GRUB. Чтобы открыть меню введите команду normal или используйте другой способ, описанный в заметке Как попасть в меню GRUB, если находишься в командной строке GRUB?
Примечание: справедливо для версии GRUB 2.
Аварийный запуск системы из командной строки GRUB
Краткая инструкция по загрузке Windows и Linux из командной строки GRUB на случай каких-либо неполадок. Сразу оговорюсь, что сам grub2 должен запускаться, если же вы не можете попасть в консоль grub2, то вам скорее всего потребуется переустановка grub.
Запуск Linux с помошью командной строки GRUB
Нам понадобится написать всего 3 строчки: «set root«, «linux» и «initrd» и в конце дать команду «boot».
set root=(hd0,5)
linux /boot/vmlinuz-2.6.32-generic root=/dev/sda5
initrd /boot/initrd.img-2.6.32-generic
boot
Немного поясню — в строке set root указываем на корневой раздел linux. В моем случае это был «hd0,5», он же «/dev/sda5», то есть пятый раздел первого диска. Список доступных разделов диска можно получить, выполнив команду ls.
Далее, командой linux, указываем загружаемое ядро. Полное название ядра знать не обязательно, просто пишем «linux /boot/vmlinuz» и нажимаем tab. Консоль сама допишет правильный результат. У меня был предложен выбор между старым и новым ядром. Только в конце строки не забудьте дописать параметр root=/dev/sda5 или что там у вас.
Для старта системы этого уже должно хватить. Осталось выполнить команду boot. В некоторых случаях перед выполнением «boot» попробуйте дополнительно выполнить команду initrd, как описано выше в примере.
Запуск Windows из командной строки GRUB
Процесс запуска Windows из консоли GRUB ещё проще. Как и в случае с Linux в начале указываем корневой раздел, где находится Windows. В моем случае окошки установлены в /dev/sda1. После чего, отдаем команду chainloader +1, которая заставляет grub2 передать дальшейшее управление загрузкой Windows-загрузчику. Даем команду boot на запуск системы и наблюдаем загрузку винды. Пример:
set root=(hd0,1)
chainloader +1
boot
Подписывайтесь на канал
Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.
Комментариев: 8
- 2018-03-08 в 11:13:03 | Сергей Единственный работающий мануал на весь рунет. Респектище автору.
- 2018-09-22 в 20:03:52 | Роман Если не знаете на каком разделе установлен Линукс (вдруг), можно каждый раздел проверить командой типа ls(hd0,1)/ (со слешем в конце).
- 2018-11-04 в 16:01:30 | Ильшат Спасибо.
- 2018-11-22 в 09:16:11 | cryptoparty Привет, а как сделать так, чтобы каждый раз это не прописывать?
- 2018-11-22 в 11:49:25 | dre@mer Для этого нужно прописать соотвествующие изменения в загрузчик GRUB. Обычно нужные строки добавляются автоматически при установке системы.
- 2019-11-06 в 07:30:43 | Рустам Спасибо автору. Что делать, если видит только разделы msdos, но я знаю что там есть Linux
- 2020-03-06 в 01:43:50 | Александр Спасибо автору.
9.6. Команды GRUB
GRUB разрешает запуск команд в интерфейсе командной строки. Некоторые команды используют аргументы. Аргументы должны разделяться пробелом.
Наиболее распространенные команды:
- boot — загружает операционную систему или последний загруженный последовательный загрузчик.
- chainloader путь/к/файлу> — передает управление файлу. Если файл расположен в первом секторе раздела, то можно просто использовать chainloader +1 . Пример использования команды chainloader :
chainloader +1
initrd /initrd-2.6.8-1.523.img
- — определяет устройство, раздел и файл образа первого загрузчика, например, (hd0,0)/grub/stage1 .
- — определяет диск, куда будет установлен загрузчик первой стадии, например, (hd0) .
- — передает загрузчику второй стадии информацию о расположении загрузчика первой стадии, например, (hd0,0)/grub/stage2 .
- p — указывает команде install выполнить поиск файла конфигурации меню , например, (hd0,0)/grub/grub.conf .
Предупреждение
Команда install перезаписывает все существующие данные в MBR.
kernel /vmlinuz-2.6.8-1.523 ro root=/dev/VolGroup00/LogVol00
root (hd0,0)