Загрузчик GNU GRUB

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

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

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

Итак, при старте компьютера происходит считывание содержания так называемого MBR (Master Boot Record), который располагается  всегда в одном и том же месте — в первом  секторе жесткого диска (если совсем точно — в нулевом). Занимает MBR всего 512 байт и состоит из трех разделов. Второй раздел называется таблицей разделов (англ. Partition Table). Занимает он 64 байта, состоит из четырех записей, в каждой из которых описывается геометрия первичных разделов диска (первый и последний цилиндр, занимаемый  разделом). Именно поэтому на диске может быть не более четырех первичных разделов. Здесь же указывается тип файловой системы раздела, 1 бит занимает  признак активности раздела. Такой бит указывает  на возможность использования раздела для загрузки операционной системы.

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

В Linux наиболее популярны менеджеры загрузки LILO (Linux LOader) и GRUB (GRand Unified Bootloader). Поскольку в  Linux Mint для загрузки операционной системы используется второй, о нем и пойдет речь далее. Официальный сайт проекта — http://www.gnu.org/software/grub/.

Проект возник  в 1995 г. при разработке ядра Hurd — довольно оригинальной операционной системы, к сожалению, так и  не доведенной до окончательного релиза. Разработчики, вместо того чтобы загружать ядро Hurd как-то по-особенному, предложили спецификацию мультизагрузки (англ. Multiboot Specification), позволяющую загружать операционную систему универсальным образом. Те же операционные системы, которые  не  были  совместимыми  с этой спецификацией,  сохранили схему загрузки по цепочке. В 1999 г. GRUB официально примкнул к проекту GNU, и уже начиная с 2000 г. производители стали включать GRUB в свои дистрибутивы. Сегодня доступна GRUB версии 2, которая и  используется в  качестве менеджера загрузки  в  большинстве современных  дистрибутивов.  Далее речь  пойдет именно об этой версии.

ПРИМЕЧАНИЕ

Конфигурационный файл GRUB версии 1 назывался /boot/grub/grub.conf и имел несколько отличный от первой версии формат.

Программа установки Linux Mint сканирует  все разделы жесткого диска  и заносит  в конфигурационный файл GRUB /boot/grub/grub.cfg. Просмотреть его содержимое можно, введя команду (рис. 2.16)

$ cat /boot/grub/grub.cfg

Однако главное различие в версиях   GRUB состоит  в том, что редактировать конфигурационный файл /boot/grub/grub.cfg, как это делали  в  версии   1  загрузчика, нельзя. Об этом красноречиво свидетельствует  предупреждение  DO NOT EDIT THIS FILE (от англ. «Не редактируйте файл») в самом начале файла. Файл генерируется автоматически скриптом /usr/sbin/grub-mkconfig на основании шаблонов, расположенных в каталоге /etc/grub.d, и  настроек в /etc/default/grub. Поэтому вы можете утратить свои  правки  при обновлении утилиты GRUB или  в других случаях, когда потребуется регенерация /boot/grub/grub.cfg. Файл довольно большой по содержанию, поэтому приведу лишь отдельные его части, достаточные, чтобы понимать основные настройки.

# DO NOT EDIT THIS FILE

# It is automatically generated by /usr/sbin/grub-mkconfig using templates

Рис. 2.i6. Конфигурационный  файл GRUB v.2

# from /etc/grub.d and settings from /etc/default/grub

### BEGIN /etc/grub.d/00_header ### if [  -s  /boot/grub/grubenv ]; then

have_grubenv=true load_env

fi

set default="0"

Параметр se t   defaul t показывает, какая система будет загружаться по умолчанию, цифра 0  указывает на первую по списку запись,  указанную в  параметре

menuentry. В нашем случае это Linux Mint 9, 2.6.32-21-generic   (dev/sda1).

insmod reiserfs set root=(hd0,5)

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

if [ ${recordfail} = 1 ]; then set timeout=-1

else

set timeout=10

###   END   /etc/grub.d/00_heade r   ###

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

Далее идут описания тем оформления меню загрузки. В качестве фоновой картинки выбран рисунок в формате PNG/boot/grub/linuxmint.png.

###   BEGIN   /etc/grub.d/05_debian_them e   ###

set menu_color_normal=white/black

set menu_color_highlight=black/white

###   END   /etc/grub.d/05_debian_them e   ###

###   BEGIN   /etc/grub.d/06_mint_them e   ###

insmod reiserfs set root=(hd0,5)

search –no-floppy –fs-uuid –set  ff8becfc-d3c4-4956-afbOc4f455bb0ba3 insmod png

if background_image /boot/grub/linuxmint.png ; then

set color_normal=white/black

set color_highlight=white/light-gray

else

set menu_color_normal=white/black

set menu_color_highlight=white/light-gray

### END /etc/grub.d/06_mint_theme ###

И наконец, меню выбора операционной системы:

### BEGIN /etc/grub.d/10_linux ###

Загрузчик GNU GRUB

menuentry "Linux Mint 9, 2.6.32-21-generic (/dev/sda1)" { recordfail=1

if [ -n ${have_grubenv} ]; then save_env recordfail; fi set quiet=l

insmod reiserfs set root=(hd0,5)

search —no-floppy —fs-uuid —se t  ff8becfc-d3c4-4956afb0-c4f455bb0ba3

linux /boot/vmlinuz-2.6.32-21-generic root=UUID=5bc61bd938b5-43a4-b3e8-11f9fd8ab389 ro   quiet splash

initrd  /boot/initrd.img-2.6.32-21-generic

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_memtest86+ ### menuentry "Memory test (memtest86+)" {

linuxl6 /boot/memtest86+.bin

}

### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###

menuentry "Microsoft Windows XP Home Edition (on /dev/sdal)" { set root=(hd0,1)

chainloader +1

### END /etc/grub.d/30_os-prober ###

Все операционные системы, приведенные в параметре menuentry , будут доступны для выбора при загрузке. Если пользователь ничего в течение  10 секунд не выберет, то будет запущена операционная  система, указанная в  se t   default .

Строка

linux /boot/vmlinuz-2.6.32-21-generic root=UUID=ff8becfc-d3c44956-afb0-c4f455bb0ba3 ro quiet splash

указывает на файл ядра /boot/vmlinuz-2.6.32-21-generic и параметры, передаваемые ядру при  загрузке системы. При  помощи  root указывается  корневой раздел. Как видите, для обозначения раздела использован  UUID, а не имя.

ПРИМЕЧАНИЕ

Initrd (Initial RAM Disk) — это образ диска, распаковываемый в оперативную память для начальной инициализации системы, который образует временную файловую систему, содержащую драйвера и утилиты, которые необходимы ядру при старте.

Так, редактировать /boot/grub/grub.cfg напрямую не имеет смысла.  Посмотрим, откуда берутся установки для его генерирования.

Вначале выводим содержимое  файла /etc/default/grub, после установки  системы при помощи утилиты cat или  в любом текстовом редакторе:

$ cat /etc/default/grub

# If you change this file, run `update-grub´ afterwards to update

# /boot/grub/grub.cfg.

GRUB_DEFAULT=0

GRUB_HIDDEN_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT="10"

GRUB DISTRIBUTOR=`lsb release -i -s 2> /dev/null || echo Debian`

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX=""

Загрузчик GNU GRUB

# 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 4vbeinfo’

#GRUB_GFXMODE=640×480

# 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"

Теперь разберем некоторые параметры. Вы, наверное, обратили внимание, что файл состоит из ряда строк вида ПАРАМЕТР="ЗНАЧЕНИЕ". Все, что записано после знака диез #,

считается комментарием и не учитывается при регенерации нового конфигурационного файла. Закомментировав строки, разработчики  уже  приготовили  настройки, и чтобы привести их в действие,  следует просто снять комментарий. Сравнив параметры с файлом /boot/grub/grub.cfg находим совпадения. Например, строка

GRUB_DE FAULT=0

соответствует set def ault="0", то есть при необходимости можно изменить операционную систему, которая будет загружаться по умолчанию, прописав здесь нужное значение. Причем если в качестве параметра указать saved, то в следующий раз будет загружаться операционная система, выбранная в прошлый раз. Кроме цифры можно сразу задать метку, как она прописана в параметре menuentry. Например:

GRUB_DEFAULT="Linux Mint 9 Isadora, linux 2.6.32-21-generic (/dev/sda5)"

Изменив  параметр GRUB_TIMEOUT="10", мы установим новое время  ожидания выбора меню пользователем в  секундах. Установив  значение  -1,  мы отключим таймер отсчета, и  меню будет отображаться до тех пор, пока пользователь не выберет нужный пункт.

Строка

GRUB_CMDLINE_LINUX_DEFAULT="quiet  splash"

задает параметры ядру по умолчанию. В данном случае активирована графическая заставка и  «молчаливый режим» загрузки. При необходимости дописываем здесь нужные дополнительные параметры. О некоторых из них  мы будем говорить по ходу книги.  Если  загрузка системы невозможна  из-за проблем совместимости оборудования, следует попробовать добавить один из следующих параметров — noapic, nolapic, noacpi, acpi=off, pci=noacpi, nopcmcia (если есть pcmciaустройство), irqpoll, all generic ide. Например, для материнских плат на nVidia nForce часто следует добавлять — noapic nolapic, иначе загрузка прерывается  черным экраном.

Аналогично, передав параметр ядру, можно указать разрешение экрана при загрузке. Например, добавив vga=7 91, мы установим разрешение 1024 х 768 с количеством цветов 64 Кбайт, vga=7 90 — 1024 х 768 и 32 Кбайт цветности, vga=787 — 800 х 600.

Параметр ro  singl e переводит  систему  в режим  загрузки в однопользовательском режиме, который обычно используется при  восстановлении  работоспособности системы.

В каталоге /etc/grub.d есть несколько файлов. Просмотреть их список можно, например, при помощи консольной команды ls  (рис. 2.17):

Рис. 2.17. Список файлов в каталоге /etc/grub.d

Параметры, которые они  генерируют в  файле /boot/grub/grub.cfg,  обозначаются секциями  вроде:

### BEGIN /etc/grub.d/30_os-prober ###

### END /etc/grub.d/30_os-prober ###

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

ПРИМЕЧАНИ Е

Файл 40_custom должен обязательно заканчиваться пустой строкой, иначе последний пункт меню не будет отображаться.

После всех правок /etc/default/grub или  файлов  в /etc/grub.d для  генерирования нового файла /boot/grub/grub.cfg следует выполнить команду

$ sudo update-grub

ПРИМЕЧАНИ Е

При обновлении GRUB с версии 1 на версию 2 необходимо использовать команду upgrade-from-grub-legacy, которая на основании старого конфигурационного файла создаст новый.

Забегая чуть вперед, скажу, что в установленном Linux Mint имеется графическая  утилита, позволяющая изменить некоторые параметры  GRUB, вызвать которую можно из меню Администрирование  • Менеджер загрузки (рис. 2.18).

Рис. 2.18. Настройка GRUB при помощи графической утилиты

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

Источник: Яремчук С. А.  Linux Mint на 100 %. — СПб.: Питер, 2011. — 240 е.: ил. — (Серия «На 100 %»).

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий