Лабораторна робота №3
Тема: ОС Linux. Дослідження процесу завантаження операційної системи та
адміністрування
Мета роботи: дослідити процес початкового завантаження ОС Linux, та навчитися налаштовувати та проводити його діагностику. ознайомитися на практиці з базовими операціями адміністрування операційної системи
Теоретичні відомості:
Аналізуючи процес початкового завантаження ОС Linux можна зрозуміти багато особливостей роботи операційної системи. Власне правильне налаштування цього процесу дозволяє створити комфортне робоче середовище для користувача. Водночас, помилки у цьому процесі призводять до низької продуктивності системи, або ж система не запускається взагалі
В цілому процес початкового завантаження системи містить такі етапи:
завантаження та ініціалізація ядра;
розпізнавання та конфігурування пристроїв;
створення первинних системних процесів;
виконання команд оператора;
виконання командних файлів;
перехід у багатокористувацький режим.
Формування розділів жорсткого диску
Взагалі кажучи форматування жорсткого диску та створення на ньому розділів відноситься до процесу інсталяції системи, а не до процесу завантаження. Однак правильне формування розділів диску є передумовою правильного завантаження системи.
Формування нових розділів на диску можна зробити, наприклад, утілітою fdisk.
Рекомендується створювати окремі розділи на диску для:
операційної системи – цей розділ є активним і з нього відбувається початкове завантаження
даних користувачів. Окремий розділ для даних користувачів дозволяє гнучко проводити резервне архівування даних
свап – розділ. Цей розділ використовується системою для свап-пам»яті
Проаналізувати наявні розділи можна, наприклад використовуючи Kinfocenter->Partitions (ОС Mandriva Spring 2007, KDE 3.5). Крім наведених вище розділів може бути відображено і інші змонтовані файлові системи.
Завантаження та ініціалізація ядра
Процес завантаження починається однаково для різних типів ОС та апаратних платформ.
POST
Спочатку, відразу після включення живлення, запускається процедура самотестування комп”ютера POST (Power On Self Test). Система порівнює інформацію записану в CMOS пам’яті з тим, що є насправді. Якщо виявлені помилки, то видаються повідомлення на екран, або ж звукові повідомлення.
Після правильного закінчення процедури POST система передає керування коду записаному по визначеній адресі у пам’яті. Цей код є досить простим. Головна його функція – пошук пристрою, з якого буде відбуватися завантаження. Залежно від налаштувань у CMOS BIOS пристроєм початкового завантаження може бути дискета, cdrom або жорсткий диск.
Завантаження з MBR
Коли пристрій завантаження знайдено, система шукає нульовий сектор (з адресою циліндр0, головка0, сектор0). та виконує код, розташований у цьому секторі. Цей код знаходить та зчитує таблицю розділів (розташовану відразу ж після нульового сектора) та знаходить в ній активний розділ. Після цього починається виконання коду записаного у першому блоці активного розділу. Для Linux цей код є завантажувачем LILO або GRUB
LILO
В деяких випадках завантажувач LILO розміщують безпосередньо в MBR. В цьому випадку він використовується для завантаження інших ОС. Якщо ж завантажувач занесено на початок розділу диску (такий завантажувач ще називають вторинним - secondary), то він використовується для завантаження Linux з цього розділу.
Нехай LILO розташовано в MBR. Тоді підчас завантаження BIOS завантажує код LILO у пам”ять по визначеній фіксованій адресі (0x7C00) та виконується. Цей код використовує процедури BIOS завантажує у свою чергу вторинний завантажувач на адресу 0x9B000. Всі операції з відображення меню виконує вже вторинний завантажувач.
GRUB
Завантажувач GRUB є альтернативою до LILO. GRUB (Grand Unified Bootloader) використовується в дистрибутивах Mandriva, Ubuntu та деякіх інших. Подібно до LILO – головне призначення GRUB – завантажити ядро операційної системи. Крім цього, GRUB надає користувачам деякі інші можливості, такі як завантаження різних ОС та різних версій однієї ОС, захист процесу завантаження паролем, графічне та кольорове оформлення екрану завантаження.
Як правило, завантажувач GRUB встановлюється підчас інсталяції системи. Є можливість інсталювати цей завантажувач окремо, наприклад на флеш-диск. Файли, що керують роботою завантажувача можна знайти у каталозі /boot/grub/. Головним конфігураційним файлом є menu.lst. Розглянемо приклад такого файлу.
default 0
timeout 3
hiddenmenu
title Ubuntu, kernel 2.6.20-15-generic
root (hd0,0)
kernel /boot/vmlinuz-2.6.20-15-... ro quiet splash
initrd /boot/initrd.img-2.6.20-15-generic
Файл має заголовок, в якому визначені загальні параметри завантажувача та додатові секції, по одній на кожен пункт меню завантажувача, що вказує на тип ОС яку потрібно завантажити.
Параметр |
Коментар |
default |
Визначає пункт меню який обирають за замовчуванням. Нумерація починається з 0 |
timeout |
Як довго (секунди) меню затримається на екрані, поки не буде обрано пункт за замовчуванням |
hiddenmenu |
Якщо цей пункт є, то меню на екрані не відображається, автоматично завантажується система вказана за замовчуванням |
title |
текст пункту меню |
root |
Вказує завантажувачу на якому диску та розділі знайти ядро |
kernel |
Визначає яке ядро буде завантажене |
initrd |
Вказує завантажувачу яку програму потрібно виконати після завантаження ядра |
Після завантаження ядра завантажуються та ініціалізуються драйвери для пристроів комп”ютера. Власне на цьому етапі часто виникають проблеми, якщо драйвер не відповідає наявному пристрою. Якщо всі драйвери розпізнані та ініціалізовані без помилок, то система переходить до запуску спонтанних процесів, серед яких чільне місце займає процес init. Зазвичай виконувальний код init знаходиться у /sbin каталозі.
Запуск процеса init. Рівні виконання (run levels)
Відразу після завантаження ядра Linux ще не готовий до роботи з користувачами. Те, що робить Linux такою потужною за набором можливостей ОС реалізовано у наборі процесів - сервісів, які виконуються у фоновому режимі. В Linux прийнято називати такі сервіси демонами. Головним завданням процесу init є автоматичний запуск демонів потрібних для певної робочої конфігурації (рівня виконання) та зворотня функція – зупинка демонів, які не потрібні для біжучого рівня виконання
Рівні виконання мають числові ідентифікатори від 0 до 6 та s, S.
Ідентификатор рівня виконання |
Призначення |
0 |
Система зупинена |
1 |
Однокористувацький режим (single user mode). Використовуєтся, наприклад адміністратором системи для виконання обслуговування |
2 |
Обмежений багатокористувацький режим. Текстовий інтерфейс |
3 |
Багатокористувацький режим. Текстовий інтерфейс |
5 |
Режим з автоматичним запуском графічного інтерфейсу |
6 |
Використовується для перезавантаження системи |
s S |
Зарезервовані для використання командними скриптами для переходу системи в однокористувацький режим |
Після запуску програма init зчитує конфігураційний файл /etc/inittab. У цьому файлі шукають рядок з параметром initdefault. Цей рядок визначає рівень виконання за замовчуванням. Приклад фрагменту файлу inittab для виконання за замовчуванням:
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
Кожен рядок файла inittab містить чотири колонки, розділені двокрапкою. У першій колонці вказано числовий ідентифікатор рядка. У другій колонці вказано номер рівня виконання. Третя колонка задає режим виконання командного файла (див. табл). У четвертій колонці вказано командний файл, який потрібно виконати. Як аргумент цьому файлу передається номер рівня виконання. Як видно з прикладу, командний файл знаходиться у каталозі /etc/rc.d/ (його ще називають головним -master- командним файлом, тому що залежно від рівня виконання він виконує велику кількість інших командних файлів).
Яким чином командний скрипт вирішує, які демони потрібно запустити, а які – зупинити для кожного конкретного рівня виконання? У системі UNIX в каталозі rc.d можна побачити підкаталоги з назвами rc#.d, де # вказує на певний рівень виконання. У кожному підкаталозі є скрипти, що зупиняють певні демони (назви таких скриптів починаються з букви K – kill) та скрипти, що стартують певні демони (їх назви починаються з букви S – start). Після початкової букви у назві скрипта іде число. Ці числа визначають порядок запуску скриптів – скрипти з меншими номерами запускають раніше. І нарешті, назва скрипта завершується змістовною назвою сервісу, що стартує або зупиняється.
Назви сервісів дозволяють системі зайвий раз не зупиняти та не запускати сервіси при переходах між рівнями. Так при переходах між рівнями зупиняють тільки ті сервіси, які не працюють на новому рівні та запускають тількі сервіси, які не є вже запущені.
З використанням inittab виконуються і деякі інші функції, наприклад, ініціалізація системи після завантаження.
si::sysinit:/etc/rc.d/rc.sysinit
Можливі значення режимів виконання наведені у таблиці
Режим |
Опис |
boot |
Виконується підчас завантаження |
bootwait |
Виконується підчас завантаження. Init очікує на завершення |
initdefault |
Рівень виконання за замовчуванням. Звичайно запустається одразу ж після завантаження |
ondemand |
Виконується для одного з рівнів виконання “по запиту” - a,b,c |
powerwait |
Виконується якщо зникло живлення. Система очікує завершення команди |
powerfail |
Виконується якщо зникло живлення. Система не очікує завершення |
powerokwait |
Виконується, якщо init повідомили, що живлення відновлено |
powerfailnow |
Виконується, якщо init повідомили, що зовнішнє джерело живлення (батарея) не має заряду |
resume |
Виконується, коли init отримує від ядра сигнал “Software suspend” |
sysinit |
Виконується підчас завантаження перед boot або bootwait |
respawn |
Рестартує сервіс, якщо його зупинено |
wait |
Стартує один раз при переході на рівень виконання. Очікує завершення |
once |
Стартує один раз при переході на рівень виконання. Не очікує завершення |
crtaltdel |
Виконується, якщо хтось на консолі натисне ctlr-alt-del |
Користувач може ініціювати перехід на потрібний рівень виконання з консолі командою
init N
де N – номер потрібного рівня
Аналіз та діагностика процесу початкового завантаження
Проаналізувати процес початкового завантаження можна з використанням лог-файлу завантаження командою dmesg
dmesg > bootloginfo
Після виконання цієї команди у біжучому каталозі сформується файл bootloginfo з діагностичною інформацією
Адміністрування
До операцій адміністрування системи можна віднести роботу з користувачами системи, визначення обмежень доступу до системних ресурсів, запуск періодичних процесів (напр резервного архівування), зміна конфігурації системи та ін. Всі операції з адміністрування виконує адміністратор системи – користувач з login- іменем root.