| Управление инициализацией системы |
|
Для начала давайте разберемся, как загружается Linux. Начнем с того момента, когда загрузчик BIOS нашел загрузочное устройство, например жесткий диск. Далее загрузчик BIOS считывает первый (нулевой) сектор и передает ему управление. На этом работа загрузчика BIOS заканчивается. В первом секторе находится главная загрузочная запись (Master Boot Record, MBR), состоящая из трех частей: первичного загрузчика, таблицы разделов диска (partition table) и флага загрузки. Итак, из первой части MBR вызывается первичный загрузчик. Действия этого загрузчика зависят только от него самого. Предположим, что у нас установлен загрузчик LILO — намного проще рассматривать работу загрузчика на конкретном примере. Загрузчик LILO состоит из двух частей: первая содержится в MBR, а вторая находится на диске в виде файла (файл /boot/boot.b). Задача первой части — запуск вторичного загрузчика (второй части), который и производит дальнейшую загрузку системы. Первая часть ничего не знает о файловых системах, поэтому местонахождение второй части записано в "физических координатах", т. е. явно указаны цилиндр, головка, сектор жесткого диска. Вторая часть загрузчика более интеллектуальна. Она уже "знает", что такое файловая система, а карта размещения файлов записана в файле /boot/map. Данный файл используется для поиска ядра и образа виртуального диска. Для чего нужен виртуальный диск? Представим, что мы еще не установили Linux, а только собираемся это сделать. Вставляем загрузочный диск, и загрузчик запускает не просто инсталлятор — ведь запускается на самом деле Linux, ведь ясно виден процесс загрузки ядра. А потом уже запускается программа установки. Но ведь ядру нужно откуда-то прочитать модули поддержки устройств и файловых систем? Ведь корневая файловая система еще не создана. Все эти модули и находятся на виртуальном диске. Виртуальный диск загружается в память, ядро монтирует его как обычную файловую систему, загружает с него все необходимые модули. После этого виртуальный диск размонтируется, а вместо него монтируется обычная корневая файловая система — это в случае нормальной загрузки, а не установки Linux. Для работы с виртуальным диском используется технология initrd (INITial Ram Disk). Файл образа виртуального диска находится в каталоге /boot и называется initrd-<версия ядра> . В процессе запуска ядра монтируется корневая файловая система и запускается демон init, который и выполняет дальнейшую инициализацию системы, а именно он читает конфигурационный файл /etc/inittab и запускает другие процессы, согласно инструкциям этого файла. Одна из главных инструкций /etc/inittab выглядит так: id: <число>- initdefault : Данная инструкция задает уровень запуска по умолчанию. Уровень запуска определяет, какие действия будут выполнены init (какие процессы будут запущены). Всего предусмотрено семь уровней запуска:
В большинстве случаев, в качестве уровня запуска по умолчанию устанавливается 3 или 5. Перейти на тот или иной уровень можно и после загрузки системы. Для этого используется команда: # init <уровеиь__запуска> Примечание Здесь и далее решетка (#) перед командой означает, что команда должна быть выполнена от имени пользователя root.
"Вычислив" уровень запуска, init поочередно запускает сценарии из каталога /etc/rc.d/rcX.d, где X — это номер уровня запуска. Если зайти в один из этих каталогов, например в /etc/re.d/rc3.d, то увидим ссылки формата S<номер><имя> Номер определяет порядок запуска сценария (например, S10network запустится раньше, чем S11internet), а имя — задает имя сценария. Сами сценарии находятся в каталоге /etc/re .d/init.d. Ссылки, начинающиеся на S — это ссылки запуска (от англ, start), при запуске соответствующих сценариев им будет передан аргумент start. Например, если init обнаружил в /etc/rc.d/rc3.d файл S10network, то он выполнит команду: /etc/re.d/init.d/network start Если имя ссылки начинается на букву К (от англ, kill), то это ссылка останова сервиса, например, KOlservice. Данная ссылка указывает на команду /etc/re.d/init.d/service stop Вы можете запустить любой сценарий из каталога initd непосредственно, передав ему параметры start (запуск), stop (останов) и другие (зависит от сервиса). А можете воспользоваться командой service: service <имя_сервиса> <start|stop|...>
Здесь ммя_сервиса — это имя файла в каталоге /etc/re.d/init.d
Related Articles
Set as favorite
Bookmark
Email This
Hits: 348 Комментарии (0)RSS feed CommentsНаписать комментарий |