Перед тем, как углубиться в 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 это будет файл 300x200 пикселов в формате PCX. Для систем SUSE это может быть 16 цветный bitmap-файл размером 640x480 пикселов. В этом случае вы также можете обнаружить несколько дополнительных параметров. Посмотрите документацию, идущую с вашей системой. Например, моя система 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/sysimagesh-2.05b# liloAdded linux *Added WIN-XPsh-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/sdash-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 и довольно больших жестких дисков пространство разбивается на несколько секций с копией суперблока в начале каждой секции. Это может помочь при восстано
Источник: http://www.ibm.com/developerworks/ru/edu/l-lpic1102/section3.html |