headermask image


Advertisement

LPI 101: Установка Linux и управление пакетами. Менеджеры загрузки

Перед тем, как углубиться в LILO и GRUB, давайте рассмотрим как ПК начинает работу или загружается. Код, называемый BIOS (от Basic Input Output Service — Базовая служба ввода/вывода) хранится в энергонезависимой памяти, такой как ROM, EEPROM или flash-памяти. Когда ПК включается или перезагружается, запускается этот код. Обычно он выполняет тестирование при включении питания (power-on self test — POST) для проверки машины. В конце он загружает первый сектор главной загрузочной записи (MBR) загрузочного диска.

Как обсуждалось в предыдущем параграфе Разделы, MBR также содержит таблицу разделов, так что объём выполняемого кода в MBR меньше чем 512 байт, так что он не может содержать много инструкций. Заметим, что каждый диск, даже дискета (floppy), содержит исполняемый код в своем MBR, даже если код просто выводит сообщение вроде “Non-bootable disk in drive A:” (“В дисководе A: не загрузочный диск”). Этот код загружается BIOS из первого сектора, называемого первичный загрузчик (first stage boot loader) или загрузчик первой стадии (stage 1 boot loader).

Стандартный загрузчик в MBR жесткого диска, который использовался операционными системами MS DOS, PC DOS и Windows, проверяет таблицу разделов для определения основного раздела на загрузочном диске, помеченного как активный(active), загружает первый сектор этого раздела и передает управление в начало загруженного кода. Этот новый кусок кода также известен как загрузочная запись раздела (partition boot record). Загрузочная запись раздела тоже является загрузчиком первой стадии, но он уже достаточно интеллектуален, чтобы загрузить несколько блоков раздела. В этих блоках располагается код загрузчика второй стадии (stage 2 boot loader). В MS-DOS и PC-DOS загрузчик второй стадии непосредственно переходит к загрузке оставшейся части операционной системы. Таким образом, операционная система при загрузке проходит несколько вспомогательных шагов, пока не перейдет в рабочее состояние.

Описанная схема работает прекрасно для компьютеров с одной операционной системой. Но что произойдет, если вам понадобится несколько операционных систем. Скажем Windows 98, Windows XP и три различных дистрибутива Linux? Вы могли бы при помощи некой программой (такой как DOS FDISK) сменить активность разделов и перезагрузиться. Но это утомительно. Кроме того, диск может иметь только четыре основных раздела, а стандартный MBR загрузчик умеет выполнять загрузку только с основного раздела. Но приведенный пример подразумевает пять операционных систем, каждой из которых нужен раздел!

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

  1. Loadlin, исполняемая DOS-программа запускаемая в работающей системе DOS для загрузки с Linux раздела. Она была популярна, когда настройка множественной загрузки была сложным и рискованным делом.
  2. OS/2 Boot Manager — программа, устанавливавшаяся в небольшой специальный раздел. Раздел помечался как активный и стандартный MBR процесса загрузки запускал Менеджер загрузки (Boot Manager), который выводил меню, позволявшее пользователю выбрать систему для загрузки.
  3. Умный менеджер загрузки, программа, которая может размещаться в разделе операционной системы и вызываемая или загрузочной записью активного раздела или основной загрузочной записью Примеры:
    • BootMagic™, часть Norton PartitionMagic™
    • LILO, the LInux LOader (Загрузчик Linux)
    • GRUB, the GRand Unified Boot loader (Главный Унифицированный Загрузчик)

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

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

Загрузчик второй стадии, используемый LILO и GRUB позволяет вам выбрать какую из имеющихся операционных систем или их версий следует загрузить. Однако LILO и GRUB значительно различаются в том, что изменение системы требует выполнения некой команды для создания заново настроек загрузки LILO при обновлении ядра или выполнении других подобных операций, тогда как для GRUB это можно сделать отредактировав текстовый файл настроек. LILO существует давно. GRUB новее. Оригинальный GRUB теперь стал GRUB Legacy, а GRUB 2 разрабатывается под патронажем Free Software Foundation

LILO

LILO, или LInux LOader (Загрузчик Linux), один из наиболее распространенных загрузчиков Linux. LILO может быть установлен в MBR вашего загрузочного жесткого диска или в загрузочную запись раздела. Он также может быть установлен на сменных носителях, таких как дискеты (floppy-диски), CD или USB диски. Если вы еще не знакомы с LILO, то хорошей мыслью будет попрактиковаться на дискете или USB диске, что мы и будем делать в наших примерах.

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

Основная функция команды lilo, расположенной в /sbin/lilo, запись загрузчика первой стадии и создание файла распределения памяти (/boot/map), используя данные конфигурации, которые обычно располагаются в /etc/lilo.conf. У неё есть несколько дополнительных назначений, которые мы опишем позднее. Для начала давайте посмотрим на типичный файл конфигурации LILO, который может быть использован при двойной загрузке Windows и Linux.

Листинг 3. Пример /etc/lilo.conf

prompt
timeout=50
compact
default=linux
boot=/dev/fd0
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
password=mypassword
restricted
image=/boot/vmlinuz-2.4.21-32.0.1.EL
label=linux
initrd=/boot/initrd-2.4.21-32.0.1.EL.img
read-only
append="hdd=ide-scsi root=LABEL=RHEL3"
other=/dev/hda1
loader=/boot/chain.b
label=WIN-XP

Первый набор опций, приведенных выше — это глобальные опции, управляющие работой LILO. Второй и третий представляют опции для каждого образа двух операционных систем, которые мы хотим загружать через LILO, в данном примере Red Hat Enterprise Linux 3 и Windows XP.

Глобальные опции в нашем примере это:
prompt
вызывает вывод сообщения загрузки.
timeout
указывает в десятых долях секунды задержку перед автоматической загрузкой системы по умолчанию. В нашем примере timeout=50, что эквивалентно задержке в 5 секунд.
compact
пытается объединить запросы на чтение для смежных секторов. Это ускоряет загрузку и уменьшает размер файла распределения памяти.
default
указывает какая операционная система будет грузиться по умолчанию. Если не указано, то грузится первая по списку. В нашем примере если пользователь не выберете что-либо в течении 5 секунд, то будет загружена система Linux.
boot
указывает куда будет установлен LILO. В нашем примере это дискета (floppy диск) /dev/fd0. Для установки в MBR первого жесткого диска укажите boot=/dev/hda. Наша система RHEL 3 в действительности располагается на /dev/hda11, поэтому мы должны указать boot=/dev/hda11 если хотим установить LILO в этот раздел. Если этот параметр опущен, то LILO попытается использовать загрузочный сектор устройства, смонтированного в данное время как root (/).
map
указывает расположение файла распределения памяти, импользуемый LILO, для вывода сообщений пользователю и загрузки операционных систем указанных в секциях image файла lilo.conf. По умолчанию это /boot/map.
install
указывает новый файл для установки в качестве загрузочного сектора. По умолчанию устанавливается /boot/boot.b, являющийся частью пакета LILO.
message
определяет сообщение, появляющееся перед приглашением загрузки. Оно должно быть менее 65535 байт. Если ваша система отображает графическую оболочку меню LILO, то вы обнаружите, что /boot/message содержит файл картинки. На некоторых системах Red Hat это будет файл 300×200 пикселов в формате PCX. Для систем SUSE это может быть 16 цветный bitmap-файл размером 640×480 пикселов. В этом случае вы также можете обнаружить несколько дополнительных параметров. Посмотрите документацию, идущую с вашей системой. Например, моя система SUSE SLES9 хранит его в /usr/share/doc/packages/lilo/README.bitmaps.
lba32
указывает, что LILO следует использовать для дисков режим LBA32 вместо CHS или линейной адресации секторов.
password
определяет пароль, который следует ввести перед загрузкой образа. Заметим, что это обычный текст, поэтому следует установить такие атрибуты файла /etc/lilo.conf, чтобы запретить просмотр этого файла всем пользователям кроме root. Он не должен совпадать с паролем суперпользователя (root). И password, и следующая за ним опция, restricted, на самом деле являются примерами опций для каждого образа, которые для удобства могут быть указаны в глобальной секции. Если указано именно так, то одно и то же значение используется для всех образов до тех пор, пока оно не будет переопределено в разделе настроек конкретного образа.
restricted
смягчает запрос пароля так, что пароль запрашивается только если пользователь пытается использовать при загрузке дополнительные параметры. Вы можете использовать это, чтобы позволить пользователю загружаться нормально без ввода пароля, но заставить ввести пароль при загрузке в режиме единичного пользователя.

Следующая секция описывает опции специфичные для RHEL3.

image
указывает, что это секция системы Linux, которая загружается из файла. Параметром является имя файла образа ядра Linux.
label
это необязательная метка, которую вы можете ввести вместо полного имени файла образа.
initrd
это имя инициализационного RAM-диска, который содержит модули, необходимые ядру до того, как будет смонтирована файловая система.
read-only
указывает, что корневая файловая система должна быть изначально смонтирована в режиме только для чтения. Последующие стадии загрузки обычно перемонтируют ее в режим чтение/запись после того, как она будет проверена.
append
указывает опции, передаваемые ядру. В нашем примере указано, что для /dev/hdd должна использоваться эмуляция SCSI (2.4 и более ранние ядра использовали таким образом оптические устройства типа CD-ROM). Также указано, что раздел с меткой RHEL3 должен монтироваться как корневой (/).

В последней секции указаны опции для нашей не-Linux системы.

other
указывает имя устройства, содержащего устройство (или файл) в котором находится загрузочный сектор загружаемой системы.
loader
указывает используемый загрузчик. LILO поддерживает chain.b, который просто загружает эту загрузочную запись загрузочного раздела или, как вариант, /boot/os2_d.b который может использоваться для загрузки OS/2 со второго жесткого диска.
label
не обязательная метка, которую вы можете использовать вместо полного имени образа при выборе образа.

Теперь если мы вставим пустую дискету мы сможем выполнить команду lilo (/sbin/lilo) для создания загрузочной дискеты как показано в Листинге 4. Заметьте, что команда lilo имеет пять уровней детальности вывода. Добавьте дополнительный -v для каждого уровня.

Листинг 4. Создание загрузочной дискеты с lilo

[root@lyrebird root]# lilo -v -v
LILO version 21.4-4, Copyright (C) 1992-1998 Werner Almesberger
'lba32' extensions Copyright (C) 1999,2000 John Coffman
Reading boot sector from /dev/fd0
Merging with /boot/boot.b
Secondary loader: 11 sectors.
Mapping message file /boot/message
Compaction removed 43 BIOS calls.
Message: 74 sectors.
Boot image: /boot/vmlinuz-2.4.21-32.0.1.EL
Setup length is 10 sectors.
Compaction removed 2381 BIOS calls.
Mapped 2645 sectors.
Mapping RAM disk /boot/initrd-2.4.21-32.0.1.EL.img
Compaction removed 318 BIOS calls.
RAM disk: 354 sectors.
Added linux *
Boot other: /dev/hda1, on /dev/hda, loader /boot/chain.b
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added WIN-XP
/boot/boot.0200 exists - no backup copy made.
Map file size: 8192 bytes.
Writing boot sector.

Теперь мы получили загрузочную дискету LILO. Если LILO обнаружит ошибку, то вы увидите сообщение о ней и загрузочный сектор не будет записан. Например, если в нашем файле /etc/lilo.conf мы пропустим опцию lba32, то мы увидим нечто похожее на приведенное в Листинге 5. Это будет совет использовать опции linear или lba32. В этом случае мы используем командную строку для указания опции -l, что равнозначно указанию опции linear в lilo.conf. Если мы проделаем это еще раз с опцией -L, то lilo должен завершить все успешно и результат будет схож с приведенным ранее.

Листинг 5. Пример /etc/lilo.conf с ошибкой

[root@lyrebird root]# lilo
Warning: device 0x030b exceeds 1024 cylinder limit
Fatal: geo_comp_addr: Cylinder number is too big (16284 > 1023)
[root@lyrebird root]# lilo -l
Warning: device 0x030b exceeds 1024 cylinder limit
Fatal: sector 261613688 too large for linear mode (try 'lba32' instead)

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

Вы получили некоторое представление о LILO и его конфигурационном файле, включая то как изменять некоторые опции конфигурации из командной строки lilo. Более подробную информацию вы найдете в man-страницах lilo, используя команду man lilo. Вы можете найти еще более развернутую информацию в руководстве пользователя в формате postscript, устанавливаемом вместе с пакетом lilo. Оно должно быть установлено в вашем каталоге с документацией, но точное место расположения может варьироваться от системы к системе. Одним из способов ее обнаружения является фильтрация списка пакетов при помощи grep. Листинг 6 показывает это для основанной на rpm системы RHEL3, которую мы используем в качестве примера.


Листинг 6. Обнаружение руководства пользователя при помощи rpm.

[ian@lyrebird ian]$ rpm -ql lilo | grep ".ps$"
/usr/share/doc/lilo-21.4.4/doc/Technical_Guide.ps
/usr/share/doc/lilo-21.4.4/doc/User_Guide.ps

Дополнительные параметры командной строки LILO

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

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

При загрузке системы Linux через LILO, вам может понадобиться указать дополнительные параметры. Например, если графическая оболочка не загружается, то вы можете захотеть загрузиться в режиме mode 3 или в однопользовательском режиме для восстановления. Любой текст, набираемый вами после имени метки будет передан ядру. Например, в нашем примере мы можем выбрать систему RHEL просто набрав “linux”. Для загрузки в mode 3 или однопользовательском режиме, следует набрать одну из указанных строк соответственно.

linux 3
linux single

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

GRUB

GRUB или GRand Unifood Boot loader (Главный Унифицированный Загрузчик), это второй из двух наиболее распространенных загрузчиков Linux. Как и LILO, GRUB может быть установлен в MBR вашего загрузочного жесткого диска или в загрузочную запись раздела. Также он может быть установлен на сменных носителях, таких как дискета, CD или USB драйв. Если вы еще не знакомы с GRUB, то хорошей идеей будет попрактиковаться на дискете или USB диске, что мы и будем делать в приводимом примере.

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

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

GRUB имеет файл настроек, расположенный обычно в /boot/grub/grub.conf. Если ваша система поддерживает символьные ссылки, как большинство файловых систем Linux, то вероятно у вас есть /boot/grub/menu.lst как символьная ссылка на /boot/grub/grub.conf.

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

Листинг 7 содержит часть конфигурационного файла GRUB. Просматривая его, помните одну важную вещь — GRUB нумерует диски, разделы и все остальное что должно быть пронумеровано, начиная с 0, а не с 1.

Листинг 7. Пример конфигурационного файла 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 (hd1,5)
# kernel /boot/vmlinuz-version ro root=/dev/hdc6
# initrd /boot/initrd-version.img
#boot=/dev/hdc6
default=2
timeout=10
splashimage=(hd0,6)/boot/grub/splash.xpm.gz
password --md5 $1$/8Kl21$3VPIphs6REHeHccwzjQYO.
title Red Hat Linux (2.4.20-31.9)
root (hd0,6)
kernel /boot/vmlinuz-2.4.20-31.9 ro root=LABEL=RH9 hdd=ide-scsi
initrd /boot/initrd-2.4.20-31.9.img
title Red Hat Linux (2.4.20-6)
root (hd0,6)
kernel /boot/vmlinuz-2.4.20-6 ro root=LABEL=RH9 hdd=ide-scsi
initrd /boot/initrd-2.4.20-6.img
title Red Hat Enterprise Linux WS A (2.4.21-32.0.1.EL)
root (hd0,10)
kernel /boot/vmlinuz-2.4.21-32.0.1.EL ro root=LABEL=RHEL3 hdd=ide-scsi
initrd /boot/initrd-2.4.21-32.0.1.EL.img
title Ubuntu, kernel 2.6.10-5-386
root (hd1,10)
kernel /boot/vmlinuz-2.6.10-5-386 root=/dev/hdb11 ro quiet splash
initrd /boot/initrd.img-2.6.10-5-386
savedefault
boot
title Ubuntu, kernel 2.6.10-5-386 (recovery mode)
lock
root (hd1,10)
kernel /boot/vmlinuz-2.6.10-5-386 root=/dev/hdb11 ro single
initrd /boot/initrd.img-2.6.10-5-386
boot
title Win/XP
rootnoverify (hd0,0)
chainloader +1
title Floppy
root (fd0)
chainloader +1

Также как и в конфигурационном файле LILO, первый набор опций определяет определяет поведение GRUB. Для GRUB он называется menu commands (команды меню) и должен быть указаны до остальных команд. Остальные секции содержат опции для каждого образа операционных систем, которые мы хотим загружать через GRUB. Заметьте, что “title” — это команда меню. Каждому вхождению title сопутствует одна или несколько базовых команд или пунктов меню. Пример LILO был типичным простым вариантом двойной загрузки систем Windows и Linux. Этот же пример был создан на том же компьютере, что и предыдущий, но в него мы добавили несколько дополнительных операционных систем, чтобы показать вам кое-что из возможностей загрузчика. Вы можете распознать многие сходные элементы, появляющиеся в конфигурационных файлах и LILO, и GRUB. Вы можете задаться мыслью, что же следует изменить, чтобы добавить эти несколько дополнительных операционных систем к предыдущему примеру LILO.

Команды меню, применяемые ко всем остальным секциям в нашем примере это:

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

В нашем примере используется пять дистрибутивов Linux (три Red Hat и два Ubuntu) плюс Windows XP и возможность загрузки с дискеты. Команды, используемые в этих секциях:

title
это заголовок-описание, отображающийся в строке меню при загрузке GRUB. Вы используете клавиши стрелок для перемещения вверх и вниз по заголовкам, а затем нажимаете клавишу Enter для выбора некоторого элемента.
root
указывает раздел, с которого следует загружаться. Помните, что как и для splashimage, нумерация начинается с 0, так что первая система Red Hat, указанная как root (hd0,6) это на самом деле расположена на разделе 7 первого жесткого диска (в данном случае /dev/hda7), В то время как для первой системы Ubuntu в качестве root указан (hd1,10) расположенный на втором жестком диске (/dev/hdb11). GRUB попытается смонтировать это раздел для его проверки и обеспечения загрузки операционной системы с разными параметрами.
kernel
указывает образ ядра, который следует загрузить, а также параметры ядра. Это похоже на комбинацию команд LILO image и append. В приведенном примере у нас имеется два разных ядра Red Hat 9, плюс ядро рабочей станции Red Hat Enterprise Linux 3 Workstation, и одна и та же система Ubuntu с двумя различными наборами параметров ядра.
initrd
Имя RAM-диска, содержащего модули, необходимые ядру перед монтированием файловой системы.
savedefault
Приведено здесь для иллюстрации. Если указана команда меню default=saved, и для операционной системы используется команда savedefault, то загрузка этой операционной системы приведет к тому, что она станет выбором по умолчанию до тех пор, пока не будет загружена операционная система, также имеющая команду savedefault. В нашем примере указание default=2 приводит к игнорированию всех сохраненных умолчаний (saved default).
boot
не обязательный параметр, который указывает GRUB загружать выбранную операционную систему. Это действие по умолчанию, после того, как выполнены все команды для выделенного.
lock
в приведенном примере используется для второй системы Ubuntu. Эта система будет загружена в режиме уединенного пользователя, что позволяет пользователю производить изменения в системе, которые обычно требуют прав суперпользователя (root). Если указана эта опция, то вы должны также указать password в начальных опциях, иначе пользователь сможет изменить вашу опцию lock и загрузить систему или добавить “single” к другой из имеющихся записей. При желании можно также указать различные пароли для каждой записи.
rootnoverify
похожа на root, за исключением того, что GRUB не пытается смонтировать файловую систему или проверить ее параметры. Обычно она используется для таких файловых систем, как NTFS, которые не поддерживаются GRUB. Вы также можете использовать ее если хотите загрузить главную загрузочную запись (MBR) жесткого диска, например для доступа к другому конфигурационному файлу или для перезагрузки предыдущего загрузчика.
chainloader
указывает, что в качестве файла первой стадии (stage 1 file) будет загружен другой файл. Значение “+1″ эквивалентно 0+1, что означает загрузку одного сектора, начиная с сектора 0, то есть загрузку первого сектора устройства, указанного в root или rootnoverify.

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

Теперь, когда у нас есть файл конфигурации GRUB нам необходимо создать загрузочную дискету, чтобы протестировать его. Наипростейший способ сделать это — использовать команду grub-install как показано в Листинге 8. Если вы устанавливаете GRUB на дискету или в раздел, то вы должны сначала размонтировать это устройство. Но это не требуется, если вы устанавливаете GRUB в MBR жесткого диска, поскольку вы монтируете только разделы (/dev/hda1, /dev/hda2 и т. д.), а не весь жесткий диск (/dev/hda).

Листинг 8. Установка GRUB на дискету.

[root@lyrebird root]# umount /dev/fd0
umount: /dev/fd0: not mounted
[root@lyrebird root]# 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/hda
(hd1) /dev/hdc
(hd2) /dev/sda

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

grub-install '(fd0)'

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

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

Сразу же после тестирования вашей дискеты, вы готовы к установке GRUB в MBR вашего жесткого диска. Для первого жесткого диска IDE вам следует использовать:

grub-install /dev/hda
или
grub-install '(hd0)'

Чтобы установить его в загрузочную запись раздела 11, используйте:

grub-install /dev/hda11
или
grub-install '(hd0,10)'

Запомните, что GRUB нумерует с 0.

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

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

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

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

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

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

Установка других систем может повредить ваш MBR.

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

Если так случилось, что у вас нет загрузочной дискеты, но есть хоть какой-то дистрибутив Linux, то обычно вы можете загрузиться с установочного диска в режиме восстановления (recovery mode). Если вы сделает это, то корневая файловая система вашего диска будет или смонтирована в некоторую точку восстановления (recovery point), или диск не будет смонтирован вообще. Вы можете использовать команду chroot чтобы сделать эту добавочную точку вашим корневым каталогом (/). Затем запустите lilo или grub-install чтобы создать новую загрузочную дискету или переписать MBR. Я обычно предпочитаю сначала создать загрузочную дискету и загрузиться с неё, чтобы перед перезаписью MBR убедиться что с моими настройками загрузчика всё в порядке, но вы можете быть более смелыми чем я. Листинг 9 показывает пример использования рабочего окружения, которое мы создали в наших предыдущих примерах конфигурирования. В этом примере, я загрузился с загрузочного диска Red Hat Enterprise Linux, который смонтировал /dev/hda11 в /mnt/sysimage. Большинство дистрибутивов в режиме восстановления выдают вам большой экран с приглашением командной строки, а не графическое окно, с которым вы привыкли работать. Можете считать, что это окно терминала, которое вы открыли от имени суперпользователя. Другими словами будьте очень осторожны записывая что-либо на жесткий диск. В Листинге 9 вводимое пользователем выделено жирным шрифтом.

Листинг 9. Использование диска для восстановления и chroot.

sh-3.00# chroot /mnt/sysimage
sh-2.05b# lilo
Added linux *
Added WIN-XP
sh-2.05b# grub-install '(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/hda
(hd1) /dev/hdc
(hd2) /dev/sda
sh-2.05b#

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

Хотя это выходит за границы данного учебника, но вам может быть будет полезно узнать, что можно иметь MBR, загружающий систему Windows 2000 или Windows XP, и установить Lilo или GRUB в загрузочную запись раздела. Программа загрузки ntldr также может загружать другие цепочки загрузочных секторов, хотя ее настройка — дело не простое. Вам понадобится скопировать загрузочный сектор на Windows-раздел и изменить скрытый файл boot.ini чтобы это сработало.

Вы переместили раздел.

Если вы переместили раздел и забыли про настройки загрузки, то могут возникнуть некоторые проблемы. Обычно LILO или GRUB отказываются загружаться. LILO возможно выводит ‘L’, что говорит о том, что первая стадия загрузки прошла, и на этом загрузка остановилась. GRUB выводит сообщение об ошибке. А произошло следующее: загрузчик первой стадии, у которого есть список секторов которые нужно загрузить, чтобы перейти к стадии 2, пытается загрузить сектора, расположенные по этим адресам, но они уже не содержат загрузочные сигнатуры второй стадии. Если вы создали загрузочную дискету используя описанные выше методы, то помните: все что и lilo и grub-install размещают на дискете — это только загрузочный сектор, так что ваша загрузочная дискета скорее всего не поможет. Как и в предыдущем примере, вы можете попытаться загрузить различные окружения для восстановления и переделать загрузочную дискету с LILO или GRUB. Затем перезагрузиться, проверить вашу систему и вновь установить загрузчик в MBR.

Вы могли заметить, что наши примеры конфигурирования использовали метки разделов. Например,

append="hdd=ide-scsi root=LABEL=RHEL3"
или
kernel /boot/vmlinuz-2.4.20-31.9 ro root=LABEL=RH9 hdd=ide-scsi

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

Использование раздела /boot.

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

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

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

Создание самодостаточной загрузочной дискеты.

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

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

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

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

Листинг 10. Создание загрузочной дискеты GRUB.

[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

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

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

Листинг 11. Командная строка GRUB.

GRUB version 0.93 (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 configfi
le debug device displayapm displaymem dump embed find fstest geometry halt help
hide impsprobe initrd install ioprobe kernel lock makeactive map md5crypt modu
le modulenounzip pager partnew parttype password pause quit read reboot root ro
otnoverify savedefault serial setkey setup terminal terminfo testload testvbe u
nhide 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,2)
(hd0,6)
(hd0,7)
(hd0,10)
(hd1,7)
grub>

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

configfile (hd0,2)/boot/grub/grub.conf

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

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

  • используйте команду mkdosfs для создания на дискете файловой системы DOS FAT и опцию -R для резервирования достаточного количества секторов для файла второй стадии.
  • Смонтируйте дискету
  • Создайте на дискете каталог /boot/grub
  • С

  • копируйте файлы GRUB stage1, stage2 и grub.conf в каталог boot/grub на дискете.
  • Скопируйте также, если хотите, файл с фоновым изображением (заставкой).
  • Отредактируйте файл grub.conf на дискете так, чтобы он ссылался на файл с изображением на дискете.
  • Размонтируйте дискету
  • Используйте командную оболочку grub для установки GRUB на дискету, используя команды GRUB root и setup.

Мы проиллюстрировали это в Листинге 12.
Листинг 12. Установка GRUB на дискету с файловой системой.

[root@lyrebird root]# mkdosfs -R 210 /dev/fd0
mkdosfs 2.8 (28 Feb 2001)
[root@lyrebird root]# mount /dev/fd0 /mnt/floppy
[root@lyrebird root]# mkdir /mnt/floppy/boot
[root@lyrebird root]# mkdir /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/stage1 /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/stage2 /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/splash* /mnt/floppy/boot/grub
[root@lyrebird root]# cp /boot/grub/grub.conf /mnt/floppy/boot/grub
[root@lyrebird root]# umount /dev/fd0
[root@lyrebird root]# grub
Probing devices to guess BIOS drives. This may take a long time.
GRUB version 0.93 (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.

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

Взято с ibm developerworks

Похожие посты
  • LPI 101: Установка Linux и управление пакетами. Управление библиотеками совместного доступа
  • Описание более 350 команд Linux c примерами.
  • Mac4Lin: как Linux превратить в Mac
  • Простая установка и настройка BIND 9 (ДНС сервер)
  • Как установить программу на комп если установка программ запрещена администратором
  • Ubuntu 7.10
  • Управление дисками: parted
  • Разрешаем внешние подключения для postfix
  • LPI 101: Установка Linux и управление пакетами. Управление пакетами в Debian
  • Использование CommuniGate Pro как почтового сервера периметра для MS Exchange
  • One Comment

    1. Господи как я замучился с этим люнексом! Идиотский убунту каторый нифига не может и всякие миниОС у каторых авто запуск не работает. Твою ж МаТь! А что бы его поставить нужно эту статью!? Вы смеётесь!?? Я уже неделю пытаюсь перейти на люнекс и кроме разочарования я не вижу. Какждый раз то ошибки, то тормозит – нет ПО, то ещё всякая бойда недающая мне перейти.!!! Ну и не надо, я на Windows обратно. каким бы виндовс небыл, мы все на нём выросли, он как родной.

      1. Nikolai on May 7th, 2013 at 7:37 pm

    Комментарии

    Your email is never published nor shared. Required fields are marked *

    *
    *