Linux как узнать версию grub

Обновлено: 02.07.2024

Кратко о GRUB
GRUB (GRand Unified Bootloader) -- это самый популярный загрузчик операционной системы в мире пользователей *nix. В большинстве дистрибутивов по умолчанию используется GRUB версии 1 или новый -- GRUB2. По сравнению с также достаточно популярным загрузчиком lilo, GRUB имеет больше возможностей, но за это его многие и не любят, считая его раздутым и переполненным ненужными функциями. Однако я считаю, что GRUB является прекрасным загрузчиком, и он достоин серии статей о нём.

В данной статье я расскажу о некоторых полезных командах, которые вы можете использовать в терминале GRUB2. Мы не будем рассматривать их все, а рассмотрим самые нужные и важные. Для изучения полного списка команд вы можете использовать документацию grub, например, команда help выведет весь список доступных команд. Маловероятно, что вам понадобятся они все и поэтому в данной статье будут рассмотрены только самые привычные и полезные.

Как попасть в терминал GRUB2?
Терминал GRUB2 -- это строка ввода команд, которая доступна непосредственно из меню загрузчика GRUB2. Меню загрузчика -- это список, состоящий из операционных систем, версий ядер и утилиты memtest, который отображается перед стартом непосредственно ОС. Для того чтобы из меню загрузчика GRUB2 перейти в терминал необходимо нажать клавишу "C". После этого у вас появится традиционное поле ввода команд.
Если меню загрузчика не видно
Когда у вас установлен один дистрибутив, то, скорее всего, меню загрузчика будет скрыто. Для решения этой проблемы необходимо нажать клавишу "Esc" (escape) на первых порах старта компьютера.
Убедитесь, что в файле /etc/default/grub строка GRUB_HIDDEN_TIMEOUT равна положительному числу, а если это не так, то установите нужное значение в секундах, например GRUB_HIDDEN_TIMEOUT=10 .

Команды, имеющие конкретное значение
help -- выводит список всех доступных команд.
help cat -- в качестве опции можно использовать название конкретной команды для получения информации о ней.

root -- важная команда, для вывода раздела жесткого диска, используемого в данный момент, например (hd0,1), и задания нового коренного (root) раздела.
Для изменения коренного раздела нужно использовать номер раздела (в специфическом формате GRUB), например root (hd0,2) .
О том, как узнать номер раздела, читайте про команду ls .

ls -- работает почти также, как и этаже команда в linux, но может показывать информацию о разделах.
Команда, в виде ls выведет список разделов жесткого диска (подобно fdisk -l, но представит разделы в виде формата записи для GRUB -- (hdX,Y), где X и Y - числа).
ls раздел_диска (например, ls (hd0,1) ) -- выведет подробную информацию об конкретном раздела жесткого диска: UUID раздела и другую полезную информацию.
ls путь_до_папки (например, ls / ) -- полностью аналогично работе команды ls в терминале linux - выводит список файлов и папок в заданной папке. Примечательно, что вывод будет в формате через запятую (как при использовании опции -m в linux). К сожалению, вывод происходит без цвета (нет подсветки разным цветом разных типов файлов, как это можно сделать в linux опцией --color).

cat путь_до_файла -- очень полезная команда, выводящая на экран содержимое текстовых файлов.
Пример использования:
cat/etc/default/grub .

reboot -- как не трудно догадаться по названию, перезагружает компьютер.

background_image путь_до_изображения -- кошерная команда, позволяющая менять фоновое изображение загрузчика. Но довольно странно этим заниматься, ведь GRUB - это загрузчик, а не среда рабочего стола, но все же возможность есть.

linux путь_до_ядра опции_ядра и initrd путь_до_initrd_образа -- загружает указанные ядро и initrd соответственно.

SET -- универсальная команда для изменения параметров
set параметр=значение -- используется для изменения параметров загрузчика. Например, в конфигурационном файле /boot/grub/grub.cfg есть строка set lang=en , которая задаёт параметр lang (язык). Для изменения этого параметра можно воспользоваться командой set:
set lang=ru

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

Автор: Антон Павлович, дата: 25 октября 2010 , время: 20:31:23 (MSK).
Так всё-таки почему Вы считаете «что GRUB является прекрасным загрузчиком»? Автор: Subsanek, дата: 25 октября 2010 , время: 20:59:07 (MSK).
Антон Павлович, он гибконастраиваемый и имеет те самые полезные команды, которые описаны в этой статье. Про гибконастраиваемость напишу в следующей статье. Другие загрузчики не имеют столько функционала а запасе, как GRUB2. Автор: Антон Павлович, дата: 26 октября 2010 , время: 08:31:54 (MSK).
Так в чём гибкость то? Можно конкретный пример, чего может граб2 и не может лило?
Не заметил полезность команд установки языка, загрузки «обоев», ребут, хелп, кат и рут. Автор: vanuch, дата: 26 октября 2010 , время: 13:34:50 (MSK).
>Убедитесь, что в файле /etc/default/grub строка GRUB_HIDDEN_TIMEOUT равна положительному числу, а если это не так, то установите нужное значение в секундах, например GRUB_HIDDEN_TIMEOUT=10.
На самом деле можно оставить 0 и просто удерживать Shift перед стартом grub

Автор: Subsanek, дата: 02 ноября 2010 , время: 20:15:08 (MSK).
>Так в чём гибкость то? Можно конкретный пример, чего может граб2 и не может лило?

Lilo не может вывести список файлов в папке, обзор файловой системы или вывести содержимое целого файла на экран.
Тем-более даже если lilo имеет такойже богатый набор функций, то это не опровергнет высказывание: «что GRUB является прекрасным загрузчиком». Прошу не придираться к словам.

>Не заметил полезность команд установки языка, загрузки «обоев», ребут, хелп, кат и рут.

Всё относительно - одному очень полезны, а другому совсем не полезны.

Автор: Антон Павлович, дата: 02 ноября 2010 , время: 20:42:18 (MSK).
О. Соизволил-таки ответить. Не прошло и недели.
Да, да, а еще лило не умеет проигрывать видео вот жалость то правда?
Ни фига тут не относительно. Без рута ты, например, вообще не загрузишься. Хелп, говоришь? А ты сам то его почитать пробовал? В чём профит ката в загрузчике? Ребут на этапе работы загрузчика очень полезная команда. Есть реальный пример использования? В чём полезность локали и обоев на ЛОКАЛЬНОЙ машине или СЕРВЕРЕ?

Автор: Subsanek, дата: 02 ноября 2010 , время: 22:27:02 (MSK).
>Не прошло и недели.

Судя по дате комментов прошла неделя) В сети почти не был и не успел ответить раньше.

Я лично использовал команду reboot в grub и довольно часто. Было полезно при "фэйлах" с BIOS. Профит "ката" в том, что этой командой можно просмотреть нужный файл не дожидаясь старта полноценной ОС.
На сервере обои не нужны, а вот на собственном компьютере будут нужны для красоты, но конечно если есть желание. В lilo обои вроде тоже можно использовать.
Вообще grub vs lilo - это холивар и сами знаете, что подобные споры могут идти вечно. Я в статье не писал, что следует отдавать предпочтение grub, а не lilo - все выбирают сами. Когда я был на gentoo, то использовал lilo и был вполне доволен, но это не значит, что я должен ненвидеть grub, хоть и у него есть недостаток в виде "перегруженности".

Автор: JohnLee, дата: 22 июня 2015 , время: 19:54:26 (MSK).
Вы скажите, зачем команда "find"? Не могу понять, что она делает. Ясно, что ищет что-то. Для чего в grub.cfg используется?

Автор: Димон Айфон, дата: 13 декабря 2015 , время: 23:46:31 (MSK).
привет, как мне запустить через груб винду которая установлена на ссд, он не детектится биосом - напрямую не грузит, в загруженном с флешки livecd ссд работает.

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

как разбиваются жесткие диски и систему их разбиения как разбиваются жесткие диски и систему их разбиения

MBR Master Boot Record это первые 512 Байт диска, это не раздел, не партиция это участок места в начале жесткого диска, зарезервированный для загрузчика Операционной системы и таблицы разделов.

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

В настоящее время большинство машин не использует BIOS, а использует UEFI это современная замена BIOS, которая более функциональнее и имеет больше плюсов. Нужно понимать, что UEFI это более защищенная загрузка и более скоростная, потому что позволяет инициализировать параллельно различные интерфейсы и различную последовательность команд. Так вот если у нас не BIOS, а UEFI, то HDD будет разбит не по принципу MBR, а по принципу GPT - GUID Partition table . Это другой формат размещения таблицы разделов. Это UEFI, а UEFI использует GPT там, где BIOS использует MBR. GPT для сохранения преемственности и работы старых операционных систем оставила в самом начали диска блок для MBR. Разница изначально между MBR и GPT, в том, что MBR использует адресацию типа цилиндр, головка, сектор, а GPT использует логические блоки, LBA0, LBA1, LBA2. А также для GPT необходимо понимать, что есть логическое дублирование оглавление таблицы разделов записано, как в начале, так и в конце диска. И в принципе для организации резервного копирования Linux в принципе ничего не предлагает. Но в случае если у нас MBR это необходимо делать.

Для начала надо нам понять, что и куда у нас смонтировано какой раздел у нас является загрузочным и его скопировать. Вводим команду fdisk l и видим следующее:

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.cfg» генерируется автоматически с использованием нескольких скриптов. Поэтому после следующего обновления GRUB ваш «grub.cfg» будет создан заново, и все ваши правки будут утрачены.

Кроме файла «grub.cfg», отвечающего за загрузочное меню, имеются файл «/etc/default/grub» и папка «/etc/grub.d«. Рассмотрим их подробнее.

/etc/default/grub

Данный файл содержит в себе основные настройки для GRUB. Через него, собственно, они и изменяются. Для наглядности ниже приводится примерное содержимое этого файла:

Файл представляет из себя набор опций в понятном формате ОПЦИЯ=ЗНАЧЕНИЕ.
Наиболее часто встречающаяся потребность при настройке 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» пункт меню выглядит так:

То значение параметра «GRUB_DEFAULT» должно указываться именно в виде:

Ранее документацией предлагалось указывать название пункта меню загрузки (так, как он отображается в самом меню). Хотя этот способ по-прежнему работает, использовать его не рекомендуется, поскольку эти названия могут меняться, например, при обновлении ядра/версии ОС

Изменение времени отображения меню

По умолчанию меню загрузки отображается 10 секунд (при наличии других установленных ОС, если система одна - GRUB по умолчанию не отображается и сразу начинает загрузку), после чего загружается стандартный пункт, если раньше не нажат Enter или не выбран другой пункт, что останавливает таймер. За эту задержку отвечает параметр «GRUB_TIMEOUT», значение задается в секундах.

Если поставить значение «-1», то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт

Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение - 2, то есть меню отображается две секунды.

"Скрытое" меню

В случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а GRUB будет загружать вас напрямую в систему. Однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. Для этого предусмотрено «скрытое меню» за него отвечает параметр «GRUB_HIDDEN_TIMEOUT».

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

Параметр «GRUB_HIDDEN_TIMEOUT_QUIET» отвечает за отображение таймера во время паузы. Если его значение «true» таймер отображаться не будет, а со значением «false» будет.

Чтобы GRUB отображал меню со списком установленных операционных систем, без нажатия клавиш вызова меню (например Shift или Esc ) необходимо:

Выставить время до автоматической загрузки выделенной системы/ядра (например 10 секунд):

Убираем подменю

Чтобы раскрыть все меню используем такой параметр:

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

Особые случаи

Поведение меню отличается от заданного переменными GRUB_TIMEOUT и GRUB_HIDDEN_TIMEOUT когда предыдущая загрузка не завершилась успехом или предыдущаяя загрузка происходила в режиме восстановления. Подробно это описано далее, в разделе «Защита от зацикливания на перезагрузке». Полную справку по параметрам файла настроек можно дав команду:

Изменение стандартных параметров загрузки ядра

Иногда бывает необходимо загружать ядро системы с какими-либо особыми параметрами (например, для корректной работы специфического оборудования). В этом случае весьма полезен будет параметр «GRUB_CMDLINE_LINUX_DEFAULT» он отвечает за те параметры, с которыми запускаются ядра при загрузке. Его значение по умолчанию - «quiet splash»: происходит показ графической заставки при запуске системы без отображения какой-либо текстовой информации.

Вы можете добавить необходимые вам параметра запуска ядра, приведя это значение к виду «quiet splash your_param1 your_param2», то есть дописав через пробел нужные параметры.

Пример

Чтобы заменить графическую заставку во время загрузки на информацию о загрузке компонентов системы (это позволит проследить за процессом загрузки и выявить неполадки). Необходимо заменить строчку:

/etc/grub.d

Эта папка содержит в себе скрипты, которые используются для создания файла «grub.cfg». При обновлении GRUB они находят все установленные на компьютере системы и ядра и формируют в файле «grub.cfg» меню загрузки, которое мы и видим. Два основных из них:

«10_linux» и «30_os-prober» отвечают за поиск Linux ядер и остальных ОС на других разделах соответственно. Файл «40_custom» позволяет добавлять свои пункты загрузки. Это может быть полезно, если вы, например, хотите добавить какие-то особые варианты загрузки системы. Файл «40_custom» должен заканчиваться пустой строкой, иначе последний пункт не будет отображаться в меню!

Пример

Добавляем режим загрузки без графической заставки, с текстовым отображением процесса загрузки (verbose mode). Для этого мы немного отредактируем обычный пункт загрузки. допустим, он выглядит так (в «/boot/grub/grub.cfg«):

Для того, чтобы сделать из этого verbose mode, нам нужно убрать опции quiet и splash и изменим название самого пункта. В итоге получаем:

Все это и добавляем в «40_custom» в конец файла. Строка с echo не является обязательной она лишь будет сигнализировать нам о том, что наш пункт найден и добавлен при обновлении GRUB.

Команды консоли GRUB

Чтобы попасть в консоль, нужно нажать клавишу C во время отображения меню загрузки.

Довольно универсальная команда при использовании в чистом виде выдает список жестких дисков и разделов. Также она может быть использована как одноименная команда в Linux - для вывода содержимого папки. например:

Еще одно полезное свойство комадны «ls» - она позволят получить информацию о любом разделе:

Команда сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).

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

linux

Аналог команды «kernel» в GRUB Legacy. Загружает указанное Linux-ядро:

initrd

Загружает указанный initrd-образ. Используется так:

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

chainloader

Передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки:

Для (загрузчика Windows) можно использовать:

При использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого и тип файловой системы на этом разделе, также команда может быть использована для задания другого root-раздела. Раздел задается в «grub device» - формате »(hd*,*)«. например:

После задания раздела команда сообщит новый root-раздел и тип файловой системы. Примечание: «root hd(*,*)» не всегда корректно срабатывает. более предпочтительным вариантом является «set root» (см. ниже)

Весьма универсальная команда для изменения различных параметров. Служит для задания значений переменных и используется в формате:

Наиболее необходимое ее применение - для задания root-раздела, например:

Также с ее помощью можно, например, «на лету» изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. Для этого изменяем переменные «color_normal» - для обычного пункта (и текста в консоли) и «color_highlight» для выделенного пункта соответственно. Например, попробуем такой вариант:

search

Служит для поиска раздела по UUID, метке или заданному файлу. Имеет следующие ключи:

-n (или –no-floppy) - не проверять флоппи-дисковод (чтоб не трещал) -s (или –set) - установить найденный раздел в качестве значения заданной переменной.

lsfonts

Команда отобразит список загруженных в настоящий момент шрифтов.

При использовании в чистом виде выведет список доступных команд. В формате:

Выведет справку по всем командам, начинающимся на «r».

Отобразит справку по команде «search»

reboot

background_image

Позволяет «на лету» изменить фоновое изображение. Используется в формате:

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

Данная команда не заменит ваши настройки оформления, фон будет изменен лишь на текущий сеанс.

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

terminal_output.console

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

Применение изменений

После того, как мы отредактировали и сохранили наши файлы. Нужно закончить дело, обновив файл «grub.cfg». Это довольно просто - нужно всего лишь выполнить команду:

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

Нюанс с нумерацией дисков и разделов

В GRUB имеется еще одно важное отличие от старого GRUB Legacy, а именно изменилась нумерация разделов диска. Нумерация дисков идет с нуля, а нумерация разделов - с единицы!

Если в GRUB Legacy первый раздел первого диска (sda1) именовался «hd0,0». То в GRUB, первый раздел первого диска (sda1) теперь будет «hd0,1».

Создание дополнительного меню загрузки

Суть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя:

Поскольку файл скопируется с правами 444, выставим ему права на запись:

Теперь открываем его в любимом текстовом редакторе и изменяем:

Если вы в достаточной мере знаете структуру «grub.cfg» и понимаете, какие строки что делают, можно значительно сократить свой файл, убрав лишнее и привести его к более удобочитаемому виду. set default задаем пункт меню по умолчанию, указав или его номер или точное название. set gfxmode здесь задается разрешение экрана в привычном формате WxH. Можно также указать глубину цвета, например «1024x768x32». можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает - третий и т.д. Например: Теперь зададим время отображения меню, для этого ищем строку set timeout , и устанавливаем значение -1 для отключения таймера.

Для задания фонового изображения найдем строку с if background_image (подразумевается, что в вашем «grub.cfg» используется фоновое изображение. Если нет - смотрите пример файла в конце раздела). После команды background_image прописан путь к файлу картинки, поменяйте его на нужный файл.

Обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!

Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme« (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с set color_highlight и else теперь настройка будет такой:

color_normal задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консоли menu_color_normal отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятся menu_color_higlight задает цвет/фон выделенного пункта меню.

Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус.

Настроив свой файл, сохраните его Ctrl + Shift и закройте.

Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/grub.d/40_custom« добавим запись такого вида:

Если ваш путь к файлу отличается - исправьте его.

Если вы используете отдельный boot-раздел, путь будет таким: »/grub/custom.cfg«. Также учтите, что «40_custom» должен заканчиваться пустой строкой!

Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность.

Обновите свой «grub.cfg» выполнив команду:

Теперь пункт перехода в дополнительное меню появится в главном, для того чтобы выйти обратно в главное меню, достаточно нажать Esc

В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума):

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

Если загрузка ОС не закончилась успешно, или осуществлялась загрузка в режим восстановления, то при следующей загрузке - меню выбора 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 (), которая выглядит примерно так:

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

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

Вы когда-нибудь интересовались различными этапами загрузки операционной системы? Что происходит, когда вы включаете свой компьютер?

Этапы процесса загрузки Linux условно можно разделить на:

Загрузка BIOS (POST).

Первый этап загрузки (MBR или GPT).

Второй этап загрузки (GRUB2).

Инициализация главного процесса (init или systemd).

Уровни выполнения (runlevels).

Сейчас мы их и рассмотрим.

Загрузка BIOS (POST)

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


Меню загрузки в BIOS (Boot Manager) представляет собой список, в котором вы можете выбрать загружаемую операционную систему. Если на вашем компьютере установлено несколько дистрибутивов Linux или других операционных систем, вы можете добавить их в меню загрузки. Последняя установленная ОС будет показана в верхней части Boot Manager.

На следующем рисунке вы можете видеть, что на моем компьютере установлены Ubuntu и Windows. Я могу выбрать любую операционную систему (из доступных) для загрузки.



Первый этап загрузки (MBR или GPT)

Как только MBR обнаруживает загрузчик второго этапа, то передает управление на него.

Примечание: Стоит отметить, что сейчас все чаще вместо MBR используется более современная технология — GPT.

Второй этап загрузки (GRUB2)

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


Конфигурационными файлами загрузчика GRUB обычно являются файлы /boot/grub/grub.conf или /etc/grub.conf. Как только загрузчик находит ядро, то загружает его в оперативную память и передает ему дальнейшее управление.

Инициализация ядра

Большинство новых пользователей Linux считают, что Linux — это операционная система. Но на самом деле Linux — это ядро. Ядро часто называют сердцем операционной системы. Оно играет очень важную роль в процессе загрузки Linux. Ядро Linux находится в каталоге /boot и отвечает за взаимодействие между основными компонентами компьютера и операционной системой.


Файлы ядра Linux

Инициализации главного процесса (init или systemd)


Примечание: В системе инициализации SysV главным процессом является процесс init, а в системе инициализации systemd — (одноименный) процесс systemd.

Уровни выполнения (runlevels)

Runlevel 0 — завершает работу системы.

Runlevel 3 — многопользовательский режим с поддержкой сети, но без графического интерфейса. Чаще всего серверные версии Linux работают именно на этом уровне выполнения.

Runlevel 4 — не используется. Пользователь может настраивать этот уровень исходя из его целей.

Runlevel 5 — схож с режимом 3, но здесь запускается графический интерфейс. В этом режиме работают десктопные версии Linux.

Runlevel 6 — перезагружает систему.

Примечание: В системах семейства Debian уровни выполнения выстроены немного иначе. Например, Ubuntu в режиме командой строки запускается с уровнем выполнения 5.

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

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


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

sudo telinit [номер_уровня]

Заключение

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

Читайте также: