Автор: Максим Мишутин | 22.11.2011 | 5:17 | В рубриках: Администрирование, Новости, Программы

Во время загрузки системы первым пользователь видит меню программы-загрузчика. В Linux с загрузчиком приходится сталкиваться при перекомпиляции ядра, когда необходимо изменить поведение системы по умолчанию, при добавлении новой операционной системы или нового жесткого диска, в аварийных случаях и тд.
Многие операции по изменению параметров загрузчика автоматизированы. Например, при обновлении ядра из репозитория пакетов в конфигурационный файл загрузчика сразу же заносится соответствующая запись. При запуске компьютера происходит считывание информацию с так называемого MBR(Master Boot Record), которая располагается в первом секторе жесткого диска.Размер MBR составляет 512 байт и состоит из 3 разделов. В первых 446 байтах находится программа-загрузчик. Второй раздел называется таблицей разделов (англ. Partition Table), размером 64 байта, которая состоит из четырех записей, в каждой из которых описывается геометрия первичных разделов диска (первый и последний цилиндр, занимаемый разделом). Именно поэтому на диске может быть только 4 первичных раздела. Также указывается тип файловой системы,1 бит занимает признак активности раздела, который показывает возможно ли использовать раздел для загрузки операционной системы. Каждый первичный и расширенный раздел содержит также запись в самом начале размером 1 сектор(512 байт), называется Boot Record. Большинству ОС мало отведенных байт для расположения данных, требуемых для загрузки. Поэтому в загрузочный сектор помещают только некоторые инструкции, необходимые для запуска первичного загрузчика ОС.
В Linux наиболее популярны программы-загрузчики LILO (Linux Loader) и GRUB(Grand Unified Bootloader). Рассмотрим GRUB, поскольку он используется для загрузки ОС Ubuntu.
Лучшее свойство GRUB – то, что можно загрузить любое ядро на любом разделе, прямо в ходе начальной загрузки. Например, если вы забыли добавить только что скомпилированное ядро в список, вам скорее всего потребуется загрузиться, добавить его в список и затем перезагрузить систему, чтобы использовать его то с GRUB можно просто использовать командную оболочку, что бы загрузить требуемое ядро.
Давайте посмотрим конфигурационный файл GRUB в /boot/grub/grub.cfg c помощью команды:

cat /boot/grub/grub.cfg

Файл генерируется автоматически скриптом /usr/sbin/grub-mkconfig на основании шаблонов, расположенных в каталоге /etc/grub.d и настроек /etc/default/grub. Файл grub.cfg большой по содержанию, поэтому остановимся на одельных частях, чтобы понимать основные настройки. Редактировать напрямую этот файл не имеет смысла.

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
set default=”0″
// Параметр set default показывает, какая система будет загружаться по умолчанию, цифра 0 указывает на первую по списку запись, указанную в параметре menuentry.
insmod ext2
set root='(/dev/sda,msdos2)’
// Эти 2 конструкции загружают модуль ядра для файловой системы и указывает на корневой раздел, в котором размещены конфигурационные файлы загрузчика GRUB.
if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###
// Параметр set timeout устанавливает время ожидания меню загрузчика, в течение которого пользователь может выбрать другую операционную систему.
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###
// Описание тем оформления меню загрузки. За ним меню выбора операционной системы:
### BEGIN /etc/grub.d/10_linux ###
if [ ${recordfail} != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
menuentry ‘Ubuntu, с Linux 2.6.38-11-generic’ –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos2)’
search –no-floppy –fs-uuid –set=root 6f0779fc-ed80-4126-aacd-65990d56558a
linux /boot/vmlinuz-2.6.38-11-generic root=UUID=6f0779fc-ed80-4126-aacd-65990d56558a ro quiet splash vt.handoff=7
initrd /boot/initrd.img-2.6.38-11-generic
}
menuentry ‘Ubuntu, с Linux 2.6.38-11-generic (режим восстановления)’ –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod part_msdos
insmod ext2
set root='(/dev/sda,msdos2)’
search –no-floppy –fs-uuid –set=root 6f0779fc-ed80-4126-aacd-65990d56558a
echo ‘Loading Linux 2.6.38-11-generic …’
linux /boot/vmlinuz-2.6.38-11-generic root=UUID=6f0779fc-ed80-4126-aacd-65990d56558a ro single
echo ‘Loading initial ramdisk …’
initrd /boot/initrd.img-2.6.38-11-generic
}
………

Все ОС перечисленные в параметре menuentry, будут доступны для выбора в меню загрузки. Если после 10 секунд пользователь не определился с выбором, то будет запущена ОС, указанная в set default.
Теперь давайте разберемся откуда берутся установки для генерирования grub.cfg. Выводим содержимое файла /etc/default/grub и разберем некоторые параметры.

cat /etc/default/grub

# If you change this file, run ‘update-grub’ afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
// Изменяет операционную систему, которая будет загружаться по умолчанию. Если в качестве параметра указать saved, то в следующий раз будет загружаться операционная система, выбранная в прошлый раз. Вместо цифры можно прописать метку из параметра menuentry. В нашем случая запись будет выглядит так: GRUB_DEFAULT=”Ubuntu, с Linux 2.6.38-11-generic”
#GRUB_HIDDEN_TIMEOUT=0
// Параметр, указывающий на время отображения меню выбора загрузки, если на компьютере установлена одна операционная система. Значение указывается в секундах. Для входа в меню нужно указать положительное значение и при старте компьютера нажать “Esc”.
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
// Устанавливает время ожидания выбора меню пользователем в секундах. Изменяя параметр на -1, отключаем таймер отсчета и меню будет отображаться до тех пор, пока пользователь не выберет нужный пункт.
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
// Значение указывает на название дистрибутива, которое будет отображаться в GRUB. Чтобы изменить значение на свое, например, замените параметр на echo `MyLinux`. Не забудьте про обратные одинарные кавычки.
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
// Задает параметры ядру по умолчанию. Параметр quiet и splash активирует графическую заставку и ” молчаливый режим” загрузки. Если оставить пустую строку то при загрузке будут выводится все сообщения ядра и отключена заставка. Можно дописать и нужные дополнительные параметры. Параметр ro single переводит систему в однопользовательский режим, который обычно используется при восстановлении работоспособности системы.
GRUB_CMDLINE_LINUX=””
#GRUB_TERMINAL=console
// Включает консольный режим и по умолчанию закомментирована.
GRUB_GFXMODE=1024×768
Передав параметр ядру, можно указать разрешение экрана при загрузке системы.

В каталоге /etc/grub.d расположено несколько файлов 00_header, 10_linux, 20_memtest86+,40_custom, README, 05_debian_theme, 20_linux_xen, 30_os-prober, 41_custom:

  • 10_linux и 30_os-prober, которые отвечают за поиск и добавление в меню загрузчика других операционных систем, установленные на жестких дисках компьютера
  • 20_memtest86+ добавляет пункт, позволяющий произвести проверку оперативной памяти
  • 40_custom предоставляет возможность самостоятельно добавить свои пункты меню

После всех правок GRUB нужно сгенерировать новый файл grub.cfg, выполнив команду:

sudo update-grub

GRUB – это очень мощный менеджер загрузки, который может загружать множество операционных систем, таких как Windows, DOS, Linux, GNU Hurd, *BSD и т.д.

Эта запись была опубликована 22.11.2011в 17:45. В рубриках: Администрирование, Новости, Программы. Вы можете следить за ответами к этой записи через RSS 2.0. Вы можете оставить свой комментарий или трекбек со своего сайта.