Загрузочный диск - по существу миниатюрная, самодостаточная Linux система на дискете. Она должна выполнять многие из функций, которые выполняет укомплектована полноразмерная Linux система. Перед попыткой ее создания, Вы должны понять основы процесса загрузки Linux. Мы представляем здесь основы, которые являются достаточными для понимания остальной части этого документа. Многие подробности и альтернативные опции были опущены.
Все PC системы начинают процесс загрузки с выполнения кода в ROM (обозначаемого BIOS) загружая сектор 0, цилиндра 0 загрузочного устройства. Загрузочное устройство - обычно дисковод (обозначается A: в DOS и /dev/fd0 в Linux). Затем BIOS пробует выполнить этот сектор. На большинстве загрузочных дисков, сектор 0, цилиндра 0 содержит либо:
код загрузчика, такого как LILO, который находит, загружает и выполняет ядро, начиная загрузку соответствующим образом; либо
начало ядра операционной системы, такой как Linux.
Если Linux ядро прямо скопировано на дискету, первый сектор диска - является первым сектором ядра Linux. Этот первый сектор продолжит процесс загрузки, загружая остальную часть ядра с загрузочного устройства.
Как только ядро полностью загружено, оно производит инициализацию драйверов устройств и их структур данных. Как только оно полностью инициализировалось, оно просматривает в своем образе специальную ячейку, называемую ramdisk слово. Это слово определяет, где ядро будет искать корневую файловую систему. Корневая файловая система - обычная файловая система, которая будет монтироваться как ``/''. Ядру нужно сообщить, где искать корневую файловую систему; если оно не может найти загрузочный образ, оно останавливается.
В некоторых ситуациях ‐ часто при загрузке с дискеты ‐ корневая файловая система загружается в ramdisk - оперативную память (RAM), с которой система работает как с диском. RAM на несколько порядков быстрее дискеты, так что операции системы с ramdisk выполняются быстро. Ядро также может загрузить сжатую файловую систему с дискеты и распаковать ее на ramdisk, что позволяет поместить на дискете намного больше файлов.
Как только корневая файловая система загружена и примонтирована, Вы видите сообщение:
VFS: Mounted root (ext2 filesystem) readonly. |
Как только система успешно загрузила корневую файловую систему, она пытается выполнить программу init (в /bin или /sbin). init читает конфигурационный файл /etc/inittab, ищет строку, обозначенную sysinit, и исполняет обозначенный скрипт. Скрипт sysinit - обычно что-то вроде /etc/rc или /etc/init.d/boot. Этот скрипт - набор команд оболочки, которые запускают основные системные службы, такие как запуск на жестких дисках fsck, загрузка необходимых модулей ядра, инициализация подкачки (swapping), инициализация сети, и монтирование упомянутых в /etc/fstab дисков.
Этот скрипт часто вызывает различные другие скрипты, для модульной инициализации. Например, в общей структуре SysVinit, каталог /etc/rc.d/ содержит комплексную структуру подкаталогов, чьи файлы определяют, как запускать и завершать большинство служб системы. Однако, на загрузочных дисках сценарий sysinit часто очень прост.
Когда сценарий sysinit заканчивается, управление возвращается к init, который затем входит в уровень запуска по умолчанию (default runlevel), определенный в inittab ключевым словом initdefault. Строка runlevel обычно определяет программу подобную getty, которая отвечает за связь между консолью и tty. Это - программа getty, которая печатает знакомое приглашение ``login:''. Программа getty, для проверки сеанса вхождения в систему и установления пользовательских сессий, вызывает программу login,
Сделав базовый обзор процесса начальной загрузки, теперь мы можем определить различные типы предполагаемых дисков. Мы классифицируем диски по четырем типам. Здесь и далее в этом документе, если не оговорено иначе, термин ``диск'' используется как дискета, хотя большинство обсуждаемого материала может применяться и для жестких дисков.
Диск содержит способное загружаться ядро. Диск может использоваться для загрузки ядра, которое далее может загрузить корневую файловую систему на другом диске. Ядру на загрузочном диске обычно нужно указать, где искать корневую файловую систему.
Часто загрузочный диск загружает корневую файловую систему с другой дискеты, но можно указать, чтобы загрузочный диск загружал корневую файловую систему с жесткого диска. Обычно это делается при испытании нового ядра. (Фактически, ``make zdisk'' автоматически создаст такой диск из исходного кода ядра).
Диск с файловой системой, содержащей необходимые файлы для выполнения Linux системы. Такой диск не обязательно содержит ядро или загрузчик.
Корневой диск может использоваться для выполнения системы независимо от любых других дисков, после загрузки ядра. Обычно корневой диск автоматически копируется в ramdisk. Это делает корневой диск намного быстрее, и освобождает дисковод для сервисного диска.
Диск, содержащий и ядро, и корневую файловую систему. Другими словами, на нем есть все необходимое для загрузки и выполнения Linux системы без жесткого диска. Преимущество этого типа диска в компактности ‐ все необходимое находится на одном диске. Однако постепенно увеличивающийся размер всего приводит к тому, что все труднее поместить все на одну дискету, даже со сжатием.
Диск, содержащий файловую систему, которая не предназначена, для монтирования корневой файловой системой. Это - дополнительный диск данных. Если у Вас слишком много помещено на корневом диске, Вы могли бы использовать диск этого типа, для хранения дополнительных утилит.
Вообще, когда мы говорим ``создание загрузочного диска'' мы подразумеваем создание обоих загрузочного (ядро) и корневого (файлы) частей. Они могут быть либо одним (одиночным загрузочным/корневым) диском, либо отдельными (загрузочным + корневым) дисками. Наиболее гибкий подход для спасательных дискет в использовании раздельных корневой и загрузочной дискет, а также одной или более сервисных дискет, для урегулирования превышения.