Изучаем Linux, 101: Менеджеры загрузки

Знакомство с менеджерами загрузки GRUB и LILO

Из этой статьи вы узнаете, как выбрать и настроить менеджер загрузки в операционной системе Linux®. Вы можете использовать этот материал для подготовки к экзамену LPI 101 программы сертификации на администратора Linux начального уровня или просто для общего развития.

Об этой серии

Эта серия статей поможет вам освоить задачи администрирования операционной системы Linux. Вы также можете использовать материал этих статей для подготовки к экзаменам первого уровня сертификации профессионального института Linux (LPIC-1).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-1. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит самые последние (по состоянию на апрель 2009 года) цели экзаменов сертификации LPIC-1. Если какая-либо статья отсутствует в перечне, можно найти ее более раннюю версию, соответствующую предыдущим целям LPIC-1 (до апреля 2009 года), обратившись к нашим руководствам для подготовки к экзаменам института Linux Professional Institute.

Краткий обзор

Из этой статьи вы узнаете, как выбрать, установить и сконфигурировать менеджер загрузки в операционной системе Linux. Вы научитесь:

  • Настраивать несколько загрузочных областей и создавать резервные копии параметров загрузки.
  • Устанавливать и настраивать такие менеджеры загрузки, как GRUB или LILO.
  • Добавлять параметры загрузки или выполнять команды загрузчика во время загрузки ОС.
  • Восстанавливать систему после наиболее распространенных сбоев, связанных с загрузкой.
  • Загружать систему, в которой установлен загрузчик GRUB 2, с использованием его старой версии (GRUB Legacy).

В статье будут рассмотрены процесс загрузки персонального компьютера и два наиболее распространенных загрузчика операционной системы – LILO и GRUB. Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 102.2 темы 102. Цель имеет вес 2.

Необходимые условия

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать базовыми знаниями о Linux и иметь компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Вы также должны быть знакомы с основами разметки жесткого диска, которые обсуждались в статье "Изучаем Linux 101: разметка жесткого диска". Иногда различные версии программ выводят результаты по-разному, поэтому содержимое листингов статей может слегка отличаться от результатов, полученных в вашей рабочей системе.

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


Обзор процесса загрузки

Как связаться с Яном

Ян – один из наших наиболее популярных и плодовитых авторов. Ознакомьтесь со всеми статьями Яна (EN), опубликованными на сайте developerWorks. Вы можете найти контактные данные в профиле Яна и связаться с ним, а также с другими авторами и участниками ресурса My developerWorks.

Прежде чем перейти к рассмотрению LILO и GRUB, давайте выясним, как ПК начинает свою работу, или загружается. У каждого компьютера есть код базовой системы ввода/вывода (Basic Input Output Service, или BIOS), хранящийся в энергонезависимой памяти, такой как ROM, EEPROM или флэш-память. Этот код выполняется каждый раз при включении или перезагрузке ПК. Обычно при этом выполняется процедура начального самотестирования ПК при включении питания (Power-on Self Test, POST), после чего загружается первый сектор главной загрузочной записи Master Boot Record (MBR) загрузочного диска.

Как уже упоминалось в статье "Изучаем Linux 101: разметка жесткого диска", главная загрузочная запись также содержит таблицу разделов, поэтому объем выполняемого кода в MBR не превышает 512 байтов, что не так уж много. Отметим, что каждый диск (даже дискета) содержит выполняемый код в своей главной загрузочной записи, пусть даже его хватает лишь на то, чтобы вывести сообщение "Non-bootable disk in drive A:". Этот код, загружаемый BIOS из первого сектора, называется первичным загрузчиком, или загрузчиком первой стадии.

Стандартная главная загрузочная запись жестких дисков, использующаяся операционными системами DOS, PC DOS и Windows®, просматривает таблицу разделов, ищет в ней основной раздел на загрузочном диске, помеченный как активный, загружает первый сектор из этого раздела и передает управление в начало загруженного кода. Этот новый фрагмент кода также известен как загрузочная запись раздела. На самом деле загрузочная запись раздела является еще одним загрузчиком первой стадии, но она уже обладает достаточной функциональностью, позволяющей загрузить набор блоков раздела. Код, расположенный в этом новом наборе блоков, называется загрузчиком второй стадии. В операционных системах MS-DOS и PC-DOS загрузчик второй стадии выполняет непосредственную загрузку оставшейся части операционной системы. Вот так ваша операционная система, благодаря собственным усилиям, загружается и начинает работать.

Это хорошо работает на компьютере с одной операционной системой, но что, если вы хотите установить несколько операционных систем – предположим, OS/2, Windows XP и три различных дистрибутива Linux? Вы могли бы использовать некую программу (такую как DOS-программа FDISK) для изменения активного раздела и последующей перезагрузки системы, однако это слишком неудобный вариант. Более того, диск может иметь только четыре основных раздела, а стандартная запись MBR – только один активный основной раздел; загрузка с логического раздела невозможна. Тем не менее, в нашем примере упоминаются пять операционных систем, для каждой из которых требуется отдельный раздел. Вот мы и приехали!

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

Loadlin
Исполняемая DOS-программа, запускаемая из работающей операционной системы DOS для загрузки с раздела Linux. Эта программа была популярна в те времена, когда настройка системы с множественной загрузкой была сложным и рискованным делом.
Менеджер загрузки OS/2
Программа, устанавливаемая в небольшой отдельный раздел. Этот раздел помечается как активный, а в процессе стандартной загрузки MBR запускается менеджер загрузки OS/2, который выводит меню для выбора загружаемой операционной системы.
Интеллектуальный системный загрузчик
Программа, которая может размещаться в разделе с операционной системой и вызываться либо загрузочной записью активного раздела, либо главной загрузочной записью. Приведем примеры.
  • BootMagic – часть пакета Norton PartitionMagic.
  • LILO – сокращенно от LInux LOader.
  • GRUB – сокращенно от GRand Unified Boot loader (сейчас он называется GRUB Legacy).
  • GRUB 2 – новый загрузчик, который лишь недавно начали включать в состав популярных дистрибутивов.

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

Механизм загрузки по цепочке

Когда менеджер загрузки получает управление, то помимо прочего, он может загрузить другой загрузчик. Этот механизм называется chain loading (загрузка по цепочке) и наиболее часто используется тогда, когда менеджер загрузки, расположенный в главной загрузочной записи (MBR) загружает загрузчик, расположенный в загрузочной записи раздела. Это происходит почти всегда, когда загрузчик Linux получает запрос на загрузку с раздела Windows или DOS, но может происходить и тогда, когда загрузчик Linux одной системы получает запрос на загрузку загрузчика другой системы. Например, с помощью загрузчика LILO, расположенного в одном разделе, можно загрузить загрузчик LILO, расположенный в загрузочной записи другого раздела, для запуска Linux-системы, установленной в этом разделе.

Менеджеры загрузки Linux

С этого момента мы сосредоточимся на рассмотрении LILO и GRUB, поскольку эти менеджеры загрузки включены в состав большинства дистрибутивов Linux. LILO существует уже давно, GRUB был разработан позже. В настоящее время под руководством Free Software Foundation разрабатывается его обновленная версия – GRUB 2 (см. раздел Ресурсы), а исходный загрузчик GRUB сейчас называется GRUB Legacy. В конце статьи я немного расскажу о GRUB 2, преимущественно для того, чтобы дать вам представление об основных отличиях между GRUB и GRUB 2, а также о том, как эти два загрузчика могут работать в связке друг с другом. В оставшейся части статьи мы будем говорить о GRUB, подразумевая, что речь идет о GRUB Legacy (при отсутствии явных упоминаний о GRUB 2). Также на сегодняшний день доступна новая версия загрузчика LILO – ELILO, которая была разработана для загрузки компьютеров, использующих вместо BIOS интерфейс EFI (Extensible Firmware Interface), разработанный Intel. Для получения дополнительной информации о GRUB 2 и ELILO обратитесь к разделу Ресурсы.

В процессе инсталляции вашего дистрибутива Linux вы, вероятно, сможете выбрать для установки один из нескольких предлагаемых загрузчиков. Как GRUB, так и LILO работают с большинством современных жестких дисков, хотя LILO уже не входит в состав некоторых дистрибутивов, в особенности Fedora. Помните о том, что технологии жестких дисков стремительно развиваются, поэтому всегда следует быть уверенным в том, что выбранный загрузчик, так же как и дистрибутив Linux (или другой ОС) или BIOS компьютера будут работать с вашим новым диском. В противном случае можно потерять все хранящиеся на диске данные. Точно так же, если вы добавляете дополнительный дистрибутив в существующую систему, стоит убедиться в том, что в MBR установлена самая последняя версия LILO или GRUB. Самая последняя версия GRUB или LILO потребуется и в том случае, если вы планируете загружать систему с LVM-раздела или RAID-массива дисков.

Загрузчики второй стадии, использующиеся в LILO и GRUB, позволяют выбирать для загрузки одну из нескольких операционных систем. Тем не менее, LILO и GRUB сильно различаются в следующем: при внесении изменений в систему (таких как обновление ядра или выполнение ряда других действий) для повторного создания загрузочного меню LILO требуется использовать определенную команду, тогда как при использовании GRUB это можно сделать, просто отредактировав текстовый конфигурационный файл. GRUB 2 также требует повторной сборки из конфигурационного файла, который обычно хранится в директории /etc.


LILO

LILO, или LInux Loader – это один из двух наиболее распространенных загрузчиков Linux. Вы можете установить LILO в главную загрузочную запись диска, с которого загружаетесь, или в загрузочную запись какого-либо раздела. Также LILO может быть установлен на сменные носители – дискеты, компакт-диски или USB-накопители. Если вы еще не знакомы с LILO, вам будет полезно попрактиковаться с дискетой или USB-накопителем, как это будет рассмотрено в наших примерах.

Во время установки Linux вы обычно будете выбирать в качестве загрузчика LILO или GRUB. Если вы выберете GRUB, то, возможно, LILO не будет установлен, и вам может потребоваться установить его с помощью отдельного пакета. Также вы можете установить пакет lilo-doc, содержащий дополнительные документацию и примеры. С этого момента мы будем предполагать, что пакет LILO уже установлен. Если при установке пакетов вам потребуется помощь, вы можете найти статьи об управлении пакетами в нашем перечне материалов для подготовки к экзаменам LPIC-1.

Конфигурация менеджера загрузки LILO обычно содержится в файле /etc/lilo.conf. Вы можете создать исходный конфигурационный файл с помощью команды liloconfig (обычно она находится в директории /usr/sbin), а затем отредактировать его в соответствии с вашими требованиями. Конфигурационный файл, показанный в листинге 1, был создан именно таким образом. В этот файл я добавил достаточно подробные комментарии, а кроме того, дополнительную информацию о LILO и lilo.conf вы всегда можете получить с помощью соответствующих man-страниц. Ниже приводится типовой конфигурационный файл LILO, который можно использовать на компьютере с двойной загрузкой, на котором установлены ОС Windows и одна или несколько Linux-систем.

Листинг 1. Пример файла /etc/lilo.conf
# Исходный файл сгенерирован утилитой liloconfig, изменен Яном Шилдсом

# Следующий параметр позволяет загружаться с любых дисковых разделов,
# расположенных за пределами 1024 цилиндров.
lba32

# Устройство, с которого будет происходить загрузка (дискета).
boot=/dev/fd0

# Устройство, которое должно быть смонтировано как корневое.
# Если используется специальное имя CURRENT, корневым устройством
# будет являться устройство, на котором смонтирована текущая корневая
# файловая система. Если корень был изменен с помощью параметра –r,
# используется соответствующее устройство. Если параметр ROOT не задан,
# используется параметр корневого устройства, содержащийся в образе ядра.
# Это можно изменить с помощью программы rdev.
root=/dev/sda7

# Конфигурация изображения /boot/coffee.bmp
bitmap=/boot/coffee.bmp
bmp-colors=12,,11,15,,8
bmp-table=385p,100p,1,10
bmp-timer=38,2,13,1

# Следующий параметр включает сжатие файла map:
# будут предприняты попытки объединить нескольких запросов на 
# чтение смежных секторов в один запрос. Это очень сильно сокращает
# время загрузки и уменьшает объем таблицы. Использование параметра
# COMPACT особенно рекомендуется при загрузке с дискеты.
compact

# Установка указанного файла в качестве нового загрузочного сектора.
# LILO поддерживает встроенные загрузочные секторы, поэтому от вас
# требуется указать лишь тип: 'text', 'menu' или 'bitmap'.
# new: install=bmp      old: install=/boot/boot-bmp.b
# new: install=text     old: install=/boot/boot-text.b
# new: install=menu     old: install=/boot/boot-menu.b or boot.b
# Если не задано значение bitmap=line, по умолчанию используется тип 'menu'.
# Примечание: для отображения графического меню необходимо использовать 
# параметр install=bmp.
# install=menu
install=bmp

# Время задержки, указанное в _десятых_ долях секунды, 
# которое LILO должен выждать перед загрузкой первого образа.
# Если параметр DELAY не задан или равен 0, задержка не будет происходить.
# delay=20

# Приглашение выбрать образ для загрузки. Если в приглашении
# не указано время обратного отсчета, загрузка не произойдет до тех пор, 
# пока не будет нажата клавиша RETURN. Время обратного отсчета указывается в
# десятых долях секунды.
prompt
timeout=200

# Следующий параметр включает режим large memory
large-memory

# Местоположения файла map. Если параметр MAP не задан,
# то используется файл /boot/map.
map=/boot/map

# Следующий параметр задает текстовый режим VGA, который
# должен быть выбран при загрузке. Допустимы следующие значения
# (регистр не важен):
#   NORMAL  - обычный текстовый режим 80x25.
#   EXTENDED - режим 80x50. Слово EXTENDED можно сократить до EXT.
#   ASK  - спросить пользователя во время загрузки.
#   <номер>  - использовать соответствующий текстовый режим. 
#    Список доступных режимов можно получить, загрузившись с параметром  
#    vga=ask и нажав клавишу [Enter].
vga=normal

# Следующий параметр задает нестандартные параметры для указанного диска.
#disk=/dev/sda
#	bios=0x80

# Если вы используете в своей работе сменные USB-накопители, необходимо
# указать LILO не использовать их, даже если они определены
# в файлах /etc/fstab и упоминаются в /proc/partitions.
# Добавьте для каждого устройства соответствующую ему строку:
#
# disk=/dev/sda inaccessible
# disk=/dev/sdb inaccessible

# Следующие образы были добавлены автоматически. Возможно, вам потребуется
# внести какие-то изменения.

image=/boot/vmlinuz-2.6.31-14-generic
	label="Lin 2.6.31-14"
	initrd=/boot/initrd.img-2.6.31-14-generic
	read-only

image=/boot/vmlinuz-2.6.31-20-generic
	label="Lin 2.6.31-20"
	initrd=/boot/initrd.img-2.6.31-20-generic
	read-only

image=/boot/memtest86+.bin
	label="Memory Test+"
	read-only

# Если на вашем компьютере установлена дополнительная
# операционная система (например, DOS),
# вы можете загрузить ее, раскомментировав следующие строки
# (естественно, вместо /dev/sda1 необходимо указать то устройство,
# на котором находится DOS-раздел).
other=/dev/sda6
        label="Fedora 8"

 other=/dev/sda1
   label="Windows XP"

Мы протестируем нашу конфигурацию, создав загрузочную дискету (поэтому в самом начале файла мы задали значение boot=/dev/fd0). Также мы увеличили время для выбора загружаемой ОС до 20 секунд (200 десятых долей секунды) и добавили последовательную загрузку второй записи "other" для загрузчика, расположенного в разделе с операционной системой Fedora 8 (/dev/sda6). В конфигурационном файле LILO можно использовать только одну команду root, поэтому, не смотря на то, что с корневого раздела можно загрузить несколько образов, для загрузки образа другой установленной ОС – в нашем случае это Fedora 8 (/dev/sda6) или Windows XP (/dev/sda1) – необходимо последовательно передать управление другому загрузчику.

Используя команду lilo, которая расположена в директории /sbin/lilo, вы создаете загрузочную запись первой стадии и файл map (/boot/map). Для этого используется конфигурационный файл из листинга 1 (как правило, это файл /etc/lilo.conf). Эта команда может также использоваться для решения некоторых дополнительных задач, которые мы рассмотрим позже.

Теперь, если мы отформатируем дискету в файловой системе Linux (например, в ext2), мы сможем запустить команду lilo (/sbin/lilo) для создания загрузочной дискеты. Результат выполнения этой команды показан в листинге 2. Обратите внимание на то, что команда lilo имеет пять уровней детализации выводимой информации. Для каждого дополнительного уровня указывается параметр –v. В нашем примере мы запустили команду lilo -v -v.

Листинг 2. Создание загрузочной дискеты с LILO
LILO version 22.8, Copyright (C) 1992-1998 Werner Almesberger
Development beyond version 21 Copyright (C) 1999-2006 John Coffman
Released 19-Feb-2007, and compiled at 10:52:38 on Aug 25 2009
Running Linux kernel 2.6.31-14-generic on i686
Ubuntu

raid_setup returns offset = 00000000  ndisk = 0
 BIOS   VolumeID   Device
Reading boot sector from /dev/fd0
pf_hard_disk_scan: ndevs=1
  0800  54085408  /dev/sda
device codes (user assigned pf) = 0
device codes (user assigned) = 0
device codes (BIOS assigned) = 1
device codes (canonical) = 1
mode = 0x03,  columns = 80,  rows = 25,  page = 0
Using BITMAP secondary loader
Calling map_insert_data
Secondary loader: 19 sectors (0x3800 dataend).
Warning: The boot sector and map file are on different disks.
bios_boot = 0x00  bios_map = 0x80  map==boot = 0  map S/N: 54085408
Mapping bitmap file /boot/coffee.bmp
Calling map_insert_file
Compaction removed 592 BIOS calls.
Bitmap: 603 sectors.
BIOS data check was okay on the last boot

Boot image: /boot/vmlinuz-2.6.31-14-generic
Setup length is 26 sectors.
Compaction removed 7452 BIOS calls.
Mapped 7601 sectors.
Mapping RAM disk /boot/initrd.img-2.6.31-14-generic
Compaction removed 14696 BIOS calls.
RAM disk: 14930 sectors.
Added Lin_2.6.31-14 *

Boot image: /boot/vmlinuz-2.6.31-20-generic
Setup length is 26 sectors.
Compaction removed 7468 BIOS calls.
Mapped 7617 sectors.
Mapping RAM disk /boot/initrd.img-2.6.31-20-generic
Compaction removed 14704 BIOS calls.
RAM disk: 14938 sectors.
Added Lin_2.6.31-20

Boot image: /boot/memtest86+.bin
Setup length is 4 sectors.
Compaction removed 243 BIOS calls.
Mapped 254 sectors.
Added Memory_Test+

Boot other: /dev/sda6, loader CHAIN
Pseudo partition start: 43198848
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added Fedora_8

Boot other: /dev/sda1, on /dev/sda, loader CHAIN
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added Windows_XP

 BIOS   VolumeID   Device
  80    54085408    0800
Writing boot sector.
/boot/boot.0200 exists - no boot sector backup copy made.
Map file size: 336896 bytes.
RAID device mask 0x0000
One warning was issued.

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

Если мы воспользуемся нашей загрузочной дискетой и перезагрузим компьютер, мы увидим приглашение, подобное приглашению, изображенному на рисунке 1. Обратите внимание на таймер обратного отсчета в верней части экрана, который отсчитывает 20 секунд (те самые 200 десятых долей секунды, указанные в конфигурационном файле). Если загружаемая операционная система не выбрана в течение 20 секунд, то автоматически загружается отмеченный вариант (в нашем примере это первая строка – ядро Lin_2.6.31-14).

Рисунок 1. Экран загрузки LILO
Рисунок 1. Экран загрузки LILO

Для перемещения по списку используйте клавиши со стрелками. На рисунке 2 показано, как выбрать вторую запись – более новое ядро Lin_2.6.31-20. Обратите внимание на то, что таймер больше не отображается. Для загрузки выбранного ядра нажмите клавишу Enter.

Рисунок 2. Выбор другого варианта загрузки с помощью LILO
Рисунок 2. Выбор другого варианта загрузки с помощью LILO

После того, как вы протестируете вашу загрузочную дискету, измените в файле lilo.conf строку boot=/dev/fd0 для установки LILO в MBR или в загрузочную запись раздела. Например, если задать значение boot=/dev/sda, LILO будет установлен в главную загрузочную запись первого жесткого диска.

Итак, теперь вы имеете представление о менеджере загрузки LILO и его конфигурационном файле. Некоторые параметры конфигурации можно переопределить с помощью командной строки lilo. Дополнительную информацию вы сможете найти на man-странице lilo, выполнив команду man lilo или man lilo.conf, а еще более полную – в PostScript-руководстве пользователя, которое устанавливается вместе с пакетами lilo или lilo-doc. Это руководство должно устанавливаться в директорию с документацией, однако ее точное местоположение может варьироваться от системы к системе. Чтобы отыскать этот файл, можно отфильтровать список установленных пакетов с помощью утилиты grep. В листинге 3 приведен пример для системы Ubuntu 9.10, основанной на Debian.

Листинг 3. Поиск руководства пользователя LILO с помощью dpkg
ian@pinguino:~$ dpkg -L lilo-doc | grep "ps"
/usr/share/doc/lilo-doc/user.ps.gz
/usr/share/doc/lilo-doc/tech.ps.gz

Соответствующая команда в системе, использующей RPM-пакеты (например, Fedora), выглядит следующим образом: rpm -ql lilo-doc | grep "ps".

Дополнительные параметры LILO

LILO имеет несколько дополнительных параметров.

lilo -q
Отображает информацию из файла map.
lilo -R
Настраивает lilo на автоматическую загрузку указанной системы только при следующей перезагрузке. Это очень удобно для автоматической перезагрузки удаленных систем.
lilo -I
Отображает информацию о пути к файлу ядра.
lilo -u
Удаляет lilo и восстанавливает предыдущую загрузочную запись.

Когда LILO загружает Linux-систему, вы можете передать ему дополнительные параметры. Например, если система перестала запускаться в графическом режиме, можно загрузить ее в режиме с уровнем выполнения 3 или в однопользовательском режиме и восстановить необходимые параметры конфигурации. Если вы выберете в списке вариант для загрузки и нажмете клавишу TAB, вы должны увидеть окно терминала с указанной меткой загружаемой операционной системы, как показано на рисунке 3. Любой текст, вводимый вами после имени метки, будет передан ядру. Например, в нашем случае вы можете выбрать самую последнюю систему Ubuntu, просто переместившись на одну строку вниз и нажав клавишу TAB. Если вы не выбрали имя ранее, вам может потребоваться ввести полное имя, которое вы указали в метке. Вот, почему использование кратких меток (в отличие от меток, используемых в наших примерах) может оказаться хорошим решением: напечатать Lin_2.6.31.20 не слишком просто.

Рисунок 3. Добавление параметров ядра с помощью LILO
Рисунок 3. Добавление параметров ядра с помощью LILO

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

Помните также о том, что при использовании LILO вы должны выполнять команду lilo каждый раз после обновления конфигурационного файла (/etc/lilo.conf). Также следует выполнять команду lilo, если вы добавляете, перемещаете или удаляете разделы, или же выполняете другие изменения, которые могут привести к тому, что менеджер загрузки перестанет работать.


GRUB

GRUB, или GRand Unified Boot loader – это второй из двух наиболее распространенных менеджеров загрузки Linux. Так же, как и LILO, GRUB может быть установлен в MBR вашего загрузочного жесткого диска или в загрузочную запись раздела. Также его можно установить на сменные носители, такие как дискеты, компакт-диски или USB-накопители. Если вы еще не знакомы с GRUB, то вам будет полезно попрактиковаться с дискетой или USB-накопителем, как это будет показано в наших примерах.

В настоящее время GRUB, или GNU GRUB разрабатывается под руководством Free Software Foundation. Новая версия, GRUB 2 находится в процессе разработки и ее начинают включать в состав дистрибутивов Linux, а оригинальные версии GRUB 0.9x теперь известны как Grub Legacy.

Во время установки Linux вы обычно будете выбирать в качестве загрузчика LILO или GRUB. Если вы выберете LILO, возможно, GRUB не будет установлен, и вам может потребоваться установить его с помощью отдельного пакета. С этого момента мы будем предполагать, что пакет GRUB уже установлен. Если при установке пакетов вам потребуется помощь, то вы можете найти статьи об управлении пакетами в нашем перечне материалов для подготовки к экзаменам LPIC-1.

Конфигурация менеджера загрузки GRUB (Legacy) обычно содержится в файле /boot/grub/grub.conf. Если в вашей системе поддерживаются символические ссылки (а они поддерживаются в большинстве Linux-систем), то, вероятно, вы сможете найти файл /boot/grub/menu.lst, являющийся символической ссылкой на файл /boot/grub/grub.conf.

Команда grub (/sbin/grub, или в некоторых системах, /usr/sbin/grub) – это небольшая, но достаточно мощная оболочка, поддерживающая ряд команд для установки GRUB, загрузки систем, поиска и отображения конфигурационных файлов, и прочих подобных задач. Эта оболочка содержит практически тот же самый код, что и загрузчик GRUB второй стадии, поэтому полезно изучить GRUB без необходимости загрузки среды GRUB второй стадии. Загрузчик GRUB второй стадии запускается либо в режиме меню, который позволяет выбирать загружаемую операционную систему из меню, либо в командном режиме, в котором указываются отдельные команды для загрузки системы. Также существует ряд других команд, таких как grub-install, которые используют оболочку GRUB и помогают автоматизировать такие задачи, как, например, установка GRUB.

В листинге 4 представлена часть конфигурационного файла GRUB. При его рассмотрении помните об одной важной вещи: в GRUB (по крайней мере, в GRUB Legacy) нумерация дисков, разделов и прочих элементов начинается с 0, а не с 1. Также обратите внимание на то, что строка kernel очень длинная, поэтому мы используем обратную косую черту (\), которая означает, что мы разбили строку, чтобы она уместилась в границах листинга.

Листинг 4. Пример конфигурационного файла GRUB /boot/grub/menu.lst
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,5)
#          kernel /boot/vmlinuz-version ro root=/dev/sda6
#          initrd /boot/initrd-version.img
#boot=/dev/sda6
default=1
timeout=10
splashimage=(hd0,5)/boot/grub/splash.xpm.gz
#hiddenmenu
password --md5 $1$RW1VW/$4XGAklxB7/GJk0uO47Srx1
title Upgrade to Fedora 11 (Leonidas)
	kernel /boot/upgrade/vmlinuz preupgrade \ 
      repo=hd::/var/cache/yum/preupgrade stage2=\
      hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/install.img \
      ks=hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/ks.cfg
	initrd /boot/upgrade/initrd.img
title Fedora (2.6.26.8-57.fc8)
	root (hd0,5)
	kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quiet
	initrd /boot/initrd-2.6.26.8-57.fc8.img
title Fedora (2.6.26.6-49.fc8)
	root (hd0,5)
	kernel /boot/vmlinuz-2.6.26.6-49.fc8 ro root=LABEL=FEDORA8 rhgb quiet
	initrd /boot/initrd-2.6.26.6-49.fc8.img
title GRUB Menu
	rootnoverify (hd0,1)
	chainloader +1
title Windows
	rootnoverify (hd0,0)
	chainloader +1

Так же, как и в случае с LILO, первый раздел параметров в конфигурационном файле GRUB определяет порядок работы загрузчика. Этот раздел конфигурации GRUB называется menu commands (команды меню) и должен располагаться перед всеми остальными командами. Все остальные разделы содержат параметры, индивидуальные для каждого образа операционной системы, которую мы хотим загружать через GRUB. Обратите внимание на то, что "title" является командой меню, и за ней всегда следуют одна или несколько более общих команд или пунктов меню. Рассмотренная нами ранее конфигурация LILO является типичным примером двойной загрузки, позволяющей загружать ОС Windows и две системы Linux. Пример конфигурации GRUB, рассматриваемый сейчас, был создан на том же самом компьютере. Фактически, это загрузочное меню, в котором управление последовательно передается от элемента "Fedora 8", присутствовавшем в меню загрузчика LILO. Вы можете обнаружить, что одни и те же типы записей присутствуют как в конфигурационном файле LILO, так и в конфигурационном файле GRUB. Вы можете подумать над тем, что следует изменить в рассмотренной ранее конфигурации LILO для добавления в нее дополнительных операционных систем, используемых в этом примере.

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

#
Все строки, начинающиеся со знака решетки (#), являются комментариями и игнорируются загрузчиком GRUB. Рассматриваемый нами пример конфигурационного файла изначально был сгенерирован установщиком Anaconda операционной системы Red Hat. Если вы установили GRUB в процессе инсталляции Linux, то, возможно, в вашем конфигурационном файле будут присутствовать комментарии. Зачастую комментарии помогают программе обновления системы обеспечивать соответствие конфигурации GRUB новым версиям обновленного ядра. Если вы редактируете конфигурационный файл самостоятельно, то обратите внимание на такие комментарии.
default
Определяет операционную систему для загрузки по умолчанию, если пользователь не сделает выбор в течение отведенного времени. В нашем примере default=2 означает, что будет загружена третья операционная система. Помните о том, что нумерация элементов в GRUB начинается с 0, а не с 1. Если этот параметр не задан, то по умолчанию загружается первая в списке операционная система (с номером записи 0).
timeout
Задает время в секундах, после которого будет загружена операционная система по умолчанию. Обратите внимание на то, что в конфигурационном файле LILO это время задается в десятых долях секунды, а в конфигурации GRUB – в секундах.
splashimage
Задает фоновое изображение (splash), отображаемое в загрузочном меню. GRUB Legacy обращается к первому жесткому диску как к (hd0), а к первому разделу на этом диске – как к (hd0,0), поэтому значение splashimage=(hd0,6)/boot/grub/splash.xpm.gz означает, что будет использован файл /boot/grub/splash.xpm.gz, расположенный на седьмом разделе первого жесткого диска. Помните о том, что нумерация начинается с 0. Изображение представляет собой не что иное, как XPM-файл, сжатый с помощью gzip. Поддержка фоновых изображений включена в файл исправлений, который, в свою очередь, может быть включен, а может быть и не включен в состав вашего дистрибутива Linux.
password
Задает пароль, который необходимо ввести для разблокировки меню, а также для редактирования строки конфигурации или ввода команд GRUB. Так же, как и в случае с LILO, пароль может задаваться в открытом виде. Также GRUB позволяет хранить пароли в виде MD5-дайджестов (этот вариант мы используем в нашем примере). Установка пароля обеспечивает лучшую защиту, и большинство администраторов используют эту возможность. Если пароль не установлен, то пользователь получает полный доступ к командной строке GRUB.

В нашем примере приведена конфигурация с пятью опциями: обновление до Fedora 11, загрузка ОС Fedora 8 с двумя различными ядрами, загрузка ОС Windows XP, а также последовательно загружаемая опция "GRUB Menu". В этих разделах используются следующие команды.

title
Заголовок с описанием, отображающийся при загрузке GRUB в виде строки меню. Для перемещения по списку используйте клавиши со стрелками. Для выбора нужного элемента нажмите клавишу Enter.
root
Указывает раздел, с которого будет загружена операционная система. Не забудьте, что нумерация начинается с 0, поэтому первая ОС Red Hat, указанная как root (hd0,6), фактически расположена в седьмом разделе первого жесткого диска (в нашем случае, /dev/hda7), тогда как первая ОС Ubuntu, указанная как (hd1,10), расположена на втором жестком диске (/dev/hdb11). GRUB попытается смонтировать и проверить указанный раздел, а также передать при необходимости различные значения в загружаемую ОС.
kernel
Определяет загружаемый образ ядра и необходимые параметры ядра. Этот параметр похож на связку команд LILO image и append. В нашем примере имеются два различных ядра Fedora 8 и одно ядро обновления.
initrd
Так называется начальный RAM-диск (initial RAM disk), содержащий модули, необходимые ядру до начала монтирования файловых систем.
savedefault
В нашем примере этот параметр не используется. Если используются команда меню default=saved и команда операционной системы savedefault, то загрузка этой операционной системы приведет к тому, что она будет загружаться по умолчанию до тех пор, пока не будет загружена другая операционная система с командой savedefault. В нашем примере используется значение default=2, которое переопределяет любые сохраненные умолчания.
boot
Этот необязательный параметр указывает GRUB загрузить выбранную операционную систему. Это действие задано по умолчанию и выполняется после завершения работы всех остальных команд выбранного элемента.
lock
В нашем примере этот параметр не используется. При использовании этого параметра указанная операционная система не загрузится до тех пор, пока не будет введен пароль. При использовании этого параметра следует также задать пароль в начальных параметрах – в противном случае пользователь сможет изменить параметр lock и загрузить систему, или добавить "single" к одной из имеющихся записей. При желании можно задавать разные пароли для различных записей.
rootnoverify
Этот параметр похож на параметр root за исключением того, что в данном случае GRUB не пытается смонтировать файловую систему или проверить ее параметры. Обычно этот параметр используется для таких файловых систем, как NTFS, которые не поддерживаются GRUB. Его также можно использовать в том случае, если вы хотите загрузить с помощью GRUB главную загрузочную запись жесткого диска, например, для получения доступа к другому конфигурационному файлу или для перезагрузки предыдущего загрузчика.
chainloader
Указывает на то, что в качестве файла первой стадии будет загружен другой файл. Значение "+1" эквивалентно 0+1, что означает загрузку одного сектора, начиная с сектора 0, то есть, первого сектора устройства, указанного в параметре root или rootnoverify.

Теперь вы имеете некоторое представление о том, что содержится в типовом файле /boot/grub/grub.conf (или /boot/grub/menu.lst). Существует множество других команд GRUB, позволяющих осуществлять широкий контроль над процессом загрузки, а также помогающих при установке GRUB и выполнении других задач. Вы можете узнать об этих командах из руководства GRUB, которое должно быть доступно в вашей системе по команде info grub.

Теперь, когда у нас имеется конфигурационный файл GRUB, необходимо создать загрузочную дискету, чтобы протестировать его. Самый простой способ сделать это – использовать команду grub-install, как показано в листинге 5. Если вы устанавливаете GRUB на дискету или в раздел, необходимо сначала размонтировать соответствующее устройство. Этого не требуется, если вы устанавливаете GRUB в главную загрузочную запись жесткого диска, поскольку в этом случае монтируются только разделы (/dev/sda1, /dev/sda2 и т. д.), а не весь жесткий диск (/dev/sda).

Листинг 5. Установка GRUB на дискету
[root@pinguino ~]# grub-install /dev/fd0
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)	/dev/fd0
(hd0)	/dev/sda

Примечание. Вы также можете использовать имя устройства GRUB (fd0) вместо устройства /dev/fd0, но в этом случае необходимо заключить имя в кавычки, чтобы круглые скобки не были интерпретированы командной оболочкой. Пример: grub-install '(fd0)'

Карта устройств показывает вам, как GRUB соотносит свое внутреннее представление ваших дисков (fd0, hd0, hd1) с представлением Linux (/dev/fd0, /dev/sda, /dev/sdb). Вероятно, оно будет корректным на компьютере с одним или двумя IDE-дисками и (необязательно) флоппи-дисководом. Если карта устройств уже существует, то GRUB будет использовать ее без проверки. Если вы только что добавили в систему новый жесткий диск и хотите сгенерировать новую карту устройств, то запустите команду grub-install с опцией --recheck. В некоторых случаях вы можете увидеть сообщение, показанное в листинге 6. В этом случае также необходимо добавить опцию --recheck к команде grub, чтобы GRUB выполнил проверку доступных устройств и заново сгенерировал новую карту.

Листинг 6. Установка GRUB на дискету
[root@pinguino ~]# grub-install /dev/fd0
/dev/fd0 does not have any corresponding BIOS drive.

Если вы начали работу с пустой дискетой и смонтировали ее, вы обнаружите, что она осталась пустой. Произошло следующее: GRUB записал сконфигурированный загрузчик первой стадии в первый сектор дискеты; в файловой системе это не отображается. Этот загрузчик первой стадии будет загружать загрузчик второй стадии и конфигурационный файл с вашего жесткого диска. Попробуйте загрузиться с дискеты, и вы заметите небольшие обращения к ней, прежде чем появится загрузочное меню. Так же, как и в случае с LILO, перемещение по меню осуществляется с помощью клавиш со стрелками.

Рисунок 4. Загрузка с использованием GRUB
Рисунок 4. Загрузка с использованием GRUB

После того, как вы протестировали вашу загрузочную дискету, можно приступать к установке GRUB в главную загрузочную запись вашего жесткого диска. Для первого IDE-диска используется следующая команда:
grub-install /dev/sda
или
grub-install '(hd0)'

Для установки загрузчика в загрузочную запись раздела 11 используйте следующую команду:
grub-install /dev/sda11
или
grub-install '(hd0,10)'

Помните, что в GRUB нумерация начинается с 0.

Так же, как и в случае с LILO, вы можете добавлять параметры загрузки. Фактически, вы можете редактировать любые команды конфигурации GRUB и даже использовать во время загрузки другой конфигурационный файл. Если вы задали пароль, то вам потребуется ввести команду p и набрать пароль. После этого вы выбираете нужную запись и вводите команду e для ее редактирования. Выберите строку, которую вы хотите отредактировать и снова введите e. Отредактируйте строку, печатая новые символы или удаляя старые; по завершении нажмите клавишу Enter для возврата в меню. Введите команду b для загрузки системы с измененными параметрами. На рисунке 5 показан процесс редактирования команды, в котором к параметрам состояния ядра добавляется параметр 'single' для загрузки в однопользовательском режиме.

Рисунок 5. Загрузка в однопользовательском режиме через GRUB
Рисунок 5. Загрузка в однопользовательском режиме через GRUB

Обновления системы

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

  • Если вы используете LILO, то вы должны выполнять команду lilo каждый раз после обновления конфигурационного файла или внесения изменений, таких как добавление жесткого диска или удаление раздела.
  • Если вы используете GRUB, то вы можете отредактировать файл /boot/grub/grub.conf, чтобы внести изменения, а загрузчик GRUB второй стадии прочитает этот файл при перезагрузке. Обычно нет необходимости переустанавливать GRUB только потому, что вы добавили новое ядро. Тем не менее, вам может потребоваться переустановить GRUB, если вы переместили раздел или добавили диски. Помните, что загрузчик первой стадии имеет очень малый размер, поэтому в нем содержится лишь список адресов блоков загрузчика второй стадии. При перемещении раздела меняется адресация блоков, поэтому загрузчик первой стадии больше не может обнаружить загрузчик второй стадии. Далее мы рассмотрим несколько стратегий восстановления, а также обсудим загрузчики GRUB стадии 1.5.
  • Если вы запускаете несколько Linux-систем, расположенных в различных разделах, то ознакомьтесь с разделом этой статьи Использование отдельного загрузочного раздела.

Восстановление

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

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

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

Может случиться так, что вы установили дополнительную операционную систему и нечаянно перезаписали главную загрузочную запись. Некоторые операционные системы (например, DOS или Windows) всегда устанавливают свою собственную MBR. Как правило, исправить эту ситуацию очень просто. Если у вас уже есть хорошая привычка создавать загрузочную дискету каждый раз при запуске команды lilo или переустановке GRUB, то решение у вас в кармане. Просто загрузите систему Linux с дискеты и повторно запустите команду lilo или grub-install.

Если у вас не оказалось загрузочной дискеты, но имеется хоть какой-нибудь дистрибутив Linux, обычно можно загрузиться с установочного носителя в режиме восстановления. После этого корневая файловая система вашего жесткого диска либо будет смонтирована в какой-то непредсказуемой точке восстановления, либо не будет смонтирована вообще. Чтобы сделать эту случайную точку монтирования корневой директорией /, вы можете использовать команду chroot. После этого запустите команду lilo или grub-install для создания новой загрузочной дискеты или перезаписи MBR. Прежде чем перезаписать MBR, я предпочитаю создать загрузочную дискету, загрузиться с нее и убедиться, что с настройками все в порядке (конечно, вы можете быть более смелыми, чем я, и не делать этого). После того, как вы загрузитесь с CD- или DVD-диска в режиме восстановления, вы можете либо увидеть меню выбора доступных опций, либо просто получить доступ к системе в однопользовательском режиме с привилегиями пользователя root. Если вы попытаетесь загрузить систему Ubuntu 9.10, которую мы использовали в примерах при рассмотрении LILO, в однопользовательском режиме, вы увидите меню, изображенное на рисунке 6. Выбранная строка запускает оболочку пользователя root с возможностью работы в сети.

Рисунок 6. Меню восстановления Ubuntu 9.10
Рисунок 6. Меню восстановления Ubuntu 9.10

Как правило, данная опция режима восстановления выбирается в большинстве случаев. В нашем примере при восстановлении системы мы не использовали компакт-диск, а загрузили операционную систему Ubuntu 9.10 в однопользовательском режиме, как было рассмотрено выше в разделе LILO. Затем мы выполнили стандартные шаги, необходимые для создания загрузочной дискеты другой операционной системы (в нашем случае, Fedora 8), установленной в разделе /dev/sda6. Независимо от того, загружаетесь ли вы с компакт-диска или загружаете другую ОС на том же самом компьютере, эти шаги будут одинаковыми, хотя некоторые из них (например, монтирование образа, который необходимо восстановить) уже могут быть выполнены за вас.

Когда вы, наконец, окажетесь в командной строке с привилегиями пользователя root, вам может потребоваться выполнить некоторые (а может, и все) действия, показанные в листинге 7. В нашем примере мы создадим точку монтирования (/mnt/sysimage), смонтируем раздел /dev/sda6, смонтируем некоторые специальные файловые системы в качестве нового (будущего) корня, а затем выполним операцию chroot для смонтированной системы. Команда cat /etc/issue позволяет увидеть, что в результате выполнения команды chroot указанная директория становится новой корневой директорией файловой системы (по крайней мере, до тех пор, пока мы не выйдем из chroot-окружения с помощью ctrl-d или команды exit).

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

Листинг 7. Использование системы восстановления и операции chroot
root@pinguino:~# mkdir /mnt/sysimage
root@pinguino:~# mount /dev/sda6 /mnt/sysimage
root@pinguino:~# cd /mnt/sysimage
root@pinguino:~# mount -t proc none proc/
root@pinguino:~# mount -t sysfs none sys/
root@pinguino:~# mount -o bind /dev dev/
root@pinguino:~# cat /etc/issue
Ubuntu 9.10 \n \l

root@pinguino:~# chroot /mnt/sysimage
root@pinguino:~# 
sh-3.00# chroot /mnt/sysimage
[root@oinguine /]# cat /etc/issue
Fedora release 8 (Werewolf)
Kernel \r on an \m

[root@oinguine /]# grub-install /dev/fd0
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
[root@oinguine /]#

Когда ваша загрузочная дискета будет готова, нажмите ctrl-d для выхода из chroot-окружения и перезагрузите компьютер (не забудьте извлечь установочный компакт-диск или другой носитель, который мог использоваться вами). Если же у вас нет установочного CD- или DVD-диска, вы можете воспользоваться одним из множества доступных для загрузки компакт-дисков для восстановления и Linux Live-CD, а также некоторыми дискетами или USB-накопителями (см. раздел Ресурсы).

Хотя это выходит за рамки нашей статьи, может быть, вам будет полезно узнать, что можно иметь MBR, загружающую ОС Windows 2000 или Windows XP, и установить LILO или GRUB в загрузочную запись раздела. Программа загрузки ntldr может также последовательно загружать другие загрузочные секторы, хотя ее настройка может оказаться непростым делом. Для этого вам потребуется скопировать загрузочный сектор в раздел с операционной системой Windows (обычно для этого используется команда dd) и изменить скрытый файл boot.ini.

Раздел был перемещен

Если вы переместите раздел и забудете внести изменения в настройки загрузки, то вы столкнетесь с временной проблемой. Обычно в этом случае LILO или GRUB отказываются загружаться. LILO, вероятно, выведет знак 'L', означающий, что была выполнена первая стадии загрузки, после чего загрузка остановилась. GRUB выведет сообщение об ошибке. Вот, что происходит в данном случае: загрузчик первой стадии, содержащий список секторов, которые необходимо загрузить для передачи управления загрузчику второй стадии, вероятно, может загрузить секторы по этим адресам, однако они уже не содержат сигнатур загрузчика второй стадии. Помните о том, что команда lilo или grub-install помещает на дискету только загрузочный сектор, поэтому даже если у вас есть загрузочная дискета, скорее всего, она вам не поможет. Так же, как и в предыдущем примере, вероятно вам потребуется загрузить какое-нибудь окружение для восстановления системы и заново создать загрузочную дискету с LILO или GRUB, после чего перезагрузить компьютер, проверить вашу систему и переустановить менеджер загрузки в главную загрузочную запись.

Вы могли заметить, что в наших конфигурационных примерах использовались метки (labels) и универсальные уникальные идентификаторы (Universally Unique Ids, UUIDs) разделов. Например:
kernel /boot/vmlinuz-2.6.26.8-57.fc8 ro root=LABEL=FEDORA8 rhgb quiet
или
kernel /boot/upgrade/vmlinuz preupgrade repo=hd::/var/cache/yum/preupgrade stage2=\
hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/install.img \
ks=hd:UUID=8b4c62e7-2022-4288-8995-5eda92cd149b:/boot/upgrade/ks.cfg

часто использую подобные метки и идентификаторы, чтобы избежать проблем при перемещении разделов. В этом случае, хотя вам и придется обновить конфигурационный файл GRUB или LILO и повторно выполнить команду lilo, вам не придется также обновлять файл /etc/fstab. Это особенно полезно, если вы создаете образ раздела одного компьютера и восстанавливаете его в другом месте на другом компьютере, или загружаетесь с такого диска, как, например, USB-диск, который при подключении к разным компьютерам может монтироваться в разные местоположения.

Использование отдельного загрузочного раздела

Другим подходом к восстановлению, а, возможно, к предотвращению таких ситуаций является использование отдельного раздела для загрузки. Это особенно полезно, если у вас имеется тестовый компьютер с несколькими установленными на него дистрибутивами, которые часто перестраиваются. Загрузочный раздел не занимает много места – для него требуется около 100 МБ дискового пространства. Разместите этот раздел на подходящем устройстве, на котором он по возможности не будет перемещаться или менять свой номер в связи с добавлением или удалением других разделов. Зачастую для размещения загрузочного раздела на компьютерах с совместно используемыми операционными системами Windows и Linux хорошо подходит раздел /dev/sda2 (или /dev/hda2, в зависимости от того, какие метки установлены для ваших дисков). В листинге 8 представлены параметры небольшого загрузочного раздела (/dev/sda2), загружаемого главной загрузочной записью компьютера, который мы используем в качестве примера.

Листинг 8. Использование небольшого загрузочного раздела в GRUB
# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.           
default		0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout		10

## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

title           Fedora 8 (sda6) Grub menu
root            (hd0,5)
chainloader     +1
boot

# Ubuntu 9.10 uses GRUB 2, so use kernel to drive GRUB 2 menu.
title           Ubuntu 9.10 (sda7)
root            (hd0,6)
kernel          /boot/grub/core.img

# This is a divider, added to separate the menu items below from the Debian
# ones.
title		Other operating systems:
root

# Windows XP
title		Windows NT/XP
root		(hd0,0)
savedefault
chainloader	+1

Другой причиной использования загрузочного раздела являются случаи, когда корневой раздел отформатирован в файловой системе, не поддерживаемой вашим загрузчиком. Например, считается общепринятой практикой форматировать раздел /boot в файловой системе ext2 или ext3, а для корневого раздела (/) использовать менеджер логических томов (Logical Volume Manager, LVM), не поддерживаемый загрузчиком GRUB Legacy.

Если на вашем компьютере установлено несколько дистрибутивов, не предоставляйте для них общий доступ к разделу /boot. Не забывайте настраивать LILO или GRUB на загрузку с раздела, который впоследствии будет смонтирован как /boot. Помните также о том, что программы обновления операционной системы обычно обновляют конфигурацию GRUB или LILO. В среде с несколькими операционными системами можно оставить одну ОС (вместе с ее разделом /boot) в качестве основной, а при обновлении оставшихся ОС редактировать соответствующие конфигурационные файлы вручную. Другой подход заключается в том, чтобы установить загрузчик каждой операционной системы в загрузочную запись ее раздела и позволить основной системе последовательно загружать загрузочные записи разделов отдельных систем, таким образом, разделив загрузку на две стадии.

Создание автономной загрузочной дискеты или компакт-диска

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

Если вы еще не забыли основы разметки жесткого диска, которые обсуждались в статье "Изучаем Linux 101: разметка жесткого диска", то вы должны помнить про цилиндры жестких дисков. Даже если вы думаете, что цилиндр – это все лишь условность, то многие файловые системы продолжают оперировать на уровне цилиндров. В частности, вы обнаружите, что разделы используют целое число цилиндров и выровнены по их границам. Во многих файловых системах, расположенных внутри разделов, при работе с дисковым пространством также используются такие величины, как цилиндры. Во многих системах UNIX® и Linux структура файловой системы описывается суперблоками, которые являются первой единицей выделения дисковой памяти. Для таких файловых систем, как ext2 или ext3, и достаточно больших жестких дисков пространство разбивается на несколько сегментов, в начале каждого из которых содержится копия суперблока. Это помогает восстановить систему, если вы случайно нарушили границы раздела, например, работая с программой fdisk.

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

Все это хорошо, но как это связано с загрузочной дискетой? Что ж, объем дискеты не так велик, и к ней не применимо понятие цилиндров, поэтому, если вы хотите загружать с нее и первую, и вторую стадии GRUB, необходимо установить загрузчик первой стадии, а затем скопировать загрузчик второй стадии в секторы, расположенные сразу же после загрузочного сектора. В листинге 9 приведен пример того, как можно сделать это. Используйте чистую дискету, поскольку этот процесс уничтожает все имеющиеся на ней данные. Вам нужно скопировать файлы из дистрибутива GRUB (а не из директории /boot/grub), поскольку файл /boot/grub/stage2 был изменен для работы с разделами жесткого диска. Оригинальные файлы stage1 и stage2 должны находиться в поддиректории каталога /usr/share/grub. В нашем примере эти файлы находятся в директории /usr/share/grub/i386-redhat.

Листинг 9. Создание загрузочной дискеты GRUB
[root@pinguino ~]# ls /usr/share/grub/
i386-redhat
[root@pinguino ~]# cd /usr/share/grub/i386-redhat/
[root@pinguino i386-redhat]# ls -l st*
-rw-r--r-- 1 root root    512 2008-05-28 12:05 stage1
-rw-r--r-- 1 root root 109212 2008-05-28 12:05 stage2
-rw-r--r-- 1 root root 109212 2008-05-28 12:05 stage2_eltorito
[root@pinguino i386-redhat]# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.29007 s, 1.8 kB/s
[root@pinguino i386-redhat]# dd if=stage2 of=/dev/fd0 bs=512 seek=1
213+1 records in
213+1 records out
109212 bytes (109 kB) copied, 7.4094 s, 14.7 kB/s


[root@lyrebird root]# ls /usr/share/grub
i386-redhat
[root@lyrebird root]# cd /usr/share/grub/i386-redhat
[root@lyrebird i386-redhat]# ls -l st*
-rw-r--r--    1 root     root          512 Aug  3  2004 stage1
-rw-r--r--    1 root     root       104092 Aug  3  2004 stage2
[root@lyrebird i386-redhat]# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
[root@lyrebird i386-redhat]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

203+1 records in
203+1 records out

Если перед началом работы ваша дискета была отформатирована в системе MS-DOS, и теперь вы попытаетесь смонтировать ее, команда mount сообщит об ошибке, поскольку процесс копирования файла stage2 сражу же после загрузочного сектора дискеты (seek=1) уничтожил ее файловую систему.

Создание загрузочного компакт-диска GRUB похоже на создание загрузочной дискеты, хотя в этом случае необходимо подготовить образ компакт-диска и сохранить его на жестком диске. Вам потребуется создать временную директорию (назовем ее grubcd), а также поддиректории boot и boot/grub. После этого скопируйте файл stage2_eltorito из вашего дистрибутива GRUB в поддиректорию boot/grub, которую вы только что создали. С помощью команды genisoimage создайте файл загрузочного ISO-образа и запишите его на компакт-диск (для этого вы можете воспользоваться вашей любимой программой записи CD). В листинге 10 показано, как создать образ загрузочного компакт-диска с именем grubcd.iso.

Листинг 10. Создание образа загрузочного компакт-диска GRUB
[ian@pinguino ~]$ mkdir -p grubcd/boot/grub
[ian@pinguino ~]$ cp /usr/share/grub/i386-redhat/stage2_eltorito grubcd/boot/grub
[ian@pinguino ~]$ genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot \
> -boot-load-size 4 -boot-info-table -o grubcd.iso grubcd
I: -input-charset not specified, using utf-8 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 760
Total directory bytes: 4576
Path table size(bytes): 34
Max brk space used 0
233 extents written (0 MB)

Вы сможете загружаться с компакт-диска или дискеты на любом компьютере – неважно, будет ли на нем установлена система Linux или нет. Если теперь вы попытаетесь загрузиться с дискеты, вы заметите задержку, обусловленную загрузкой второй стадии с этой дискеты. Точно так же, если вы загрузитесь с компакт-диска, оболочка GRUB будет загружена с этого компакт-диска. При загрузке с дискеты или компакт диска вы получите приглашение командной строки GRUB. Нажмите клавишу TAB, чтобы увидеть список доступных команд. Используйте команду help имя_команды, чтобы получить справку по команде с именем имя_команды. В листинге 11 приведен пример командной строки GRUB.

Листинг 11. Командная строка GRUB
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> 
 Possible commands are: blocklist boot cat chainloader clear cmp color configfile 
 debug device displayapm displaymem dump embed find fstest geometry halt help
 hide impsprobe initrd install ioprobe kernel lock makeactive map md5crypt 
 module modulenounzip pager partnew parttype password pause quit read reboot 
 root rootnoverify savedefault serial setkey setup terminal terminfo testload testvbe
 unhide uppermem vbeprobe

grub> help rootnoverify
rootnoverify: rootnoverify [DEVICE [HDBIAS]]
    Similar to `root', but don't attempt to mount the partition. This
    is useful for when an OS is outside of the area of the disk that
    GRUB can read, but setting the correct root device is still
    desired. Note that the items mentioned in `root' which derived
    from attempting the mount will NOT work correctly.

grub> find /boot/grub/grub.conf
 (hd0,1)
 (hd0,5)

grub>

В этом примере мы выяснили, что на двух различных разделах нашего первого жесткого диска присутствуют конфигурационные файлы GRUB. Мы могли бы загрузить меню GRUB с помощью одного из этих файлов, выполнив команду configfile. Например: configfile (hd0,1)/boot/grub/grub.conf.

Это привело бы к загрузке меню этого конфигурационного файла, после чего мы смогли бы загрузить компьютер. Вы можете изучить эти команды, обратившись к руководству GRUB. Наберите команду info grub в окне терминала Linux, чтобы открыть руководство.

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

  1. Создайте на дискете файловую систему FAT операционной системы DOS, используя команду mkdosfs и параметр -R для резервирования достаточного количества секторов, необходимого для хранения файла второй стадии.
  2. Смонтируйте дискету.
  3. Создайте на дискете директорию /boot/grub.
  4. Скопируйте файлы stage1, stage2 и grub.conf в директорию boot/grub на дискете. Если хотите, скопируйте также файл с фоновым изображением.
  5. Отредактируйте файл grub.conf на дискете таким образом, чтобы он ссылался на файл с фоновым изображением, расположенный на дискете.
  6. Демонтируйте дискету.
  7. Используйте командную оболочку grub (команды root и setup загрузчика GRUB) для установки GRUB на дискету.

Эти шаги показаны в листинге 12.

Листинг 12. Установка GRUB на дискету с файловой системой
[root@pinguino ~]# mkdosfs -R 220 /dev/fd0
mkdosfs 2.11 (12 Mar 2005)
[root@pinguino ~]# mkdir /mnt/floppy
[root@pinguino ~]# mount /dev/fd0 /mnt/floppy
[root@pinguino ~]# mkdir -p /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/stage1 /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/stage2 /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/splash* /mnt/floppy/boot/grub
[root@pinguino ~]# cp /boot/grub/grub.conf /mnt/floppy/boot/grub
[root@pinguino ~]# umount /dev/fd0
[root@pinguino ~]# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> root (fd0)
 Filesystem type is fat, using whole disk

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/fat_stage1_5" exists... no
 Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.c
onf "... succeeded
Done.

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


GRUB 2

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

Первое, что с чем вы можете столкнуться в GRUB 2 – он не устанавливается в качестве загрузчика раздела. Хотя я указал программе установке Ubuntu установить GRUB в тот же раздел, в который я установил Ubuntu 9.10 (/dev/sda7), этот раздел оказался недоступным для последовательной загрузки. В оставшейся части этой статьи я кратко познакомлю вас с GRUB 2. Этой информации будет достаточно, чтобы вы смогли начать использовать GRUB 2 как в качестве самостоятельного загрузчика, так и в связке с GRUB Legacy.

Версия менеджера загрузки GRUB 2 для персонального компьютера поставляется в виде пакета grub-pc. В этот пакет входят несколько программ, перечисленных в листинге 13; обычно они расположены в директориях /usr/bin или /usr/sbin. Когда я писал эту статью, man-страницы этих программ содержали минимум информации. Для получения дополнительной информации попробуйте запустить эти программы с ключом --help или поищите помощи в сети Интернет.

Листинг 13. Исполняемые файлы GRUB 2 в директориях /usr/bin и /usr/sbin
ian@pinguino:~$ dpkg -L grub-pc|grep "bin/"
/usr/bin/grub-mkimage
/usr/bin/grub-mkrescue
/usr/sbin/grub-setup
/usr/sbin/update-grub2
/usr/sbin/update-grub
/usr/sbin/grub-install
/usr/sbin/upgrade-from-grub-legacy
/usr/sbin/grub-set-default
/usr/sbin/grub-reboot

Сердцем GRUB 2 являются мультизагрузочное ядро (/boot/grub/core.img) и конфигурационный файл (/boot/grub/grub.cfg). Эти два компонента будут сгенерированы для вас, если вы запустите команду grub-install и укажете в качестве объекта назначения MBR вашего диска (например, grub-install /dev/sda). Выполните команду grub-install --help, как показано в листинге 14, чтобы получить представление о том, с помощью каких команд выполняется вся работа. Некоторые из них похожи на команды GRUB Legacy, но есть и несколько новых команд, таких как --modules, --grub-setup, --grub-mkimage и так далее

Листинг 14. Справка GRUB 2 по команде grub-install
ian@pinguino:~$ grub-install --help
Usage: grub-install [OPTION] install_device
Install GRUB on your drive.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --modules=MODULES       pre-load specified modules MODULES
  --root-directory=DIR    install GRUB images under the directory DIR
                          instead of the root directory
  --grub-setup=FILE       use FILE as grub-setup
  --grub-mkimage=FILE     use FILE as grub-mkimage
  --grub-mkdevicemap=FILE use FILE as grub-mkdevicemap
  --grub-probe=FILE       use FILE as grub-probe
  --no-floppy             do not probe any floppy drive
  --recheck               probe a device map even if it already exists
  --force                 install even if problems are detected
  --disk-module=MODULE    disk module to use

INSTALL_DEVICE can be a GRUB device name or a system device filename.

grub-install copies GRUB images into the DIR/boot directory specified by
--root-directory, and uses grub-setup to install grub into the boot
sector.

Report bugs to <bug-grub@gnu.org>.

Итак, если вы запустите команду grub-install /dev/sda, будут созданы файл образа ядра и файл конфигурации, а в главную загрузочную запись вашего диска будет установлен загрузчик GRUB 2. Если вы не хотите, чтобы GRUB2 полностью выполнил за вас всю установку, вы можете выполнить эти три действия самостоятельно, а затем загрузить образ ядра GRUB 2 из загрузчика GRUB Legacy или LILO.

Сборка образа ядра GRUB 2

Проще всего создать новый файл образа ядра, запустив команду grub-install с ключом --grub-setup=/bin/true, в результате чего вместо программы установки GRUB 2 будет запущена программа /bin/true, как показано в листинге 15. Чтобы убедиться, что новый файл действительно создается, сначала мы удалили существующий файл core.img.

Листинг 15. Справка GRUB 2 по команде grub-install
ian@pinguino:~$ sudo rm /boot/grub/core.img 
ian@pinguino:~$ sudo grub-install --grub-setup=/bin/true /dev/sda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0)	/dev/sda
ian@pinguino:~$ ls -l /boot/grub/core.img
-rw-r--r-- 1 root root 25105 2010-04-08 12:10 /boot/grub/core.img

Создание конфигурационного файла GRUB 2

Конфигурационный файл GRUB 2 обычно называется /boot/grub/grub.cfg. В отличие от GRUB Legacy, не стоит изменять этот файл вручную, а следует создавать его с помощью команд grub-mkconfig или update-grub (внешний интерфейс команды grub-mkconfig). Эти команды считывают общие параметры (фоновое изображение, значения таймеров и т. д.) из файла настроек /etc/default/grub, а затем запускают исполняемые модули из директории /etc/grub.d/ для генерации различных частей конфигурационного файла (заголовок, раздел для текущей Linux-системы, разделы для других операционных систем, различные пользовательские параметры). Если вы хотите настроить меню GRUB 2, следует внести ваши изменения в файл, хранящийся в директории /etc/grub.d/ (например, 40_custom), или добавить ваш собственный файл. Помните, что этот файл должен быть исполняемым. После этого запустите команду update-grub для генерации нового файла /boot/grub/grub.cfg, как показано в листинге 16.

Листинг 16. Создание конфигурационного файла GRUB 2 с помощью команды update-grub
ian@pinguino:~$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-20-generic
Found initrd image: /boot/initrd.img-2.6.31-20-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
Found GRUB boot loader on /dev/sda1
Found Fedora release 8 (Werewolf) on /dev/sda6
done

В листинге 17 показано несколько записей конфигурационного файла, созданного в результате выполнения предыдущей команды. Длинные строки мы разбили на несколько подстрок, используя знак обратной косой черты (\). Обратите внимание на то, что строфы menuentry больше похожи на сценарии командной оболочки, нежели простые команды GRUB Legacy, не содержащие никакой логики. Другое важное отличие от GRUB Legacy заключается в том, что нумерация разделов теперь начинается с 1, хотя нумерация дисков по прежнему начинается с 0. Таким образом, в GRUB 2 устройство /dev/sda7 – это (hd0,7), тогда как в GRUB Legacy оно называлось бы (hd0,6).

Листинг 17. Фрагмент конфигурационного файла GRUB 2
### BEGIN /etc/grub.d/05_debian_theme ###                               
set menu_color_normal=white/black
set menu_color_highlight=black/white
### END /etc/grub.d/05_debian_theme ###                                 

### BEGIN /etc/grub.d/10_linux ###                                      
menuentry "Ubuntu, Linux 2.6.31-20-generic" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        set quiet=1
        insmod ext2
        set root=(hd0,7)
        search --no-floppy --fs-uuid --set 8954fa66-e11f-42dc-91f0-b4aa480fa103
        linux   /boot/vmlinuz-2.6.31-20-generic \
          root=UUID=8954fa66-e11f-42dc-91f0-b4aa480fa103 ro   quiet splash
        initrd  /boot/initrd.img-2.6.31-20-generic
}
menuentry "Ubuntu, Linux 2.6.31-20-generic (recovery mode)" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
        insmod ext2
        set root=(hd0,7)
        search --no-floppy --fs-uuid --set 8954fa66-e11f-42dc-91f0-b4aa480fa103
        linux   /boot/vmlinuz-2.6.31-20-generic 
         root=UUID=8954fa66-e11f-42dc-91f0-b4aa480fa103 ro single
        initrd  /boot/initrd.img-2.6.31-20-generic
}

Загрузка GRUB 2 из GRUB Legacy

Мы упомянули, что невозможно выполнить последовательную загрузку GRUB 2 из загрузочной записи раздела. Однако, после того как вы создали образ ядра и конфигурационный файл, вы можете добавить запись в файл grub.conf или menu.lst загрузчика GRUB Legacy, чтобы загрузить образ ядра GRUB 2, которое затем отобразит созданное вами меню GRUB 2. В листинге 18 показана запись, которая уже использовалась в листинге 8. Поскольку это файл конфигурации GRUB Legacy, значением параметра root для устройства /dev/sda7 является (hd0,6).

Листинг 18. Запись в конфигурации GRUB Legacy, позволяющая загружать образ ядра GRUB 2
# Ubuntu 9.10 uses GRUB 2, so use kernel to drive GRUB 2 menu.          
title           Ubuntu 9.10 (sda7)
root            (hd0,6)
kernel          /boot/grub/core.img

Когда вы выберете этот пункт в меню GRUB Legacy, вы увидите меню, изображенное на рисунке 7, в котором выделена первая строка (а первая и вторая строки – это строки, показанные в листинге 17).

Рисунок 7. Пример меню GRUB 2
Рисунок 7. Пример меню GRUB 2

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

Листинг 19. Попытка установки GRUB 2 в загрузочную запись раздела
ian@pinguino:~$ sudo grub-install /dev/sda7
grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR.  
This is a BAD idea.
grub-setup: warn: Embedding is not possible.  GRUB can only be installed in 
this setup by using blocklists.  However, blocklists are UNRELIABLE and its 
use is discouraged.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0)	/dev/sda

Это сообщение объясняет, почему моя попытка установить GRUB 2 в раздел /dev/sda7 при установке Ubuntu 9.10 завершилась неудачей. Нелишне отметить, что GRUB 2 будет установлен в том случае, если вы выполняете новую установку этого дистрибутива Ubuntu, однако, если вы обновляете уже установленную ОС Ubuntu, будет сохранен существующий менеджер загрузки.

Создание диска восстановления GRUB 2

В состав GRUB 2 включена команда grub-mkrescue, предназначенная для создания дискеты или компакт-диска восстановления. Для получения информации об этой команде обратитесь к справочной системе или man-странице.


Заключение

Из этой статьи вы узнали о двух основных менеджерах загрузки, использующихся в традиционных Linux-системах, а также о том, как восстанавливать параметры загрузки после ошибочной настройки и решать проблемы с загрузкой компьютера. Также вы познакомились с менеджером загрузки GRUB 2, который пока не фигурирует в целях экзаменов LPI, но начинает появляться в самых значимых дистрибутивах Linux.


Загрузка

ОписаниеИмяРазмер
Примеры конфигурационных файлов для этой статьиl-lpic1-v3-102-2-samples.zip8 КБ

Ресурсы

Научиться

  • Оригинал статьи: Learn Linux, 101: Boot managers (EN).
  • На Web-сайте программы сертификации LPIC (EN) вы найдете подробные цели, списки задач и примерные вопросы всех трех уровней сертификации на администратора Linux-систем профессионального института Linux. В частности, на этом сайте представлены цели экзаменов LPI 101 и LPI 102 по состоянию на апрель 2009 года. Всегда обращайтесь к Web-сайту программы сертификации LPIC, чтобы узнать последние цели.
  • Просмотрите всю серию статей для подготовки к экзаменам института LPI (EN) на сайте developerWorks, основанных на предыдущих целях, определенных до апреля 2009 года, чтобы изучить основы администрирования Linux и подготовиться к экзаменам для получения сертификата администратора Linux.
  • Узнайте о GRUB Legacy и GRUB 2, посетив домашнюю страницу проекта GNU GRUB (EN). GNU GRUB – это мультизагрузочный менеджер загрузки, унаследованный от GRUB – GRand Unified Bootloader.
  • Спецификация множественной загрузки (EN) позволяет любому совместимому менеджеру загрузки загружать любую совместимую операционную систему.
  • Прочитайте статью "Основные задачи для начинающих Linux-разработчиков" (EN) (developerWorks, март 2005 г.) и узнайте, как открыть окно терминала или программной оболочки, а также о многом другом.
  • Web-сайт Linux Documentation Project (EN) содержит большое количество полезной документации, в особенности, HOWTO-руководств.

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=750845
ArticleTitle=Изучаем Linux, 101: Менеджеры загрузки
publish-date=08042011