Поиск по сайту:

LFCS: Как настроить и устранить неполадки загрузчика Grand Unified Bootloader (GRUB) — Часть 13


В связи с недавними изменениями в целях сертификационного экзамена LFCS, вступившими в силу с 2 февраля 2016 года, мы добавляем необходимые темы в серию LFCS, опубликованную здесь. Чтобы подготовиться к этому экзамену, вам также настоятельно рекомендуется следить за серией LFCE.

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

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

  1. 1. Процесс, известный как POST (Самотестирование при включении), выполняет общую проверку аппаратных компонентов вашего компьютера.
  2. 2. Когда POST завершается, он передает управление загрузчику, который, в свою очередь, загружает ядро Linux в память (вместе с initramfs) ) и выполняет его. Наиболее часто используемый загрузчик в Linux — это GRand Unified Boot loader, или сокращенно GRUB.
  3. 3. Ядро проверяет оборудование и обращается к нему, а затем запускает начальный процесс (чаще всего известный под общим именем «init»), который, в свою очередь, завершает загрузку системы, запуская услуги.

В Части 7 этой серии («SysVinit, Upstart и Systemd») мы представили системы и инструменты управления службами, используемые в современных дистрибутивах Linux. Возможно, вы захотите просмотреть эту статью, прежде чем продолжить.

Представляем загрузчик GRUB

В современных системах можно найти две основные версии GRUB (v1, иногда называемые GRUB Legacy и v2), хотя большинство дистрибутивы в последних версиях по умолчанию используют v2. Только Red Hat Enterprise Linux 6 и его производные до сих пор используют v1.

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

Независимо от версии GRUB, загрузчик позволяет пользователю:

  1. 1). изменить поведение системы, указав разные ядра для использования,
  2. 2). выберите между альтернативными операционными системами для загрузки и
  3. 3). добавьте или отредактируйте разделы конфигурации, среди прочего, для изменения параметров загрузки.

Сегодня GRUB поддерживается проектом GNU и хорошо документирован на их веб-сайте. При изучении этого руководства вам рекомендуется использовать официальную документацию GNU.

Когда система загружается, в главной консоли отображается следующий экран GRUB. Первоначально вам будет предложено выбрать одно из альтернативных ядер (по умолчанию система загружается с использованием последнего ядра) и разрешено ввести командную строку GRUBc). или отредактируйте параметры загрузки (нажав клавишу e).

Одной из причин, по которой вам стоит рассмотреть возможность загрузки с более старым ядром, является аппаратное устройство, которое раньше работало правильно и начало «барахлить» после обновления (см. эту ссылку в AskUbuntu). форумы для примера).

Конфигурация GRUB v2 считывается при загрузке из /boot/grub/grub.cfg или /boot/grub2/grub.cfg, тогда как /boot/grub/grub.conf или /boot/grub/menu.lst используются в v1. Эти файлы НЕ подлежат редактированию вручную, они изменяются на основе содержимого /etc/default/grub и файлов, находящихся внутри /etc/grub.d.

В CentOS 7 вот файл конфигурации, который создается при первой установке системы:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

В дополнение к онлайн-документации вы также можете найти руководство GNU GRUB, используя следующую информацию:

info grub

Если вас интересуют именно параметры, доступные для /etc/default/grub, вы можете напрямую вызвать раздел конфигурации:

info -f grub -n 'Simple configuration'

Используя приведенную выше команду, вы обнаружите, что GRUB_TIMEOUT устанавливает время между моментом появления начального экрана и началом автоматической загрузки системы, если она не прерывается пользователем. Если для этой переменной установлено значение -1, загрузка не начнется, пока пользователь не сделает выбор.

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

В CentOS и openSUSE:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

В Убунту:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

В примере, показанном на изображении ниже, если мы хотим загрузиться с версией ядра 3.10.0-123.el7.x86_64 (четвертая запись), нам нужно установить GRUB_DEFAULT до 3 (внутренняя нумерация записей начинается с нуля) следующим образом:

GRUB_DEFAULT=3

Последняя переменная конфигурации GRUB, представляющая особый интерес, — это GRUB_CMDLINE_LINUX, которая используется для передачи параметров ядру. Параметры, которые можно передать через GRUB в ядро, хорошо документированы в файле параметров ядра и в файле bootparam man 7.

Текущие параметры моего сервера CentOS 7:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"

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

Это случилось со мной не так давно, когда я попробовал Vector Linux, производную от Slackware, на своем 10-летнем ноутбуке. После установки он не обнаружил правильных настроек для моей видеокарты, поэтому мне пришлось изменить параметры ядра, передаваемые через GRUB, чтобы заставить его работать.

Другой пример — когда вам нужно перевести систему в однопользовательский режим для выполнения задач по обслуживанию. Это можно сделать, добавив слово «single» к GRUB_CMDLINE_LINUX и перезагрузив компьютер:

GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto  vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"

После редактирования /etc/defalt/grub вам нужно будет запустить update-grub (Ubuntu) или grub2-mkconfig -o /boot/grub2/grub. cfg (CentOS и openSUSE) для обновления grub.cfg (в противном случае изменения будут потеряны при загрузке).

Эта команда обработает упомянутые ранее файлы конфигурации загрузки для обновления grub.cfg. Этот метод гарантирует, что изменения будут постоянными, в то время как параметры, передаваемые через GRUB во время загрузки, будут действовать только в течение текущего сеанса.

Исправление проблем Linux GRUB

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

На начальном экране нажмите c, чтобы открыть командную строку GRUB (помните, что вы также можете нажать e, чтобы изменить параметры загрузки по умолчанию), и используйте справку, чтобы вызвать доступные команды в командной строке GRUB:

Мы сосредоточимся на ls, который выведет список установленных устройств и файловых систем, и посмотрим, что он найдет. На изображении ниже мы видим, что имеется 4 жестких диска (от hd0 до hd3).

Похоже, что только hd0 был разбит на разделы (о чем свидетельствуют msdos1 и msdos2, где 1 и 2 — номера разделов, а msdos — схема разделения).

Давайте теперь исследуем первый раздел на hd0 (msdos1), чтобы посмотреть, сможем ли мы найти там GRUB. Этот подход позволит нам загрузить Linux и использовать другие инструменты высокого уровня для восстановления файла конфигурации или полной переустановки GRUB, если это необходимо:

ls (hd0,msdos1)/

Как мы видим в выделенной области, в этом разделе мы нашли каталог grub2:

Убедившись, что GRUB находится в (hd0,msdos1), давайте сообщим GRUB, где найти его файл конфигурации, а затем дадим ему команду попытаться запустить меню:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

Затем в меню GRUB выберите запись и нажмите Enter, чтобы загрузиться с ее помощью. После загрузки системы вы можете ввести команду grub2-install /dev/sdX (измените sdX на устройство, на которое вы хотите установить GRUB). Информация о загрузке будет обновлена, и все связанные файлы будут восстановлены.

grub2-install /dev/sdX

Другие более сложные сценарии вместе с предлагаемыми исправлениями описаны в руководстве по устранению неполадок Ubuntu GRUB2. Объясненные там концепции справедливы и для других дистрибутивов.

Краткое содержание

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

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

У вас есть вопросы или комментарии? Не стесняйтесь, дайте нам знать, используя форму комментариев ниже. Мы с нетерпением ждем вашего ответа!