Имя загрузочного файла linux

Linuxoid

OpenSource forever

Загрузчики в Linux

Нашел старую статью, так как много вопросов думаю лишней не будет.

Сначала давайте поговорим о процессе загрузки ОС и в частности месте загрузчика при этом и немного развеем заблуждения, как правило возникающие на этот счет. Действительно пользуясь одной операционной системой как-то не задумываешься о том как это после включения питания она загружается. Знания большинства пользователей на этом этапе ограничиваются словом BIOS. А дальше, что? Ну прошел тест POST затем загрузилась BIOS в которой указано с какого диска необходимо загружаться и что сразу win.com загружается. А вот и нет. Точнее не все сразу так происходит.

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

Эта запись кстати стандартна для всех операционных системах и даже Microsoft не рискует отходить от него.

Последние два байта сектора занимает так называемый Magic Number предназначенный для проверки является ли данный сектор загрузочным. Ну а первые 446 байт занимает так интересующая нас программа-загрузчик. Каждый первичный раздел отформатированый под файловую систему FAT содержит также запись в начале размером один сектор (512 байт) называемую уже Boot Record (кстати расширенные (extended) разделы содержат также свою запись. Так вот во всех ОС семейства Windows 9x (и ДОС) программа-загрузчик расположенная в MBR просто передает управление по цепочке первичному разделу помеченному как активный, который свою очередь загружает необходимую программу для запуска системы. Но большинству систем отведенных 512 байт маловато будет для расположения всех инструкций необходимых для нормальной загрузки. Поэтому в загрузочный сектор помещаются некоторые инструкции необходимые для запуска первичного загрузчика ОС. Такой загрузчик может быть еще полезен для выбора различных параметров загрузки ядру (однопользовательский режим, аварийный и т.д.) и еще один вариант использования загрузчика — возможность установки нескольких операционных систем на компьютере пользователя и естественно выбора необходимой в процессе загрузки компьютера. Вот мы и подошли собственно к загрузчикам или менеджерам загрузки как иногда называют подобные программы.

По изложенным выше причинам для загрузки Linux и применяются загрузчики. Самыми популярными, на мой взгляд, являются LILO и Grub (о них и пойдет речь далее), хотя существуют и другие например ASPLoader является штатным в ASPLinux (два года не ставил могу и ошибаться) или Loadlin — небольшой загрузчик позволяющий загрузить Linux из под ДОС, использовать его удобно только в критической ситуации когда нет больше способов загрузить Linux. Ну и плюс syslinux\isolinux.

LILO (LInux LOader)

И так начнем по старшинству. Менеджер загрузки LILO (LInux LOader) поддерживает большинство файловых систем которые могут встретиться на компьютере пользователя.

Хорошим тоном является создание отдельного раздела /boot с файловой системой ext2 с которого и загрузится Linux.

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

prompt # включает ввод приглашения при загрузке без ожидания каких-либо нажатий клавиш

timeout=50 # время ожидания 5 сек.

default=linux # метка ОС загружаемой по умолчанию, если ее нет то будет загружаться ядро записанное первым

boot=/dev/hda # сектор жесткого диска куда установлен LILO в данном случае это MBR первого IDE диска

map=/boot/map # местоположение map-файла с описаниями ядер

install=/boot/boot.b # файл для использования в качестве нового загрузочногосектора

backup=/boot/boot.NNNN # файл куда копируется оригинальный загрузочного сектора

message=/boot/message # задает файл, содержащие сообщение которое отображается перед приглашением загрузки, максимальный объем 65536, символ FF очищает экран

vga = normal # задает текстовый режим VGA, который будет установлен во время загрузки, в данном случае нормальный режим 80×25

verbose=5 # максимальный уровень диагностики

linear # генерация адреса линейного сектора вместо адреса сектор/головка/цилиндр

image=/boot/vmlinuz-2.6.18-3 # файл или устройство, содержащее образ ядра Linux

label=linux # имя которое использует загрузчик для идентификации образа ядра (метки должны быть разные и дополнительно возможно использование псевдонима для образа alias=Not_Windows, например)

read-only # говорит, что корневая файловая системы должна быть смонтирована только для чтения

root=/dev/hda5 # задает устройство которое будет монтировано как корневая файловая система. Если данная опция опущена, то будет использоваться значение в образе ядра

other=/dev/hda2 # другая система для загрузки

optional # пропускает образ ядра если он не доступен в момент создания карты диска

Читайте также:  Windows 10 build 107

Это наиболее часто используемые опции и как вы должны понимать далеко не все. При загрузке возможно передать при необходимости ряд аргументов ядру. Таких как реальное значение оперативной памяти ( append=» mem=64M») если система не обнаруживает всю, что очень часто бывает со старыми дистрибутивами или прописать новое устройство когда оно автоматически не обнаруживается, что часто происходит с ISA девайсами или в других случаях (например, append=» hdc=ide-scsi» для эмуляции SCSI устройства необходимой для работы CD-RW). Самая наверное распространенная ошибка которую очень часто допускают при конфигурировании файла /etc/lilo.conf — использование параметра default который не указывает ни на одну из меток образов. Это может происходить например в такой ситуации. Захотелось вам например изменить метку linux (см. пример файла), на какую то более информативную, например label=Mandriva. И все. Теперь при загрузке системы вы получите что-то вроде этого — Fatal: No images have been defined or default image doesn’t exist. Хотя вроде бы ничего плохого и не сделали. И еще после того как вы отредактировали файл конфигурации, изменения еще не вступили в силу. Для этого необходимо перезаписать lilo командой /sbin/lilo -v 5 (v 5 параметр необязательный, он применяется для наибольшей информативности того что собственно говоря будет происходить на жестком диске). И еще такая команда пригодится после очередной переустановки Windows которая всегда перезаписывает MBR (естественно если LILO записан туда) не сильно волнуясь о том, что там может быть что-то полезное. Кстати создатели KDE здесь немного подсобили юзеру.

Теперь когда все операции произведены при очередной загрузке системы вас будет встречать приглашение (LILO:). При нажатии Enter загрузится система прописанная по-умолчанию, для просмотра доступных вариантов нажмите Tab. Часто для решения проблем есть необходимость загрузится в однопользовательском режиме (уровень запуска системы 1), для этого наберите после приглашения lilo single. Но вот незадача, пользователь воспользовавшийся данной командой автоматически получает права root, что на безопасности системы в целом положительно, как вы понимаете, не сказывается. Для того чтобы воспрепятствовать этому необходимо защитить LILO паролем (password=пароль), а для того чтобы самому не набирать его каждый раз при загрузке системы добавьте параметр restricted и теперь пароль будет необходим только при задании параметров загрузки в командной строке т.е. как раз в нашем случае. Интересно, что при приглашение т.е. буквы LILO выводятся после прохождения какого-либо этапа загрузки и поэтому если загрузится не получилось то вместо строки приглашения вы увидите только от одной до трех букв. Поэтому если возникнет какая-либо проблемма, то по числу букв, которые напечатаются на дисплее можно определить причину этой проблемы. Мне наиболее часто приходилось наблюдать две и один раз даже три буквы.

LI -если на экране напечаталось только две буквы — то причина в несовпадении описанной геометрии диска с имеющейся или в что файл /etc/lilo/boot.b был перемещен без перезапуска программы переконфигурации геометрии диска. А скорее всего из-за того, что вы удалили раздел с Linux и не восстановили MBR перед этим или с помощью Partition Magic создали еще один раздел перед корневым и теперь система не может его найти.

LIL — в этом случае проблема скорее всего состоит в аппаратной ошибке или в несовпадении описанной и фактической геометрии диска.

По LILO пожалуй все, остальное можно найти в документации, скажу только чтобы его удалить воспользуйтесь командой /sbin/lilo — u, если хотите воспользоваться другим конфигурационным файлом не перезаписывая старый, то укажите его название (и путь) воспользовавшись опцией -C.

GRUB (GRand Unified Bootloader)

Следующий интересующий нас загрузчик GRUB (GRand Unified Bootloader) более современная разработка. Давайте по порядку. В 1995 году при разработке ядра Hurd, стал вопрос как его собственно говоря загружать то. Но здесь надо отдать должное они (разработчики) поступили не стандартно. Вместо того чтобы загружать ядро Hurd как то по своему, была предложена Multiboot Specification — спецификацию позволяющую загружать систему универсальным (единым) образом. Для систем чьи производители не желали создавать продукт совместимый с данной спецификацией (попробуйте угадать) была сохранена схема их загрузке последовательно «по цепочке». А в 1999 GRUB официально примкнул к проекту GNU, со всеми вытекающими отсюда последствиями (добавились сторонники желающие помочь, что положительно повлияло на функциональности всего пакета). И с где-то 2000 года производители начали включать GRUB в свои дистрибутивы, сначала осторожно, предлагая просто в качестве альтернативы, а затем уже как основного загрузчика по-умолчанию. А в настоящее время в Интерненте уже слышны даже разговоры о GRUB’e как о стандарте. Что же такого особенного в GRUB:

  • Загрузка ядер систем совместимых с Multiboot Specification (FreeBSD, NetBSD, OpenBSD и GNU/Linux), поддержка загрузки по цепочке (Windows 9x/NT/2000/XP)
  • Поддержка большинства файловых систем (DOS FAT и FAT32, Linux ext2fs и ext3fs, Minix fs, BSD ffs, ReiserFS, VSTa fs и XFS)
  • Поддержка большинства форматов исполнимых файлов
  • Поддержка загружаемых модулей
  • Поддержка автоматической распаковки архивов
  • Независимость от геометрии диска т.е. при переходе к другому диску не требуется внесения изменений в конфигурации.
  • Автоматическое определение поддержки LBA (Logical Block Address) режима
  • Определение всей доступной оперативной памяти
  • Поддержка бездисковых станций и удаленных терминалов

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

Читайте также:  Windows server 2019 ltsc что это

title Red Hat Linux (2.4.18-3)

kernel /boot/vmlinuz-2.6.18-3 ro root=/dev/hda5

Параметр default указывает какая система (точнее метка обозначенная title) загружается по умолчанию, если загрузка по-умолчанию не получилась по каким либо причинам загрузится система обозначенная как fallback. Закомментированный параметр boot указывает куда будет установлен загрузчик, место для установки удобно задавать в командной строке поэтому можно не трогать данный параметр. Timeout указывает время ожидания ввода команды или выбора другой операционной системы. Параметр splashimage указывает какой рисунок будет использован в качестве фона, это должен быть зазипированый xpm рисунок с разрешением 640×480 и с 14 цветовой палитрой. Также обратите внимание на то как обозначаются разделы дисков. Имя устройства должно быть заключено в круглые скобки, первая цифра обозначает номер диска в системе, а вторая раздел на диске (начиная с нуля). В примере для файла изображения — это первый жесткий диск (он у меня единственный (нулевой)) и пятый раздел на нем (считая со стороны MBR) — hda5 по Linux’овски. Параметр rootnoverify указывает на корневой раздел системы, но который не требует монтирования (для ОС Windows для этого просто нет необходимости). А «chainloader +1» необходим для систем не поддерживающих Multiboot Specification для «цепочечной» их загрузки. Иногда данному параметру может предшествовать директива makeactive, для того чтобы сделать данный раздел «активным», например если вас угораздило установить Windows туда куда его создатели не могли и подумать, что кто-то осмелится это сделать, например в расширенный раздел жесткого диска или у вас, несколько Windows’ов. Для этой же цели также могут понадобиться команды hide и unhide позволяющие скрыть какой либо раздел жесткого диска на время загрузки. Например:

Остальные параметры я думаю очевидны. Как уже говорилось с помощью GRUB можно загрузить и FreeBSD (вариант с GRUB мне кажется наиболее симпатичным), для того чтобы это сделать добавьте в файл следующие строки:

title FreeBSD 6.2

С обозначением дисков в данном примере те кому надо разберутся сами, а для остальных чтобы не останавливаться на этом сейчас, вернемся к этому вопросу как-нибудь потом. Для того чтобы загрузить Windows со второго жесткого диска (а она этого делать почему-то не умеет) применяется техника свопирования дисков для этого в нужном пункте просто необходимо прописать что-то вроде этого:

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

Чтобы установить GRUB воспользуйтесь следующей командой

$ sudo /sbin/grub-install /dev/hda

Это для записи в MBR. И если все прошло благополучно получите сообщение «Installation finished. No error reported» и скрипт выведет карту устройств. Но в отличие от LILO переустанавливать GRUB при изменении конфигурационного файла не нужно.

При загрузке системы можно как и в LILO передать изменить некоторые параметры в командной строке, это менее очевидно т.к. GRUB имеет графический интерфейс. Осуществить все это очень просто. Так для того чтобы отредактировать последовательность команд выполняемых при загрузке той или иной системы, переместите, при появлении меню GRUB, на нужную позицию курсор и нажмите ‘e’ (edit), для того чтобы передать (изменить) аргументы передаваемые ядру нажмите ‘a’ (add). А вот при нажатии ‘c’ (command) произойдет самое интересное, а попадете вы в командный режим работы с GRUB. В этом режиме с помощью bash-подобного командного интерфейса можно проделать множество различных операций которые могут понадобиться для загрузки системы, причем доступно как и автодополнение команд и путей к файлам, так и память и редактирование команд введенных пользователем. Список всех доступных команд можно получить введя help в командной строке, а более подробную информацию о команде: > help command_name. На всех останавливаться не буду да и некоторые требуют определенных знаний, а о некоторых мы уже говорили. Приведу лишь самые часто используемые (и наиболее безопасные). Впоследствии опробованные команды при необходимости (удачном эксперименте) можно внести в конфигурационный файл.

Так загрузить Linux можно примерно с помощью такой команды

GRUB> kernel (hd0,4) /boot/vmlinuz-2.6.18-3 root=/dev/hda5 hdc=ide-scsi vga=791, здесь как видите с раздела hda5 загружается ядро содержащееся в файле /boot/vmlinuz-2.6.18-3 данный раздел назначается корневым и выбирается режим видеоадаптера 1024х768х16 (если данный режим вам не подходит попробуйте, например vga=788 — 800х600), и дополнительно для пишущего CD-RW привода устанавливается эмуляция scsi устройства. Для остальных систем используйте все те же: makeactive и chainloader +1. Опробовать новый командный файл можно с помощью опции configfile path_to_file. Для того чтобы вывести содержимое какого либо текстового (конфигурационного) файла воспользуйтесь очень знакомой командой cat, а сравнить два файла можно с помощью — cmp file1 file2, кстати для поиска нужного файла тоже существует команда которая так незамысловато и называется — find. Команда quit позволяет выйти из загрузчика, а halt и reboot соответственно выключить и перезагрузить компьютер. С помощью команды color можно изменить цвет меню например: color light-gray/blue black/light-gray, первым идет параметр для выбранного пункта меню, а затем для не выбранного, основной/фоновый цвет соответственно. Впрочем можно для этого воспользоваться и отдельными командами например foreground ffffff (цвет в шестнадцатиричной форме), background 000000, а для установки рамки вокруг есть команда border. Кстати можно изменить и режим вывода на текстовый для этого воспользуйтесь командой GRUB> display text, а когда вам надоест этот режим, то вернуться можно заменив параметр на vga16. Определить и вывести режимы видеоадаптера можно с помощью команды vbeprobe, а протестировать с помощью testmode. Есть и команды предназначенные для работы с разделами жесткого диска, так команда partnew позволяет создать первичный раздел, а partype изменить его тип, fstest тестирует файловую систему, geometry дает возможность работать с геометрией разделов жесткого диска. Для конфигурации сетевого интерфейса есть возможность воспользоваться командой ifconfig, для установки параметров СОМ порта — serial, изменить раскладку клавиатуры setkey [to_key from_key]. И естественно не обошлось без возможности установки пароля, так как сами видите, что с помощью командного режима можно существенно навредить системе. Для этого используется все та же команда: password [`—md5′] собственно_пароль, данную команду желательно все-таки занести в конфигурационный файл, а необязательная опция md5 указывает на использование алгоритма шифрования md5crypt.

Читайте также:  Aspire one драйвер bluetooth для windows 10

Установка загрузчика

И так с загрузчиками мы разобрались. Теперь давайте разберемся с вопросом куда его устанавливать. Все дело в том, что некоторые системы уже имеют свой загрузчик и естественно можно воспользоваться им. Также нельзя обойти вниманием тот факт, что операционные системы семейства Windows вообще не заботятся о сохранении MBR, а при своей инсталяции просто записывают туда то, что нужно им, после этого как вы понимаете до Linux можно будет добраться только с помощью спасательной дискеты. Поэтому возникает вопрос в какой последовательности устанавливать системы, чтобы потом не повторять заново некоторые операции. Разберем два наиболее популярных варианта: Windows 9x + Linux, Windows 9x + Windows NT(2000)+ Linux. Другие как правило являются лишь частными случаями этих двух, главное уловить принцип, а там разберетесь, я думаю уже сами.

Итак, случай первый Windows 9x + Linux. Первой желательно установить Windows 9x причина уже думаю ясна. Впрочем если есть загрузочная дискета, то загрузить Linux и восстановить загрузчик можно будет без проблем. Да, перед началом любых действий затрагивающих MBR желательно сохранить так сказать его оригинальную версию с помощью команды dd:

$ sudo dd if=/dev/hda of=mbr_orig.bak bs=512 count=1

Правда удобно. Ведь вы надеюсь не забыли, что в Linux можно обратиться ко всему диску сразу или к любой его части, система не накладывает никаких ограничений (кроме прав доступа естественно). Если привыкли к Microsoft’овским разделам отвыкайте, будет легче. Что, мы зделали в этом примере? Откусили первые 512 байт жесткого диска (т.е MBR) и сохранили его в файле. Восстановить теперь старую версию MBR можно введя dd if=mbr_orig.bak of=/dev/hda bs=512 count=1at mbr_orig.bak > /dev/hda (или еще проще c). Красота.

Во время инсталляции Linux программа установки спросит, куда устанавливать LILO. Давайте посмотрим какие у нас варианты. Windows загружается в такой последовательности.

Из рисунка видно, что возможны два варианта установки в MBR

и в boot record раздела куда установлена Windows.

Предпочтительным вариантом является установка в MBR (т.е. выбираем hda). Кстати если вы просто удалили раздел с Linux, то восстановить MBR можно и в DOS, просто наберите fdisk /mbr.

Теперь рассмотрим второй вариант. Последовательность установки систем такая: сначала Windows 9x, затем Windows NT/2000 она корректно определяет родственную систему и заносит данные в свой загрузчик и последней устанавливаем Linux. Можно в этом случае загружаться и по приведенной выше схеме, но это несколько не удобно. Так как прийдется выбирать два раза, сначала Windows в LILO (GRUB), а затем выбирать между Windows 9x и Windows NT/2000. Лучшим вариантом будет воспользоваться NT loader. Для этого при установке установите загрузчик в корневой раздел Linux (например hda5). Загрузитесь з дискеты и введите в командной строке dd if=/dev/hda5 of=/bootsect.lnx bs=512 count=1. Теперь скопируйте получившийся файл в раздел где у вас установлена Windows (раздел С), например командой cp /bootsect.lnx /mnt/win_c или через флоппи диск. Затем найдите в этом же разделе скрытый файл boot.ini (здесь все почему-то рекомендуют перегрузиться в Windows, я пользовался mc, зачем бегать туда сюда) и добавьте в конец файла следующую строку C:\bootsect.lnx=»Linux». Теперь при загрузке вы получите возможность выбрать с помощью NT loader’a любую из трех систем, а затем при выборе варианта Linux загрузится установленный загрузчик.

Если вы не создали загрузочную дискету при установке системы, то в Linux ее можно создать воспользовавшись утилитой mkbootdisk. Например /sbin/mkbootdisk —device /dev/fd0 2.6.18-3, где опция device указывает на устройство на котором будет создаваться загрузочный диск, если у вас один дисковод, то данную опцию можно опустить, а 2.6.18-3 показывает на используемую версию ядра, это название каталога в /lib/modules/ (можно и проще /sbin/mkbootdisk —device /dev/fd0 `uname -r`).

Вот мы и разобрались, я по крайней мере так надеюсь с загрузчиками. Дополнительную информацию найдете в соответствующих man’ах и также по мультизагрузке системы в Интернете доступны различные варианты HOWTO. Linux forever.

7 комментариев

Извиняюсь, но у вас ошибка:

в каталоге /boot/grub и называется grub.conf.

Как сказал мне недавное один из разработчиков ПО «это не фича это баг». Изначально именно grub.conf? глянь хотя бы http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?part=1&chap=10, но мне действительно в последнее время попадалось именно menu.conf. Кстати статья 2002 года.

В самом начале досадная опечатка:
«И занимает этот самый MBR всего то 512 Мб». Всего-то? :)))

Так я и не спорю. Просто такие вот мелочи для «чайника» очень важны.

2ava
Да погорячился 🙂

/boot/grub/menu.lst это ссылка на
/boot/grub/grub.conf

на мой взгляд много неточностей-непоняток…
у чайников больше добавится вопросов, чем снимется…

Источник

Оцените статью