Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
комп коммуникации и сети.doc
Скачиваний:
7
Добавлен:
28.05.2015
Размер:
11.18 Mб
Скачать

Тема4 Загрузочные диски

Загрузочный диск - в основном миниатюрная, отдельная Linux система на дискете. Она должна выполнять многие из тех же самых функций, которые выполняет полная полнораз­мерная Linux система. Перед попыткой создания Вы должны понять основы процесса на­чальной загрузки Linux.

4.1.1 Процесс начальной загрузки.

Все системы PC начинают процесс начальной загрузки, выполняя код в ROM (обозначае­мый BIOS), для загрузки сектора 0; цилиндра 0 загрузочного устройства. Загрузочное уст­ройство - обычно первый дисковод для гибких дискет (обозначается А: в DOS и /dev/fdO в Linux). BIOS затем пробует выполнить этот сектор. На большинстве загрузочных дисков, сектор 0, цилиндр 0 содержит либо:

  • код загрузчика - типа LILO, который находит, загружает и выполняет ядро, начиная соответствующую начальную загрузку.

  • начало ядра операционной системы, типа Linux.

Если Linux ядро было скопировано необработанным (raw) на дискету, первый сектор диска -является первым сектором ядра Linux. Этот первый сектор продолжит процесс начальной загрузки, загружая остальную часть ядра из устройства начальной загрузки.

Как только ядро полностью загружено, оно производит некоторую базовую инициализацию устройств. Затем пробует загрузить и монтировать корневую (root) файловую систему из

некоторого устройства. Корневая файловая система - просто файловая система, которая мон­тируются как "V". Ядру нужно сообщать, где искать корневую файловую систему; если оно не может найти загрузочный образ, оно останавливается.

В некоторых ситуациях — часто при загрузке с дискеты — корневая файловая система за­гружена в ramdisk, который является оперативной памятью (RAM), к которой обращается система, как будто это был диск. Для этого есть две причины. Во-первых, RAM - на несколь­ко порядков быстрее, чем дискета, так что операции системы выполняются быстро; и второй

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

Как только корневая файловая система загружена и смонтирована, Вы видите сообщение: VFS: Mounted root (ext2 filesystem) readonly.

и вьшолняет ^CTeMa находит bit программу на корневой файловой системе (в /bin или /sbin) svsinit и выполНШ11 ЧИТаСТ конФигУрациоиный файл /etc/inittab, ищет строку, обозначенную „у к и яет именованный скрипт. Скрипт sysinit - обычно что-нибудь вроде /etc/rc

или /etc/init.d/boot. Этот скрипт - набор команд оболочки, которые выполняют базовые дей­ствия системы, типа:

  • Запуск fsck на всех дисках,

  • Загрузка необходимых модулей ядра,

  • Запуск подкачки (swaping),

  • Инициализация сети,

  • Монтирование дисков, указанных в fstab.

Этот скрипт часто вызывает различные другие скрипты, для инициализации модулей. На­пример, в общей структуре SysVinit, каталог /etc/red/ содержит комплексную структуру под­каталогов, чьи файлы определяют, как запускать и завершать большинство служб системы. Однако, на загрузочных дисках сценарий sysinit часто очень прост.

Когда сценарий sysinit заканчивается, возвращается управление init, который затем входит в уровень запуска по умолчанию (default runlevel), определенный в inittab ключевым словом mitdefault. Runlevel строка обычно определяет программу подобную getty, которая отвечает за связь через консоль и try. Это - программа getty, которая печатает знакомое приглашение "login:". Программа getty в свою очередь вызывает login программу, чтобы проверить доступ на вход в систему и установить сеансы пользователя.

4.1.2 Типы дисков.

Сделав базовый обзор процесса начальной загрузки, теперь мы можем определять различ­ные типы предполагаемых дисков. Мы классифицируем диски по четырем типам. Здесь и далее используется термин "диск" как дискета, если не оговорено иначе, хотя большинство обсуждаемого может применяться и для жестких дисков.

Загрузочный (boot)

Диск, содержит ядро, которое может загружаться. Диск может использоваться, для за­грузки ядра, которое затем может загрузить корневую файловую систему на другом диске. Ядру на загрузочном диске обычно нужно указать, где найти корневую файло­вую систему. Часто загрузочный диск загружает корневую файловую систему с дру­гой дискеты, но вместо этого, возможно, указать загрузочному диску, загружать кор­невую файловую систему с жесткого диска. Это обычно делается при испытании но­вого ядра. (Фактически, "make zdisk" создаст такой диск автоматически из исходного текста ядра).

Корневой (root)

Диск с файловой системой, содержащей необходимые файлы для выполнения Linux системы. Такой диск не обязательно содержит или ядро или загрузчик.

Корневой диск может использоваться для выполнения системы независимо от любых других дисков, как только загрузилось ядро. Обычно корневой диск автоматически копируется в ramdisk. Это делает корневой диск намного быстрее, и освобождает дис­ковод для сервисного диска.

Загрузочный / Корневой (boot/root)

Диск, который содержит, и ядро и корневую файловую систему. Другими словами, он содержит все необходимое для загрузки и выполнения Linux системы без жесткого диска. Преимущество этого типа диска - все требуемое находится на одном диске.

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

Сервисный (utility)

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

Вообще, когда мы говорим относительно "создания загрузочного диска" мы подразумеваем создание обоих boot (ядро) и root (файлы) частей. Они могут быть или одним (одиночный загрузочный/корневой диск) или отдельные (загрузочный + корневой диски). Наиболее гиб­кий подход для спасательных дискет в использовании отдельно корневой и загрузочной дис­кет, и одна или более сервисных дискет, чтобы урегулировать превышение.

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

Обзор. Корневая файловая система должна содержать все необходимое для поддержки полной Linux системы. Для этого диск должен включить минимальные требования для Linux систе­мы:

  • базовая файловая система,

  • Минимальный набор каталогов: /dev, /proc, /bin, /etc, /lib, /usr, /tmp,

  • Базовый набор утилит: sh, Is, cp, mv, и т.д.,

r

  • Минимальный набор файлов конфигурации: гс, inittab, fstab, и т.д.,

  • Устройства: /dev/hd *, /dev/tty *, /dev/fdO, и т.д.,

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

Конечно, любая система становится полезной только, когда Вы можете что-нибудь на ней выполнить, и корневая дискета становится полезной, когда Вы можете делать что-то вроде:

  • Проверить файловую систему другого устройства, например, проверить корневую файловую систему на жестком диске, у Вас должна быть возможность загрузить Linux с другого устройства - корневой дискеты. Затем Вы можете выполнить fsck на вашем основном корневом диске, в то время как он - не замонтирован.

  • Восстанавливать все или часть вашего основного корневого устройства, из архива ис­пользуя утилиты резервирования типа cpio, tar, gzip и ftape.

Мы опишем, как создать сжатую файловую систему, называемую так, потому она что сжата на диске и, когда загружается, распаковывается на ramdisk. Co сжатой файловой системой Вы можете разместить много файлов (приблизительно два мегабайта) на стандартную диске­ту 1440КБ. Так как файловая система намного больше, чем дискета, она не может помес­титься на дискете. Мы должны создать ее в другом месте, сжать и затем скопировать на дис­кету.

Создание файловой системы.

Чтобы создать такую корневую файловую систему, Вам нужно достаточно большое запасное устройство, чтобы содержать все файлы перед сжатием. Вам необходимо устройство, спо­собное хранить приблизительно четыре мегабайта. Есть несколько вариантов:

• Использовать ramdisk (DEVICE = /dev/ramO). В этом случае используется память, чтобы имитировать дисковод. Ramdisk должен быть достаточно большой, чтобы со­ держать файловую систему соответствующего размера. Если Вы используете LILO, проверьте в вашем файле конфигурации (/etc/lib.conf) строчку:

RAMDISKSIZE = rum Которая определяет, сколько оперативной памяти будет выделено. Значение по умол­чанию 4096КБ, которое должно быть достаточным. Вы не должны пытаться пробо­вать использовать такой ramdisk на машине с объемом памяти менее 8МБ. Удосто­верьтесь что существует устройство /dev/ramO, /dev/ram или /dev/ramdisk. Если необ­ходимо, создайте /dev/ramO с mknod (major номер 1, minor 0).

  • Если у Вас есть достаточно большой (несколько мегабайт) неиспользуемый раздел жесткого диска, это - хорошее решение.

  • Использовать петлевое (ioopback) устройство, которое позволяет работать с файлом на диске как с устройством. При использовании петлевого устройства Вы можете соз­дать трех мегабайтный файл на вашем жестком диске и сформировать на нем файло­вую систему. Наберите man losetup для инструкций о использовании петлевых уст­ройств. Если на вашей системе нет loop устройства (/dev/loopO,/dev/loopl, и т.д.), Вы должны создать их - "mknod /dev/loopO b 7 0м. Как только Вы установили специаль­ные mount и umount. создайте временный файл на жестком диске с достаточной емко­стью (eg, /tmp/fsfile). Вы можете использовать команду:

dd ifWdev/zero ofVtmp/fsfile bs=lk сошн=тш«

для создания ппп-блокового файла.

Используйте имя файла вместо DEVICE ниже. Когда Вы даете команду монтирования, Вы должны включить опцию "~о loop" чтобы mount использовала петлевое устройство. Напри­мер:

mount -о loop -t ext2 /tmp/fsfile /mnt

смонтирует /tmp/fsfile (через петлевое устройство) в точке монтирования /mnt. Команда df должна подтвердить это. После того, как Вы выбрали одну из этих опций, подготовьте DEVICE:

dd ifWdev/zero of=DEVICE bs=lk count=3000 Эта команда обнуляет устройство. Этот шаг важен, т.к. файловая система на устройстве бу­дет сжата, для достижения максимальной степени сжатия все неиспользуемые части должны быть заполнены нулями.

Затем, создайте файловую систему. Linux ядро распознает два типа файловой системы для корневых дисков, которые автоматически копируются на ramdisk. Это - minix и ext2, из кото­рых ext2 является привилегированной файловой системой. При использовании ext2, Вы мо­жете использовать -i опцию, чтобы определить большее количество inodes чем значение по умолчанию; -i 2000 предложен так, чтобы Вы не исчерпали inodes. В качестве альтернативы, Вы можете сберечь inodes, удаляя большинство ненужных /dev файлов. mke2fs по умолча­нию создаст 360 inodes на дискете 1. 44МБ. Я считаю, что 120 inodes вполне достаточно для моей текущей спасательной корневой дискеты, но если Вы включаете все устройства в /dev каталог, Вы легко превысите 360. Использование сжатой корневой файловой системы позво­ляет иметь большую файловую систему, и следовательно большее количество inodes по умолчанию, но Вы должны либо уменьшить число файлов, либо увеличивать число inodes. Так что Ваша команда выглядит так:

mke2fs -m 0 -i 2000 DEVICE

( Если Вы используете петлевое устройство, вместо DEVICE должно быть подставлено имя используемого дискового файла. mke2fs спросит, действительно ли Вы хотите сделать это; говорите да.)

mke2fs команда автоматически обнаружит доступное пространство и соответственно скон-фигурируется . -т 0 параметр предотвращает от резервирования пространства для корня, и следовательно, обеспечивает больше используемого пространства на диске. Затем, смонтируйте устройство: mount -t ext2 DEVICE /mnt ( Вы должны создать каталог монтирования /mnt, если он не существует.) В следующих сек­циях, все имена каталогов назначения полагаются относительно /mnt.

Заполнение файловой системы. Существует разумный минимальный набор каталогов для вашей корневой файловой систе­мы:

  • /dev -- Устройства, требуемые для ввода/вывода

  • /ргос ~ каталог-заглушка, необходимый для ргос файловой системы

  • /etc — системные файлы конфигурации

  • /sbin - критичные системные бинарники

  • /bin ~ базовые бинарники, часть предполагаемой системы

  • /lib -- общие библиотеки, для обеспечения средств динамической поддержки (run­time)

  • /mnt - точка монтирования для поддержки других дисков

  • /usr - дополнительные утилиты и приложения

Представленная здесь структура каталогов - только для использования в корневой дискете. Реальные Linux системы имеют более полный и четкий набор правил размещения файлов, называемый Стандарт Файловой Иерархии (File Hierarchy Standard).

Три из этих каталогов должны быть пусты на корневой файловой системе, т.о. что они должны быть только созданы mkdir. Каталог /ргос - в основном заглушка, в который поме­щена ргос файловая система. Каталоги /mnt и /usr - только точки монтирования для исполь­зования после того, как загрузочная/корневая система будет запущена. Следовательно, эти каталоги должны быть только созданы.

Перенос. Как только Вы закончили создание корневой файловой системы, размонтируйте ее, скопи­руйте ее в файл, и сожмите:

umount /mnt

dd if=DEVICE bs=lk | gzip -v9 > rootfs.gz После окончания у Вас будет файл rootfs.gz , который и есть ваша сжатая корневая файловая система. Вы должны проверить размер, чтобы удостовериться, что она поместиться на дис­кете; если не помещается Вы должны вернуться и удалить некоторые файлы.

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

Одна причина - размер. Если Вы формируете одиночную загрузочную дискету, ядро будет одним из самых больших файлов на дискете, так что Вы должны максимально уменьшить размер ядра. Если Вы формируете двухдисковую загрузочную + корневую дискету, это не так важно, так как ядро будет запускаться с отдельного диска. Чтобы уменьшить размер яд-па создайте его с минимальным набором средств, необходимых для поддержки желаемой системы. Это означает пропускать все, что Вам не нужно. Работа с сетями - хорошая вещь, чтобы ее исключить, также как поддержка для любых дисководов и других устройств, кото­рые Вам не нужны при выполнении вашей загрузочной системы. Как указано ранее, ваше ядро должно иметь встроенную поддержку ramdisk, и ext2.

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

Главное - любая поддержка ввода - вывода в ядре для поддержки резервирования, должна также быть добавлена в ваше загрузочное ядро.

Процедура для фактического создания ядра описана в документации, поставляемой с ядром. Это очень просто сделать, начните с просмотра /usr/src/linux. Если создание ядра - проблема для Вас, то Вы, вероятно, не должны пытаться создавать загрузочную систему. Не забудьте сжать ядро ''make zlrnage".

Создание диска Теперь у Вас есть ядро и сжатая корневая файловая система. Если Вы создаете загрузоч­ный/корневой диск, проверьте их размеры, чтобы убедиться, что они оба поместятся на од­ном диске. Если Вы делаете две дискеты загрузочную + корневую, проверьте, помещается ли корневая файловая система на одной дискете.

Вы должны решить, использовать LILO для загрузки или bootdisk ядро. Альтернатива - ко­пировать ядро непосредственно на дискету и загружаться без LILO. Преимущество исполь­зования LILO - возможность указать некоторые параметры ядра, которое может быть необ­ходимы для инициализации аппаратных средств (проверьте файл /etc/lilo.conf в вашей систе­ме). Если он существует и имеет строку "append^...", Вам, вероятно, нужно это свойство. Неудобство использования LILO - усложнение создания загрузочного диска, и немного большее количество пространства. Вы должны установить маленькую отдельную файловую систему, которую мы назовем файловой системой ядра, куда Вы перенесете ядро и не­сколько других файлов необходимых LILO.