Завантажувальний диск - в основному мініатюрна, окрема 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 часто дуже простий.
4.1.2 Типи дисків.
Зробивши базовий огляд процесу початкового завантаження, тепер ми можемо визначати відмінності-ні типи передбачуваних дисків. Ми класифікуємо диски за чотирма типами. Тут і далі використовується термін "диск" як дискета, якщо не вказано інше, хоча більшість обговорюваного може застосовуватися і для жорстких дисків.
Диск, містить ядро, яке може завантажуватися. Диск може використовуватися, для за-Грузьке ядра, яке потім може завантажити кореневу файлову систему на іншому диску. Ядру на завантажувальному диску зазвичай потрібно вказати, де знайти кореневу файло-ву систему. Часто завантажувальний диск завантажує кореневу файлову систему з дру-гой дискети, але замість цього, можливо, вказати завантажувального диску, завантажувати кореневу файлову систему з жорсткого диска. Це зазвичай робиться при випробуванні но-вого ядра. (Фактично, "make zdisk" створить такий диск автоматично з вихідного тексту ядра).
Диск з файлової системою, що містить необхідні файли для виконання Linux системи. Такий диск не обов'язково містить або ядро або завантажувач.
Кореневої диск може використовуватися для виконання системи незалежно від будь-яких інших дисків, як тільки загрузилось ядро. Зазвичай кореневої диск автоматично копіюється в ramdisk. Це робить кореневої диск набагато швидше, і звільняє дис-ковод для сервісного диска.
Диск, який містить, і ядро і кореневу файлову систему. Іншими словами, він містить все необхідне для завантаження і виконання Linux системи без жорсткого диска. Перевага цього типу диска - все необхідне знаходиться на одному диску.
Однак поступово збільшується розмір всього означає, що все більше і більше важко помістити все на одній дискеті, навіть із стисненням.
Диск, який містить файлову систему, яка не призначена, для монтуються-вання як коренева файлова система. Це - додатковий диск даних. Ви можете використовувати диск цього типу, для зберігання додаткових утиліт, якщо, у Вас дуже багато поміщено на вашому кореневому диску.
Взагалі, коли ми говоримо щодо "створення завантажувального диска" ми маємо на увазі створення обох boot (ядро) і root (файли) частин. Вони можуть бути або одним (одиночний завантажувальний / кореневої диск) або окремі (завантажувальний + кореневої диски). Найбільш гинув-кий підхід для рятувальних дискет у використанні окремо кореневої і завантажувального дискет, і одна або більше сервісних дискет, щоб врегулювати перевищення.
Створення кореневої файлової системи. Створення кореневої файлової системи включає вибір файлів, необхідних для запуску системи. У цій секції ми описуємо, як створити стиснуту кореневу файлову систему. Менш поширений варіант - створити незжатими файлову систему на дискеті, яка безпосередньо хмонтіруется як коренева.
Огляд. Коренева файлова система повинна містити все необхідне для підтримки повної Linux системи. Для цього диск повинен включити мінімальні вимоги для Linux систе-ми:
базова файлова система,
Мінімальний набір каталогів: / dev, / proc, / bin, / etc, / lib, / usr, / tmp,
Базовий набір утиліт: sh, Is, cp, mv, і т.д.,
Мінімальний набір файлів конфігурації: гс, 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 Ця команда обнуляє пристрій. Цей крок важливий, тому що файлова система на пристрої бу-дет стиснута, для досягнення максимального ступеня стиснення все невикористовувані частини повинні бути заповнені нулями.
(Якщо Ви використовуєте петлеве пристрій, замість DEVICE має бути підставлено ім'я використовуваного дискового файлу. Mke2fs запитає, чи дійсно Ви хочете зробити це, до Нього промовте так.)
mke2fs команда автоматично виявить обсяг пам'яті, доступний і відповідно Скон-фігурує. -т 0 параметр запобігає від резервування простору для кореня, і отже, забезпечує більше використовуваного простору на диску. Потім, змонтуйте пристрій: mount -t ext2 DEVICE / mnt (Ви повинні створити каталог монтування / mnt, якщо він не існує.) У наступних сек-ціях, всі імена каталогів призначення покладаються щодо / mnt.
Заповнення файлової системи. Існує розумний мінімальний набір каталогів для вашої кореневої файлової систе-ми:
/ Dev - Пристрої, необхідні для введення / виведення
каталог-заглушка, необхідний для ргос файлової системи
/ Etc - системні файли конфігурації
/ Sbin - критичні системні бінарники
базові бінарники, частина передбачуваної системи
/ Lib - загальні бібліотеки, для забезпечення засобів динамічної підтримки (run-time)
/ Mnt - точка монтування для підтримки інших дисків
/ Usr - додаткові утиліти і додатки
Представлена тут структура каталогів - тільки для використання в кореневій дискеті. Реальні Linux системи мають більш повний і чіткий набір правил розміщення файлів, званий Стандарт файлової ієрархії (File Hierarchy Standard).
Три з цих каталогів повинні бути порожні на кореневої файлової системи, таким чином що вони повинні бути тільки створені mkdir. Каталог / ргос - в основному заглушка, в який поме-щена ргос файлова система. Каталоги / mnt і / usr - тільки точки монтування для викорис-тання після того, як завантажувальний / коренева система буде запущена. Отже, ці каталоги повинні бути тільки створені.
Перенесення. Як тільки Ви закінчили створення кореневої файлової системи, размонтіруйте її, Скоп'є-руйте її в файл, і стисніть:
dd if = DEVICE bs = lk | gzip -v9> rootfs.gz Після закінчення у Вас буде файл rootfs.gz. який і є ваша стисла коренева файлова система. Ви повинні перевірити розмір, щоб упевнитися, що вона поміститися на дис-кете; якщо не поміщається Ви повинні повернутися і видалити деякі файли.
Вибір ядра. Коли у Вас є повна стисла коренева файлова система. Наступний крок - створення або вибір ядра. У більшості випадків, можливо, скопіювати ваше поточне ядро і загру-жати дискету з нього. Однак, можуть бути випадки, коли Ви захочете створити окреме.
Одна причина - розмір. Якщо Ви формуєте одиночну дискету, ядро буде одним з найбільших файлів на дискеті, так що Ви повинні максимально зменшити розмір ядра. Якщо Ви формуєте двухдисковую завантажувальний + кореневу дискету, це не так важливо, тому що ядро буде запускатися з окремого диска. Щоб зменшити розмір отрута-па створіть його з мінімальним набором засобів, необхідних для підтримки бажаної системи. Це означає пропускати все, що Вам не потрібно. Робота з мережами - хороша річ, щоб її виключити, також як підтримка для будь-яких дисководів і інших пристроїв, кото-які Вам не потрібні при виконанні вашої завантажувального системи. Як зазначено раніше, ваше ядро має мати вбудовану підтримку ramdisk, і ext2.
Визначивши мінімальний набір засобів включених в ядро, Ви повинні визначити, що додати назад. Ймовірно найбільш загальне застосування дискети - досліджень-ня і відновлення зруйнованої кореневої файлової системи, і щоб зробити це, Вам потрібна підтримка в ядрі. Наприклад, якщо ваш резерв міститься на стрічці і для доступу до вашої лентопротяжкой використовується ftape, то якщо Ви втрачаєте ваш поточний кореневої диск і пристрої, що містять ftape, тоді Ви будете не здатні відновити їх з ваших стрічок резервування. Ви будете повинні повторно встановити Linux, завантажити і повторно встановити ftape, і потім спробувати вважати ваш резерв.
Головне - будь-яка підтримка введення - виведення в ядрі для підтримки резервування, повинна також бути додана в ваше завантажувальний ядро.
Створення диска Тепер у Вас є ядро і стисла коренева файлова система. Якщо Ви створюєте загрузоч-ний / кореневої диск, перевірте їх розміри, щоб переконатися, що вони обидва помістяться на од-ном диску. Якщо Ви робите дві дискети завантажувальний + кореневу, перевірте, чи поміщається коренева файлова система на одній дискеті.
Ви повинні вирішити, використовувати LILO для завантаження або bootdisk ядро. Альтернатива - ко-бенкетувати ядро безпосередньо на дискету і завантажуватися без LILO. Перевага викорис-тання LILO - можливість вказати деякі параметри ядра, яке може бути необ-ходимо для ініціалізації апаратних засобів (перевірте файл /etc/lilo.conf у вашій систе-ме). Якщо він існує і має рядок "append ^.", Вам, ймовірно, потрібно це властивість. Незручність використання LILO - ускладнення створення завантажувального диска, і трохи більшу кількість простору. Ви повинні встановити маленьку окрему файлову систему, яку ми назвемо файлової системою ядра, куди ви перенесете ядро і не-скільки інших файлів необхідних LILO.