Главная » 2012 » Май » 22 » Возможности настройки GRUB2 в Linux: от серьезных пармаметров до бесполезных украшательств
Возможности настройки GRUB2 в Linux: от серьезных пармаметров до бесполезных украшательств
18:38
Эта статья является вольным переводом GNU GRUB Manual,
структурированной выжимкой по интересующей нас теме. Мы не будем
рассматривать вопрос установки и запуска GRUB'ом той или иной
операционной системы. Мы посмотрим, какие возможности предоставляет
GRUB2 версии 1.99 для собственной настройки. Ведь, как известно, "В
Линукс можно настроить абсолютно все! И вы будете настраивать абсолютно
все!"
Чем же GRUB2 лучше, чем GRUB Legacy? Да, собственно, практически ничем.
Потенциально, он более гибок, в нем раньше появляются некоторые новые
возможности (как, например, поддержка ext4). Но если вы обычный
пользователь и у вас уже установлен GRUB Legacy, то нет практического
смысла менять его на GRUB2, по крайней мере, я его не вижу. Если же вы
ставите систему с нуля, то все же стоит отдать предпочтение GRUB2 как
более перспективной (и уже стабильно работающей) разработке. Тем более,
что в GRUB2 добавлена возможность сделать экран загрузки красивым, чем
мы в основном и займемся в этой статье.
Так нас обычно встречает компьютер унылой менюшкой GRUB2. Мало того, что
картинка не балует жизнерадостностью, так она еще и не совсем
соответствует действительности - в моем случае, установленный BackTrack
был опознан как Ubuntu. Посмотрим, как все это можно исправить.
Что нужно знать
Собственно конфигурационный файл находится в /boot/grub/grub.cfg, но его редактирование особого смысла не имеет. Дело в том, что этот файл создается автоматически утилитой update-grub на основе файла настроек /etc/default/grub и скриптов, находящихся в /etc/grub.d/.
Таким образом, если вы не хотите, чтобы ваши изменения терялись,
например, при обновлении ядра, правильным способом настройки будет
редактирование файла настроек, а при отсутствии требуемого параметра в
файле настроек, редактирования конфигурационных скриптов. Чтобы
изменения вступили в силу необходимо запустить update-grub.
При настройке нам может понадобится выйти в командную строку GRUB. Для
этого в меню выбора ОС необходимо нажать 'c', для возврата - 'esc'.
Командная строка поддерживает автодополнение по Tab.
Чтобы в процессе работы в командной строке получить доступ к файлу,
находящемуся не в корневой файловой системе (получить доступ к файлу,
находящемуся в корневой файловой системе можно как обычно
/path/to/file), необходимо знать наименование устройств и разделов.
Например:
(hd0,1)
означает первый жесткий диск (устройства нумеруются с 0) и на нем первый
раздел (разделы нумеруются с единицы), что соответствует /dev/sda1.
Если при наборе команды, например:
set root=(
нажать Tab, то GRUB сам предложит вам список возможных устройств:
possible devices are:
hd0 fd0
Если нажать Tab при набранной команде
set root=(hd0,
то вам будет предложен список разделов на первом жестком диске. Ну и для набранной команды
set root=(hd0,1)/
будет предложен список файлов на данном разделе.
Так же при настройке GRUB может оказаться полезной команда grub-mkconfig,
которая позволяет посмотреть предварительный вариант файла grub.cfg без
изменения реального конфигурационного файла. Собственно, update-grub
выполняет grub-mkconfig с параметром вывода в файл /boot/grub/grub.cfg.
GRUB использует unicode, т.е. создание пункта меню на русском языке проблем вызвать не должно.
Простейший пример настроек
Рассмотрим простейший пример файла настроек. Если вам захочется чего-то
большего, чем описанно в этом разделе, обратите внимание на раздел
"Параметры /etc/default/grub".
Больщинству пользователей, к коим я отношу и себя, понядобится всего
несколько параметров для настройки функциональности GRUB2. Мой файл
настроек выглядит так (за вычетом неинтересных комментариев):
Наиболее востебованы бывают первые два параметра, отвечающие за пункт
меню по умолчанию и время ожидания выбора. Если у вас установлена всего
одна ОС, то можете вместо GRUB_TIMEOUT=3 раскоментировать следующие три
строчки - в этом случае выбор меню GRUB2 отображаться не будет, если вы
не нажмете Esc. На это у вас будет одна секунда (или столько, сколько вы
зададите параметром GRUB_HIDEN_TIMEOUT). После изменения этих настроек
не забываем выполнить update-grub.
Если вы хотите изменить имя вашей операционной системы в меню выбора
GRUB2, можете воспользоваться для этого параметром GRUB_DISTRIBUTOR.
Для управления списком параметров, передаваемых ядру Linux GRUB2
предоставляет команды GRUB_CMDLINE_LINUX и GRUB_CMDLINE_LINUX_DEFAULT.
Мы не будем вдаваться в подробности и описывать разные параметры,
поскольку это относится уже к теме загрузки Linux.
Последние три параметра отвечают за настройку внешнего вида GRUB2. Если
вы любите красоту во всем, даже в меню загрузчика, то можете ознакомится
с предоставляемыми для этого возможностями в следующей части.
Настройка внешнего вида
В этой части мы посмотрим, как можно улучшить вид GRUB2.
Для начала поменяем разрешение экрана. Чтобы узнать текущее разрешение, в командной строке GRUB2 вводим команду
set
и смотрим на параметр gfxmode. Список поддерживаемых разрешений можно получить командой vbeinfo. Теперь загружаемся в дебиан, находим в конфигурационном файле /etc/default/grub параметр GRUB_GFXMODE,
(раскомментируем его, если он закомментирован и добавляем, если его
нет) и назначаем его: GRUB_GFXMODE=1280x768 или GRUB_GFXMODE=1280x768x32
(цветность можно не указывать). Не забываем выполнить update-grub,
перезагружаемся, получаем:
Для того, чтобы разрешение экрана до запуска иксов оставалось таким же, как в GRUB, можно установить параметр:
GRUB_GFXPAYLOAD_LINUX=true
Теперь попробуем поставить красивую картинку в качестве фона. Для начала
можно посмотреть как она будет выглядеть. В консоли GRUB сначала
подгружаем нужные модули командой
insmode jpeg
(или png, tga) и можем устанавливать фон:
background_image /path/to/picture.jpeg
Тут помним, что смонтирован только корневой раздел. До остальных можно
добраться указав идентификатор раздела, например,
(hd0,1)/path/to/picture.jpeg.
Установить картинку в качестве фона можно несколькими способами, опишем
два из них. Самый простой - скопировать картинку в /boot/grub/ и как
всегда не забыть запустить update-grub. Второй способ (и он является для
GRUB'а более приоритетным) - установить параметр: GRUB_BACKGROUND="/path/to/picture.jpeg".
Можно не беспокоиться, что картинка находится где-то, куда GRUB не
сможет добраться во время загрузки - если он это поймет, то скопирует ее
себе в буфер. Итак, получаем:
На фоне такой картинки серый цвет надписей смотрится как-то уныло. К
сожалению, поменять цвет шрифта в файле настроек нельзя, поэтому нам
придется лезть в настроечные скрипты, к счастью, в данном случае это
совсем просто. Файл /etc/grub.d/40_custom предназначен для
пользовательской настройки. Добавляем в конец:
set menu_color_normal=red/black
set menu_color_highlight=yellow/black
set color_normal=yellow/black
Получаем:
Установить можно четыре параметра: color_highlight, color_normal, menu_color_highlight, menu_color_normal. Все они должны быть вида color-foreground/color-background, устанавливается, соответственно, цвет текста и цвет фона.
Допустимы цвета:
blue
green
cyan
red
magenta
brown
light-gray
dark-gray
light-blue
light-green
light-cyan
light-red
light-magenta
yellow
white
black
Если в качестве фона установлен black, то фон будет прозрачным.
Как и в случае с фоновым изображением, цвета текста можно предварительно
опробовать используя командную строку GRUB. Достаточно ввести команду
set one_of_4_color_parametrs first-color/second-color
Так же, GRUB поддерживает более сложный механизм настройки внешнего вида. Можно установить параметр GRUB_THEME="path/to/theme.file". Впрочем, вопрос создания своих файлов с темами для GRUB мы пока рассматривать не будем.
Редактирование скриптов
Расскажем немного про редактирование скриптов формирования
конфигурационного файла. Нам уже приходилось влезать в скрипты создания
конфигурационного файла GRUB, теперь сделаем это подробнее. При
редактировании скриптов удобно пользоваться командой grub-mkconfig,
чтобы не портить существующий файл конфигурации.
При создании конфигурационного файла используются все скрипты из
директории "/etc/grub.d/", запускаются они в алфавитном порядке. В
Debian там находятся:
00_header отвечает за загрузку основных параметров и библиотек;
05_debian_theme отвечает за оформление внешнего вида;
10_linux отвечает за формирование записей в меню, соответствующих ОС-linux, в которой стоит GRUB;
20_linux_xen - аналогично предыдущему;
30_os-prober отвечает за обнаружение и включение в список остальных ОС;
40_custom и 41_custom - пользовательские скрипты.
Для наглядности поставим себе задачу заменить надпись "Ubuntu" в меню
загрузки на "BackTrack Linux", убрать для него recovery режим и
поставить выше Windows. Поставленная нами задача относится к скриптам
30_os-prober.
Объяснить GRUB, что не надо формировать запись меню для определенного
раздела, достаточно просто. В цикле перебора установленных ОС:
for OS in ${OSPROBED} ; do
где-нибудь после определения параметра DEVICE надо добавить строчки:
if [ "$DEVICE" = "/dev/sda2" ] ; then
continue
fi
Тогда никакая информация о ОС на /dev/sda2 в конфигурационный файл не
попадет. Теперь сами прописываем информацию о нашей системе до
вышеозначенного цикла, заменяя параметры, которые нам не подходят. При
этом опираемся на то, как формируются аналогичные записи в цикле.
Результат будет выглядеть так (изменения выделены жирным шрифтом):
if [ -z "${LLABEL}" ] ; then
LLABEL="${LONGNAME}"
fi
if [ "${LROOT}" != "${LBOOT}" ]; then
LKERNEL="${LKERNEL#/boot}"
LINITRD="${LINITRD#/boot}"
fi
cat << EOF
menuentry "BackTrack Linux" --class gnu-linux --class gnu --class os {
EOF
save_default_entry | sed -e "s/^/\t/"
if [ -z "${prepare_boot_cache}" ]; then
prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
fi
printf '%s\n' "${prepare_boot_cache}"
cat << EOF
linux ${LKERNEL} ${LPARAMS}
EOF
if [ -n "${LINITRD}" ] ; then
cat << EOF
initrd ${LINITRD}
EOF
fi
cat << EOF
}
EOF
При помощи команды grub-mkconfig проверяем, что конфигурационный файл не содержит ошибок, запускаем update-grub, получаем: Параметры /etc/default/grub
Рассмотрим более подробно большинство параметров, которые можно задать для настройки GRUB2.
GRUB_DEFAULT отвечает за то, какой пункт загружать по умолчанию.
Может быть равен номеру (GRUB_DEFAULT=0 - в нашем случае будет загружать
Debian в обычном режиме), точному названию (GRUB_DEFAULT="Microsoft
Windows XP Professional (on /dev/sda1)" - будет, как это не удивительно,
загружать Windows), в паре с GRUB_SAVEDEFAULT указанию, что надо
загружать предыдущий выбор (GRUB_DEFAULT=keep, также это значение нужно
установить для использования команд grub-set-default и grub-reboot).
GRUB_SAVEDEFAULT=true в паре с GRUB_DEFAULT=keep указывает GRUB, что по умолчанию нужно ставить предыдущий выбор.
GRUB_TIMEOUT - время в секундах, в течении которого GRUB ждет
выбора, прежде чем загрузить значение по умолчанию. Можно установить
равным 0, чтобы GRUB не показывал экран выбора ОС, или любое
отрицательное значение для отключения таймера.
GRUB_HIDDEN_TIMEOUT указывает сколько секунд ждать перед тем, как
показать экран загрузки, если не нажата клавиша. Учитывается, только
когда не установлены другие ОС. Если GRUB_HIDDEN_TIMEOUT_QUIET=true, то во время ожидания не показывается таймер.
GRUB_DISTRIBUTOR - название текущего дистрибутива, используется при формировании соответствующей записи в меню выбора ОС.
GRUB_CMDLINE_LINUX, GRUB_CMDLINE_LINUX_DEFAULT - список
параметров, используемых при запуске ядра линукс. Параметры
GRUB_CMDLINE_LINUX используются как для обычного режима загрузки, так и
для recovery. Параметры GRUB_CMDLINE_LINUX_DEFAULT используются только
обычным режимом. Аналогично используются параметры GRUB_CMDLINE_NETBSD,
GRUB_CMDLINE_NETBSD_DEFAULT GRUB_CMDLINE_XEN, GRUB_CMDLINE_XEN_DEFAULT
для систем NetBSD и Xen.
GRUB_DISABLE_RECOVERY=true - тип загрузки recovery не будет создаваться.
GRUB_DISABLE_OS_PROBER=true - убрать проверку наличия других установленных ОС.
GRUB_GFXMODE=1280x768x32 - установить разрешение экрана. Третий
параметр (цветность) можно опустить. Список доступных разрешений можно
посмотреть командой vbeinfo в командной строке GRUB2.
GRUB_GFXPAYLOAD_LINUX=true - разрешение экрана будет сохранено при передаче загрузки ядру Linux.
GRUB_BACKGROUND="/path/to/picture.jpeg" - установить фоновую картинку.
GRUB_THEME="path/to/theme.file" - установить файл тем.
Кроме того, GRUB имеет ряд специфических возможностей, которые вряд ли
пригодятся обычному пользователю, но на всякий случай кратко опишем их:
возможность отключить использование GRUB'ом специальной системы
идентификаторов для определения корневой файловой системы
(GRUB_DISABLE_LINUX_UUID);
возможность исключать поврежденные блоки памяти (GRUB_BADRAM);
возможность загружать дополнительные модули (GRUB_PRELOAD_MODULES);
возможность управлять терминалами ввода и вывода
(GRUB_TERMINAL_INPUT, GRUB_TERMINAL_OUTPUT, GRUB_TERMINAL,
GRUB_SERIAL_COMMAND);
возможность воспроизводить звуковой сигнал при запуске (GRUB_INIT_TUNE).
Настройка безопасности
Мало кому такая возможность может понадобиться, но она есть и
заслуживает того, чтобы о ней рассказали. GRUB предоставляет возможность
разграничения прав доступа. Можно создавать обычных пользователей,
которые могут загружать разрешенные им ОС, а так же суперпользователей,
которые могут загружать любую ОС, редактировать существующие записи и
вызывать командную строку. Список суперпользователей задается командой
set superusers="root"
Создать обычного пользователя и задать ему не зашифрованный пароль можно командой:
password user 123
Той же командой можно создать пароль суперпользователю. Для создания
зашифрованного пароля нужно воспользоваться программой
grub-mkpasswd-pbkdf2, а в скриптах прописать соответственно команду:
Все эти команды лучше всего дописать в скрипт 40_custom.
Для того, чтобы определенный пользователь мог запускать определенную ОС,
он должен быть прописан в списке в соответствующем пункте меню в ключе
--users:
Заключение
Как мы видим, GRUB2 предоставляет массу возможностей по собственной
настройке. И хотя механизм скриптов может кому-то показаться достаточно
сложным, он позволяет гибко реагировать на изменения в списке
установленных ОС и изменения в возможностях загрузки конкретной ОС. К
тому же, практически все важные параметры вынесены в отдельный
конфигурационный файл, что позволяет настраивать GRUB2 практически так
же легко, как и GRUB Legacy.