Linux. Полное руководство.
9.1.1. Начальная загрузка: LILO и GRUB.
Общие механизмы.
Как известно, первая программа, которая выполняется после включения компьютера, — это BIOS. Она находит загрузочное устройство, считывает в память его первый (нулевой) сектор и передает на него управление. В этом секторе находится MBR (Master Boot Record) — главная загрузочная запись размером в 512 байт, в которой помещаются:
♦ первичный загрузчик;
♦ таблица разделов диска (Partition Table) размером в 64 байта, описывающая четыре первичных раздела: номера их первого и последнего цилиндров, тип файловой системы и признак активности раздела;
♦ «волшебное число» (0xAA55), предназначенное для проверки, служит ли данный сектор загрузочным.
Формат MBR стандартен для всех операционных систем, а содержание области, отведенной под первичный загрузчик, может различаться. Этот загрузчик очень мал, поэтому перед ним стоит всего одна задача: найти на диске и считать в память код загрузчика следующего этапа, разворачивающего уже саму операционную систему, и передать ему управление.
В ОС Windows 9x первичный загрузчик передает управление на Boot Record — первый сектор того первичного раздела, который отмечен как активный (bootable — такой может быть только один). В более сложных системах из MBR запускается диспетчер загрузки (NTLoader для Windows NT, LILO и GRUB — для Linux), позволяющий выбрать вариант загрузки и даже загружаемую ОС. Такую гибкость диспетчеру обеспечивает возможность не ограничиваться тем объемом данных, который помещается в MBR, а читать необходимые данные из файлов на диске. Достигается эта гибкость ценой зависимости от файловой системы: существуют файловые системы (например, XFS и ReiserFS с включенным режимом оптимизации дискового пространства), с которыми ОС Linux может работать, но загружаться с них не может. Отдельный раздел /boot, о котором говорилось в п.1.2.2 в связи с «барьером 1024 цилиндра», необходим еще и поэтому: на нем должна быть создана файловая система ext2fs или ext3fs, а для всех остальных разделов файловые системы можно выбирать произвольно.
Загрузчик LILO.
Стандартный загрузчик Linux — LILO (LInux LOader) — состоит из двух частей: первичного загрузчика LI и вторичного LO. LI располагается в MBR и только и умеет, что загружать LO, а тот уже передает управление ядру или вызывает другой первичный загрузчик (например, Windows 9x). LO находится в файле на диске (по умолчанию /boot/boot.b). О файловых системах LI не знает, поэтому карта размещения этого файла хранится в нем в виде «цилиндр/головка/сектор». Помещает ее туда утилита /sbin/lilo, которую нужно запускать после любого изменения LO или его конфигурационного файла /etc/lilo.conf.
У вторичного загрузчика LO есть собственная карта размещения файлов (по умолчанию /boot/map). По ней он ищет загружаемое ядро и образ виртуального диска, поэтому после любого изменения ядра или загружаемых модулей тоже обязательно запускать утилиту lilo.
Что такое виртуальный диск? Представьте себе загрузку Linux со SCSI-диска или другого устройства, драйвер которого не вкомпилирован в ядро, а подгружается в виде модуля. LILO сможет найти и прочитать с него файл образа ядра. Теперь ядру предстоит смонтировать корневую файловую систему. Чтобы сделать это, нужно подключить драйвер SCSI, а чтобы найти драйвер в /lib/modules, нужно смонтировать корневую файловую систему.
Похожая проблема возникает при первоначальной установке ОС Linux: для работы инсталлятора нужна файловая система со стандартными утилитами, а на диске ее еще нет. Обе проблемы решаются в Linux с помощью технологии initrd (INITial Ram Disk): вместе с ядром LILO загружает в память образ стартового диска, и ядро монтирует его как обычную файловую систему. В этой файловой системе находятся модули, необходимые для работы с нестандартными внешними устройствами и сетью, и утилиты для их подгрузки. Подключив модули, ядро отсоединяет виртуальный диск и монтирует настоящую корневую файловую систему.
Файл образа виртуального диска обычно называется /boot/initrd-<версия_ядра>. Если нестандартных устройств у вас нет или их драйверы встроены в ядро, то этот файл для загрузки не нужен.
Поведение LILO зависит от настроек в его конфигурационном файле /etc/lilo.conf. Ниже приведен пример такого файла. Символ #, как обычно, служит для комментариев.
Листинг 9.1. Примерный файл /etc/lilo.conf.
# LILO version: 21.5.
# Общий раздел.
#
# использовать MBR первого жесткого диска первого.
# контроллера IDE.
Boot=/dev/hda.
#
# Карта LO.
Map=/boot/map.
#
# Файл вторичного загрузчика.
Install=/boot/boot.b.
#
# Режим для загрузочных дискет. У меня закомментирован.
# compact.
#
# Режим VGA: normal - 80x25, ext - 80x50.
Vga=normal.
#
# Раскладка клавиатуры.
Keytable=/boot/ru4.kit.
# Диск поддерживает режим LBA (Large Block Access) —
# трансляцию.
# физических адресов в логические так,
# чтобы число цилиндров не превышало.
# понятных BIOS 1024. Другое значение этого.
# параметра - linear. Не меняйте значения, выставленного.
# инсталлятором, если вы не знаете точно, что делаете.
Lba32.
#
# Сообщение, которое выдается при загрузке.
Message=/boot/message.
#
# Задержка 5 секунд (в других версиях LILO этот параметр.
# называется delay).
Timeout=50.
#
# Вывести message и приглашение.
# к выбору загружаемого ядра на.
# timeout/10 секунд, после которых загружается ядро,
# выбранное по умолчанию.
# Если prompt не установлен, добиться приглашения.
# можно, удерживая <Shift> во время загрузки.
Prompt.
#
#Цветовая схема.
Menu-scheme=wb:bw:wb:bw.
#
# Ядро, загружаемое по умолчанию. Если не указано, то.
# загружается первое в списке.
Default=Fedora.
#
# Список вариантов загрузки, не более 16.
# В каждой секции варианта должна быть строка.
# label. Это имя, которое вводится в ответ на приглашение.
# LILO или является командой меню и служит для выбора.
# загружаемого ядра или ОС.
#
Image=/boot/vmlinuz-2.4.20 # ядро.
label=linux-initrd # метка.
initrd=/boot/initrd-2.4.20.img.
root=/dev/hda6 # монтировать этот раздел как корневой.
read-only # режим монтирования / на время загрузки.
#
Image=/boot/vmlinuz-2.6.9-1.667.
label=Fedora.
root=/dev/hda2.
read-only.
#
Image=/boot/vmlinuz.
label=failsafe.
root=/dev/hda6.
append=" mem=64M failsafe" # параметры, передаваемые ядру.
read-only.
#
Other=/dev/hda1 # ОС - не Linux.
label=WindowsXP # root не указывается.
table=/dev/hda # где находится таблица разделов.
Если вы определили секцию other=/dev/hda1, то в корневом каталоге раздела /dev/hda1 (диска С:) должен находиться вторичный загрузчик. У меня, например, на одном из компьютеров с много вариантной загрузкой там находится NTLoader (поскольку WindowsXP была установлена до Linux), и LILO успешно загружает WindowsXP.
Команда append позволяет передать ядру необходимые параметры. Ее формат:
Append=" параметр1[=значение1][, значение2...] [параметр2[=значение3][,значение4...]...]".
Значения разделяются запятой без пробелов, параметры разделяются пробелами. Например, у вас есть устройство CD-RW, которое вы до сих пор использовали как обыкновенный CD-ROM, подключив его как Secondary Slave, то есть /dev/hdd. Чтобы записывать компакт-диски под Linux, CD-RW должен быть устройством SCSI, значит, это устройство нужно эмулировать. Команда выглядит так:
Append=" hdd=ide-scsi ".
Не забудьте после каждого изменения конфигурационного файла запустить утилиту lilo. Некоторые ее полезные ключи:
♦ -V — показать версию LILO;
♦ -q — показать текущую карту загрузки;
♦ -t — проверить lilo.conf на ошибки;
♦ -u — удалить LILO. После удаления вы сможете загрузить Linux только с внешнего носителя (дискеты).
Если вы решили пока не удалять LILO, то при очередной загрузке системы вас встретит приглашение LILO. Нажмите <Ввод>, чтобы загрузить вариант по умолчанию. Нажмите <Tab> для просмотра вариантов. Иногда на экран выдается только подсказка:
LILO.
Чтобы выбрать ядро, нужно нажать клавишу «Shift», после чего появится подсказка:
LILO boot:
И только теперь можно нажать <Tab>. Если вы введете команду help, то получите список всех команд LILO.
Чтобы загрузиться в однопользовательском режиме (например, для восстановления системы после аварии), введите в строке приглашения:
<метка_варианта> single.
Если вы переустановили Windows, а она заменила вам содержимое MBR, то восстановить его можно, загрузившись с дискеты или компакт-диска и введя команду lilo. Таким же образом можно установить LILO, если при инсталляции системы вы выбрали другой диспетчер загрузки.
Любопытно, что четыре буквы приглашения LILO — это отметки об успешном окончании четырех шагов загрузки. Если вы видите меньше четырех букв, то это значит:
♦ L<xx>: первичный загрузчик запустился, но не смог загрузить вторичный. Двузначное число xx — это код ошибки. Обычно причина ошибки — аппаратный сбой.
♦ LI: LI смог загрузить вторичный загрузчик, но не смог передать ему управление. Причина: перемещение /boot/boot.b без запуска утилиты lilo. Чаще всего это значит, что вы удалили или добавили раздел.
♦ LIL: LO запустился, но не смог прочитать карту размещения файлов. Аппаратный сбой.
♦ LIL?: LO загрузился по неправильному адресу. Причина — перемещение /boot/boot.b без запуска утилиты lilo.
♦ LIL-: испорчена карта размещения файлов. Причина — перемещение /boot/map без запуска утилиты lilo.
♦ Еще одной причиной любой из этих ошибок может быть неправильное указание геометрии диска (несовпадение ее с фактической).
Загрузчик GRUB.
Другой известный диспетчер загрузки — это набирающий все большую популярность GNU GRUB (GRand Unified Bootloader). В дистрибутивах Mandrake и Fedora Core этот загрузчик используется по умолчанию, хотя я рекомендую вам сменить его на проверенный временем LILO.
GRUB использует несколько отличную от LILO схему загрузки. Вторичный загрузчик хранится не в каком-то файле, а в не используемом системой пространстве. Обычно это вся первая дорожка диска. Если места для полноценного вторичного загрузчика там недостаточно, туда помещается маленький загрузчик промежуточного этапа, «полуторный», состоящий из драйвера файловой системы и инструкций для вызова настоящего, большого, вторичного загрузчика. Благодаря такой организации GRUB поддерживает большинство файловых систем (FAT и FAT32, ext2fs и ext3fs, ReiserFS, XFS, BSD FFS), понимает большинство форматов исполняемых файлов и — не главное, но самое заметное для начинающего системного администратора, — изменения в конфигурационном файле вступают в силу сразу же, без прописывания их в специальном месте специальной утилитой.
Конфигурационный файл GRUB называется /boot/grub/grub.conf. В мгновенно устаревающих руководствах вы можете встретить другое название — /boot/grub/menu.1st — но это не страшно: этот файл является символической ссылкой на первый. Пример такого файла приведен ниже.
Листинг 9.2. Примерный файл /boot/grub/grub.conf.
#boot=/dev/hda.
Default=0.
Fallback=1.
Timeout=5.
Splashimage=(hd0,1)/grub/splash.xpm.gz.
Hiddenmenu.
Title Fedora Core (2.6.9-1.667).
root (hd0,1).
kernel /vmlinuz-2.6.9-1.667 ro root=/dev/hda2.
initrd /initrd-2.6.9-1.667.img.
Title WindowsXP.
rootnoverify (hd0,0).
chainloader +1.
Закомментированная команда boot указывает загрузочный диск. Команда default говорит, какая метка (title) будет загружена по умолчанию, а fallback — какая система будет загружена в случае неудачи. Команда timeout указывает время (в секундах) ожидания ввода команды или выбора другой операционной системы.
Команда splashimage указывает, какой рисунок будет использован в качестве фона. Если у вас что-то не ладится с видеорежимом, закомментируйте это строку.
Труднее всего смириться с тем, как GRUB именует жесткие диски и их разделы. Диски отсчитываются не с буквы «а», а с нуля, а разделы — не с единицы, а тоже с нуля. Таким образом, раздел, который Linux именует /dev/hda1, a Windows — С:, GRUB называет (hd0,0). Круглые скобки обязательны.
Команда rootnoverify нужна для не-Linux систем, a chainloader +1 —для ОС, понимающих только «цепочечную» загрузку (MBR → загрузочная запись активного раздела). Если вы зачем-то разместили Windows на неактивном разделе, откуда она сама загрузиться не сможет, то команде chainloader должна предшествовать команда makeactive.
GRUB имеет графический интерфейс, но попасть в его командную строку все-таки можно: увидев меню вторичного загрузчика, выберите курсором нужную позицию и нажмите <с> (нажав <Ввод>, вы загрузите выбранную систему, нажав <а>, вы сможете передать ядру дополнительные параметры, а нажав <е> — отредактировать последовательность команд, выполняемых при загрузке выбранной системы).
Итак, вы в командной строке. Редактировать вводимые команды можно в стиле bash: поддерживается автодополнение команд и путей к файлам, пролистывание истории команд стрелками «вверх» и «вниз». Список всех доступных команд можно получить по команде help, а получить краткую справку о команде — введя help <имя_команды>.
Установить диспетчер загрузки GRUB (если вы не сделали этого при инсталляции системы) можно командой /sbin/grub-install /dev/hda. Утилита grub-install, как и все остальные компоненты GRUB, содержится в пакете grub, который можно скачать по адресу http://www.sisyphus.ru/srpm/grub.
Как установить графический фон загрузчика GRUB.
Много интересных картинок, пригодных для установки в качестве фона загрузчика GRUB, можно найти по адресу http://ruslug.rutgers.edu/~mcgrof/grub-images/images/working-splashimages. Чтобы не загружать все эти картинки, можно просмотреть их уменьшенные изображения по адресу http://ruslug.rutgers.edu/~mcgrof/grub-images/images, а потом уже загрузить понравившуюся картинку.
Выбранную картинку поместите в каталог /boot/grub и укажите ее в директиве splashimage конфигурационного файла:
Splashimage=(hd0,0)/boot/grub/image.xpm.gz.
Собственную картинку можно использовать как фон для загрузчика, если преобразовать ее в формат, поддерживаемый GRUB. Преобразование выполняется утилитой convert, после чего картинку нужно сжать компрессором gzip:
# convert myimage.png -colors 14 -resize 640x480 myimage.xpm.
# gzip myimage.xpm.
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.
- 178.
- 179.
- 180.
- 181.
- 182.
- 183.
- 184.
- 185.
- 186.
- 187.
- 188.
- 189.
- 190.
- 191.
- 192.
- 193.
- 194.
- 195.
- 196.
- 197.
- 198.
- 199.
- 200.
- 201.
- 202.
- 203.
- 204.
- 205.
- 206.
- 207.
- 208.
- 209.
- 210.
- 211.
- 212.
- 213.
- 214.
- 215.
- 216.
- 217.
- 218.
- 219.
- 220.
- 221.
- 222.
- 223.
- 224.
- 225.
- 226.
- 227.
- 228.
- 229.
- 230.
- 231.
- 232.
- 233.
- 234.
- 235.
- 236.
- 237.
- 238.
- 239.
- 240.
- 241.
- 242.
- 243.
- 244.
- 245.
- 246.
- 247.
- 248.
- 249.
- 250.
- 251.
- 252.
- 253.
- 254.
- 255.
- 256.
- 257.
- 258.
- 259.
- 260.
- 261.
- 262.
- 263.
- 264.
- 265.
- 266.
- 267.
- 268.
- 269.
- 270.
- 271.
- 272.
- 273.
- 274.
- 275.
- 276.
- 277.
- 278.
- 279.
- 280.
- 281.
- 282.
- 283.
- 284.
- 285.
- 286.
- 287.
- 288.
- 289.
- 290.
- 291.
- 292.
- 293.
- 294.
- 295.
- 296.
- 297.
- 298.
- 299.
- 300.
- 301.
- 302.
- 303.
- 304.
- 305.
- 306.
- 307.
- 308.
- 309.
- 310.
- 311.
- 312.
- 313.
- 314.
- 315.
- 316.
- 317.
- 318.
- 319.
- 320.
- 321.
- 322.
- 323.
- 324.
- 325.
- 326.
- 327.
- 328.
- 329.
- 330.
- 331.
- 332.
- 333.
- 334.
- 335.
- 336.
- 337.
- 338.
- 339.
- 340.
- 341.
- 342.
- 343.
- 344.
- 345.
- 346.
- 347.
- 348.
- 349.
- 350.
- 351.
- 352.
- 353.
- 354.
- 355.
- 356.
- 357.
- 358.
- 359.
- 360.
- 361.
- 362.
- 363.
- 364.
- 365.
- 366.
- 367.
- 368.
- 369.
- 370.
- 371.
- 372.
- 373.
- 374.
- 375.
- 376.
- 377.
- 378.
- 379.
- 380.
- 381.
- 382.
- 383.
- 384.
- 385.
- 386.
- 387.
- 388.
- 389.
- 390.
- 391.
- 392.
- 393.
- 394.
- 395.
- 396.
- 397.
- 398.
- 399.
- 400.
- 401.
- 402.
- 403.
- 404.
- 405.
- 406.
- 407.
- 408.
- 409.
- 410.
- 411.
- 412.
- 413.
- 414.
- 415.
- 416.
- 417.
- 418.
- 419.
- 420.
- 421.
- 422.
- 423.
- 424.
- 425.
- 426.
- 427.
- 428.
- 429.
- 430.
- 431.
- 432.
- 433.
- 434.
- 435.
- 436.
- 437.
- 438.
- 439.
- 440.
- 441.
- 442.
- 443.
- 444.
- 445.
- 446.
- 447.
- 448.
- 449.
- 450.
- 451.
- 452.
- 453.
- 454.
- 455.
- 456.
- 457.
- 458.
- 459.
- 460.
- 461.
- 462.
- 463.
- 464.
- 465.
- 466.
- 467.
- 468.
- 469.
- 470.
- 471.