Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Процесс загрузки Linux - Процесс init

07 марта 2014

В этой статье описаны процессы, протекающие в период от запуска ядра до запроса данных для входа в систему. После запуска ядро временно может обратиться к корневому разделу лишь в режиме «только для чтения». В первую очередь ядро запускает программу /sbin/init.

В дальнейшем программа i nit отвечает за базовую конфигурацию системы (подключение файловых систем) и запуск многочисленных сетевых служб и демонов.

От конкретного дистрибутива зависит, как именно будет выполняться программа init. Правда, почти все дистрибутивы ориентированы на использование процесса System-V-Init, так как он обычно задействован и в других системах, основанных на UNIX. Отличия могут касаться того, какие файлы init в каких каталогах расположены, какими номерами и буквами обозначаются так называемые уровни запуска, какие конфигурационные файлы учитываются при запуске и т.д. В этом разделе мы кратко рассмотрим процесс Init-V. Детали, характерные для различных дистрибутивов, описаны в следующих разделах.

Особый случай (пока) представляют собой Fedora и Ubuntu: в обоих дистрибутивах система Init-V была частично заменена более современным методом Upstart (см. раздел 14.11). Поскольку в Upstart предусмотрен уровень совместимости для работы с Init-V и этот уровень активно используется, информация об Init-V, сообщаемая в данном разделе, применима также к Fedora и Ubuntu.

Обзор Init-V


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

1. GRUB или LILO загружает и запускает ядро.

2. Ядро запускает программу /sbin/init.

3. Программа init интерпретирует конфигурационный файл /etc/inittab.

4. Программа init выполняет сценарий для инициализации системы.

5. Программа init выполняет сценарий /etc/rc.d/rc или /etc/init.d/rc. Сценарий rc во многом различен в разных дистрибутивах. Он нужен для запуска файлов сценариев, находящихся в каталоге /etc/rcn .d или /etc/init.d/rcn .d (п в данном случае — уровень запуска, см. ниже). Кроме того, rc активизирует в большинстве дистрибутивов и графический индикатор загрузки, который показывает, насколько выполнен процесс Init-V.

6. Файлы сценариев из /etc/rcn.d или /etc/init.d/rcn.d запускают различные системные службы, в частности те, что отвечают за выполнение сетевых функций.

Уровень запуска



Сначала ядро запускает программу /sbin/init. При этом сообщаются все параметры загрузки ядра, которые еще не были интерпретированы (то есть все те параметры, которые ядро «не знает» и, соответственно, не может самостоятельно обработать). В результате этого Linux можно, например, запустить в однопользовательском режиме (подробности сообщаются на странице man init). Иными словами, init — это первый работающий процесс. Все остальные процессы запускаются либо процессом init непосредственно, либо его подпроцессами. При остановке компьютера процесс init последним завершает работу, обеспечивая правильное завершение всех остальных процессов.

Уровни запуска в Fedora, Red Hat, SUSE



Для понимания того, как работает System-V, нужно прежде всего усвоить, что такое уровень запуска. Уровни запуска описывают различные состояния, в которых может находиться операционная система. К сожалению, нумерация уровней запуска в различных дистрибутивах неодинакова. Как правило, значения уровней запуска в конкретном дистрибутиве документированы в /etc/inittab. В большинстве дистрибутивов (но не в Debian и Ubuntu!) значения уровней запуска таковы:
0 — остановка работы компьютера с выключением;

l и S — однопользовательский режим;

2 — многопользовательский режим без выхода в сеть и без NFS;

3 — многопользовательский режим с выходом в сеть, но без автоматического запуска X;

4 — обычно не применяется;

5 — многопользовательский режим с выходом в сеть и запуском системы X; установлен по умолчанию;

6 — остановка работы компьютера с перезагрузкой.

В некоторых системах существует различие между уровнями запуска 1 и S. При работе с такими системами выполняются специальные сценарии уровня запуска 1, позволяющие перейти с обычного уровня (2, 3 или 5) на уровень запуска однопользовательского режима. Напротив, сценарии уровня запуска S применяются лишь тогда, когда вам требуется активизировать уровень запуска однопользовательского режима сразу после загрузки (параметр ядра single).

Уровни запуска в Debian и Ubuntu



В дистрибутивах, построенных на основе Debian, уровни запуска 2-5 равноправны. На каждом их этих уровней запускается многопользовательская система с выходом в сеть и X. Стандартным уровнем запуска считается 2. Уровень запуска S не является уровнем в полном смысле этого слова, он просто применяется для инициализации компьютера сразу после запуска (еще до того, как будет активизирован какой-либо иной уровень). Сетевые функции активизируются в Debian и Ubuntu уже на этапе инициализации системы (то есть перед включением того или иного уровня запуска), следовательно, они доступны на всех уровнях запуска:

S — инициализация компьютера непосредственно после запуска;

0 — остановка работы компьютера с выключением;

1 — однопользовательский режим с доступом к сети;

2-5 — многопользовательский режим с доступом к сети и автоматическим запуском X;

6 — остановка работы компьютера с перезагрузкой.

Смена активного уровня запуска



Администратор может изменить уровень запуска с помощью команды i nit x, не останавливая работу системы. Здесь x — это цифра или буква, означающая уровень запуска. Например, бывает полезно изменить уровень запуска при проведении некоторых работ по техническому обслуживанию компьютера. При выполнении команды shutdown или нажатии Ctrl+Alt+Delete уровень запуска также изменяется, в результате чего происходит перезапуск компьютера.

Стандартный уровень запуска.

Стандартный уровень запуска определяется строкой initdefault в /etc/inittab. В большинстве современных дистрибутивов стандартным уровнем запуска является 5; в Debian и Ubuntu это уровень 2. В Ubuntu версии 6.10 до 9.10 стандартный уровень запуска определяется в /etc/inittab, в версии 9.10 и выше — в /etc/init/rc-sysinit.conf. Эти файлы вводят в состав системы Upstart.

Inittab



При запуске системы команда init управляется файлом /etc/inittab. Синтаксис записей осуществляется по следующей схеме:

id-code:runlevel:action:command

id-code состоит из двух символов, однозначно идентифицирующих строку; О runlevel указывает, на каком уровне запуска выполняется запись; О action содержит команду для init;

command указывает, какую программу или команду Linux следует запустить.

В табл. перечислены важнейшие ключевые слова для action (полное опи-саниедаетсяв man inittab).

Ключевые слова



ctrlaltdel — Указывает, как init должна реагировать на Ctrl+Alt+Delete

initdefault — Определяет стандартный уровень запуска для init

once — init выполняет указанную команду при смене уровня запуска

respawn — После окончания выполнения команды init снова ее запускает

sysinit — init один раз выполняет команду в процессе загрузки

wait — init ожидает окончания выполнения следующей команды

bootwait — init запускает команду в процессе загрузки и ожидает окончания выполнения следующей команды
В следующем листинге показан немного сокращенный файл inittab из Debian 5. Стандартный уровень запуска — 2. При обычном запуске системы init выполняет сценарные файлы rc.sysinit и команду гс 5. Наконец, в текстовых консолях l-6 запускается программа mingetty, обеспечивающая вход в систему (если вам нужно больше текстовых консолей, изменять их количество нужно именно здесь. Однако обратите внимание на то, что в большинстве дистрибутивов консоль 7 зарезервирована для X).

<code># Файл /etc/inittab в Debian 5

# Стандартный уровень запуска id:2:initdefault:

# Конфигурация и инициализация системы производится сразу после запуска компьютера si::sysinit:/etc/init.d/rcS

# Работа в однопользовательском режиме (параметр ядра su) —:S:wait:/sbin/sulogin

# Старт соответствующего уровня запуска 10:0:wait:/etc/init.d/rc О ll:l:wait:/etc/init.d/rc l l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 14:4:wait:/etc/init.d/rc 4 15:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6

# следующую строку не нужно использовать, она предусмотрена для аварийных ситуаций z6:6:respawn:/sbin/sulogin

# Реакция на Ctrl+Alt+Delete в текстовой консоли ca:12345:ctrlaltdel:/sbin/shutdown -tl -а -г now

# Реакция в случае перебоев с электропитанием (необходимо наличие источника бесперебойного питания)

pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop

# Запуск gettys (эмуляторов терминалов) для текстовых консолей l:2345:respawn:/sbin/getty 38400 ttyl 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6</code>


Изменение действия комбинации Ctrl+Alt+Delete. Большинство дистрибутивов по умолчанию сконфигурированы так, что сочетание клавиш Ctrl+Alt+Delete в текстовом режиме приводит к перезапуску компьютера. Если вы хотите, чтобы вместо этого компьютер выключался, укажите в команде shutdown в строке ca: параметр -h вместо -r. Если хотите вообще отключить это сочетание клавиш, поставьте перед строкой ca: символ комментария#.

Инициализация системы



Еще до того, как запустятся или завершат работу описанные далее файлы rc и runlevel-специфичные службы, то есть сразу после запуска компьютера, выполняется инициализация системы (строка si: в inittab). Название сценария зависит от дистрибутива:

<code>Debian, Ubuntu — /etc/init.d/rcS; О Red Hat, <a class="myClass" href="http://www.modx.cc/linux/zapusk-sistemyi-v-fedora/">Fedora</a> — /etc/rc.d/rc.sysinit;  SUSE-/etc/init.d/boot.</code>

В ходе инициализации системы решаются задачи, которые требуется выполнить только один раз, в начале сеанса работы с компьютером: О инициализация различных системных переменных (в том числе хост-имен и доменных имен); О активизация файловой системы /proc; О настройка даты и времени;

— настройка раскладки клавиатуры для текстовой консоли;
— запуск системы udev; О активизация RAID или EVM;
— перепроверка файловых систем;
— подключение корневого раздела заново, в режиме «для чтения и внесения изменений»;
— проверка файловой системы следующего раздела, подключение разделов;
— частичная (Fedora) или полная (Debian, Ubuntu) инициализация основных сетевых функций.

Обратите внимание — не все описанные здесь функции напрямую выполняются сценарием инициализации системы. Частично считываются и другие сценарные файлы. При этом их названия обычно записываются в форме. имя (поставив точку, мы гарантируем, что находящийся в этом месте файл будет прочтен и выполнен; затем продолжится выполнение сценария). В Debian и Ubuntu присутствует миниатюрный сценарий rcS, выполняющий все сценарные файлы /etc/rcS.d/S*.

SlOcheckroot.sh S36mountall-bootclean Sllhwclock.sh S36udev-mtab S12mtab.sh S37mountoverflowtmp
S18ifupdown-clean S39ifupdown S20module-init-too S40networking

S46mountnfs-bootcln S48console-screen S50alsa-utils S55bootmisc.sh S55urandom S70xll-common S75sudo

S99stop-bootlogd-s

S89anacron S89atd S89cron S99rc.local S99rmnologin dis S99stop-bootlogd
S43portmap


S44nfs-common

S45mountnfs.sh

S20samba S23ntp S24dhcdbd S24hal

S26network-rnanager S26network-manager-S30gdm
rc2.d/: (стандартный уровень запуска)

S051oadcpufreq SlOrsyslog S12acpid S12dbus

S14avahi-daemon S16ssh

S17rnysql-ndb-rngn
S19cpufrequtils
S19mysql

S20cups

S20exim4

S20kerneloops
S20nfs-common

S20nfs-kernel-serv

Сценарии Init-V для активизации уровней запуска


После инициализации системы активизируется стандартный уровень запуска в соответствии с /etc/inittab. Для всех действий, связанных с уровнем запуска, существуют собственные сценарные файлы. В зависимости от дистрибутива они могут находиться в каталоге /etc/init.d или /etc/rc.d/init.d. Чтобы достичь большей совместимости между дистрибутивами, лучше всего указывать оба пути в виде ссылок.

Для запуска сценария Init-V программа init выполняет сценарий /etc/rc.d/rc или /etc/init.d/rc. Сценарию rc передается желаемый уровень запускал. Сначала rc выполняет некоторые операции, нужные для инициализации. После этого выполняются все сценарные файлы rcn.d/K* необходимые для завершения процессов. Наконец, выполняются все файлы rcn.d/S*, требуемые для активизации новых процессов на том или ином уровне запуска.

Значительное достоинство этой (на первый взгляд непонятной) системы заключается в том, что вы можете с легкостью интегрировать новые системные процессы в процесс Init-V. Нужно просто скопировать сценарии rc для запуска и остановки процессов в правильные каталоги — именно это происходит при установке пакета, содержащего дополнительный демон. Следующая сводная таблица для Debian 5 демонстрирует, какие сценарные файлы выполняются для некоторых уровней запуска.

<code>user$ cd /etc/rc.d

user$ ls rcS.d/ rc2.d/ rc6.d/

rcS.d/: (Инициализация системы) SOlglibc.sh S02hostname.sh S02mountkernfs.sh S03udev

S04mountdevsubfs.sh S05bootlogd S30checkfs.sh

S05keymap.sh S30procps

S08hwclockfirst.sh S35mountall.sh

S18rnysql-ndb S20openbsd-inetd S30system-tools-backen

rc6.d/: (Завершение работы)

KOlgdm K20nfs-common K50alsa-utils S31umountnfs.sh

Kllanacron K20openbsd-inetd K63mountoverflowtmp S32portmap

Kllatd K21mysql K80nfs-kernel-serverS35networking

K14network-manager K22mysql-ndb K86avahi-daemon S36ifupdown

K14network-manager-disp K23mysql-ndb-mgm K90rsyslog S40umountfs

K19samba K23ntp S15wpa-ifupdown S60umountroot

K20exim4 K25hwclock.sh S20sendsigs S90reboot

K20kerneloops K30system-tools-ba S30urandom</code>


Если быть точным, в каталогах rcn.d находятся не сами сценарные файлы, а только ссылки на них. Преимущество этого метода заключается в том, что каждый сценарный файл можно использовать для нескольких уровней запуска и централизованно изменять. Сами сценарные файлы сохраняются в каталоге /etc/rc.d/init.d или /etc/init.d:

<code>root# cd /etc

root# ls -l rc2.d/S20cups

... rc2.d/S20cups -> ../init.d/cups
</code>

Номенклатура


Названия ссылок совсем не произвольны, хотя на первый взгляд и может сложиться такое впечатление. Начальная буква указывает, запускает сценарий процесс (S=start) или завершает его (K=kill). Ссылки S и К указывают на одни и те же файлы, но в зависимости от начальной буквы rc выполняет сценарий или с параметром start, или с параметром stop.

Указанный далее номер определяет очередность, в которой выполняются сценарные файлы. Например, для запуска большинства сетевых демонов требуется, чтобы сетевое соединение уже было налажено, после чего они запускаются сценарием network.

Как автоматически запускать демоны и завершать их работу



Многие сценарные файлы уровней запуска автоматически выполняются сценарием rc при включении компьютера или при изменении уровня запуска. При этом сообщается параметр start или stop, в зависимости от того, следует ли запустить или остановить соответствующую функцию.

Для того чтобы можно было выполнить автоматический запуск или остановку, требуется ссылка S или К на сценарий Init-V для соответствующего уровня запуска в каталоге rcn.d. Иными словами, если вы хотите, чтобы в дальнейшем определенная функция активизировалась автоматически, вам нужно создать такие ссылки. Соответственно, чтобы отменить автоматический запуск, следует удалить такие ссылки.


Как вручную запускать и останавливать демоны. Сценарные файлы уровней запуска можно выполнять и вручную. Например, следующая команда останавливает работу веб-сервера Apache:

root# /etc/init.d/samba stop


Во многих дистрибутивах также предусмотрены специальные команды для запуска и остановки работы демонов, избавляющие вас от излишней работы с клавиатурой. Например, service samba stop в Fedora или rcsamba stop в SUSE имеют то же значение, что и вышеуказанная команда.

Параметры сценариев Init-V


Большинству сценариев можно передать следующие параметры:
start — запускает ту или иную функцию;
stop — завершает функцию;
status — выводит краткое информационное сообщение о том, активна функция или нет;
reload — используется в том случае, если измененную конфигурацию требуется считать заново, не останавливая при этом демон;
restart — напротив, полностью останавливает демон, а потом снова его запускает; при этом разрываются все имевшиеся соединения с клиентами. С некоторыми демонами команды reload и/или restart не используются. В этом случае при работе со сценарием нужно сначала выполнить stop, а потом — start.

Оптимизация процесса Init-V



Вы, вероятно, уже поняли, что процесс Init-V достаточно сложен: в ходе этого процесса требуется запускать и останавливать многочисленные сценарии и программы. Еще несколько лет назад запуск системы мог занимать одну-две минуты. Однако в настоящее время в большинстве дистрибутивов с помощью разнообразных приемов удалось снизить это время примерно до полуминуты (при использовании современного оборудования). В этом разделе обобщены самые распространенные методы оптимизации загрузки системы.

Загрузка файлов «заранее». При каждом запуске с жесткого диска считыва-ются одни и те же файлы, в одинаковом порядке. При считывании файлов, конечно же, возникают небольшие временные промежутки (периоды простоя системы). Чтобы ускорить такой процесс считывания, некоторые дистрибутивы в начале выполнения процесса Init-V запускают фоновую программу, считывающую все файлы, указанные в специальном списке. Если какой-либо файл действительно понадобится в ближайшее время, он сразу помещается в кэш. В Fedora за такую операцию отвечает программа readahead, в Ubuntu — одноименная программа, которая, правда, несколько иначе интегрирована в систему. В SUSE применяется программа preload.

Распараллеливание. Обычно процесс Init-V протекает последовательно, то есть сценарии Init-V обрабатываются один за другим. Вот почему так происходит: невозможно подключить к файловой системе каталог NFS, пока не инициализированы сетевые функции. Кроме того, практически невозможно обратиться к файлам каталога NFS до того, как этот каталог будет интегрирован в файловую систему. Но не все сценарии Init-V зависимы друг от друга. Так, например, вы вполне можете параллельно запустить функции настройки сети и инициализацию печати, почтового сервера и веб-сервера. Поэтому в некоторых дистрибутивах предпринимаются попытки параллельно выполнять те сценарии Init-V, которые не зависят друг от друга.

Более ранний запуск графической системы X. Раньше было принято запускать систему X ближе к концу процесса Init-V. Но в наши дни система X запускается еще до того, как завершится основная инициализация оборудования. Ранний запуск X является в определенной степени частным случаем распараллеливания процесса Init-V.

Будущее процесса Init-V. Наряду с принятием вышеописанных мер, которые в значительной степени соответствуют концепции Init-V, также имеются планы совершенно по-новому организовать весь процесс запуска. В хороших идеях недостатка нет, однако все предложения касаются сетевых служб, управляемых процессом Init-V, соответственно, необходимо создать новые сценарии для запуска и остановки программ.
Читайте так же:
Upstart






Подпишитесь на рассылку! Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать