Чтение онлайн

ЖАНРЫ

Linux: Полное руководство

Аллен Питер В.

Шрифт:

♦ семь уровней выполнения, обозначаемых номерами с 0 до 6;

♦ особый уровень S или s — однопользовательский;

♦ уровни по требованию (ondemand) А, В и С — фиктивные: при переходе на эти уровни запускаются приписанные к ним процессы, но текущий уровень выполнения не меняется.

Термин «уровень выполнения» унаследован от тех времен, когда система была обязана проходить уровни последовательно, от низшего к высшему при загрузке и обратно при выключении. Сейчас их можно переключать в любом порядке. Для переключения на уровень n нужно от имени суперпользователя ввести команду

# telinit n

Эта команда посылает соответствующий сигнал процессу init (tell init). Ее исполняемый файл представляет собой символическую ссылку на

/sbin/init
, так что вместо нее можно
отдавать просто команду
init
. При этом не будет запущена копия процесса init: стартующий процесс первым делом проверяет свой PID и, если тот не равен 1, просто передает сообщение настоящему процессу init.

Запустив все процессы, приписанные к текущему уровню выполнения, init засыпает до получения сигнала о завершении дочернего процесса, отключении питания или требовании переключить уровень. Тогда он просыпается, перечитывает свой конфигурационный файл и, если нужно, выполняет записанные в нем инструкции. Чтобы заставить его перечитать измененный вами

/etc/inittab
, не дожидаясь трех вышеуказанных событий, введите команду

# telinit q

Важно понять, что уровень выполнения — это программная абстракция, аппаратура ни о каких уровнях не знает. Поэтому в разных реализациях Linux (разных дистрибутивах) одному уровню могут соответствовать разные конфигурации системы. Следующие уровни используются в дистрибутивах, основанных на Red Hat:

♦ 0: Останов системы.

♦ 1: Однопользовательский режим. То же, что уровень S.

♦ 2: Многопользовательский режим без поддержки сети.

♦ 3: Полный многопользовательский режим.

♦ 4: Не используется.

♦ 5: Графический режим с X11.

♦ 6: Перезагрузка.

В однопользовательском режиме никакие службы не стартуют: только грузится ядро, монтируется корневая файловая система и запускается командный интерпретатор. На этом уровне не нужен даже файл

/etc/inittab
, повреждение которого означает невозможность загрузиться на любом другом рабочем уровне. Этот уровень обычно использует администратор для аварийно-восстановительных работ.

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

Конфигурационный файл /etc/inittab

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

id:3:initdefault

Обычно в качестве уровня по умолчанию выбирают 3 (полнофункциональный многопользовательский текстовый режим) или графический 5 (запускается X Window и выдается графическое приглашение для входа в систему). Если оставить поле уровня пустым, то init переспросит значение в процессе загрузки. Если указать в поле уровня несколько значений, то сработает наибольшее. Уровни 0 (останов) и 6 (перезагрузка) указывать нельзя.

Следующие строки имеют формат:

идентификатор:уровни_выполнения:действие:запускаемый_процесс

♦ Идентификатор — это уникальная последовательность из четырех символов (в старых дистрибутивах — двух).

♦ Уровни_выполнения: перечень уровней выполнения (номера без каких-либо разделителей), для которых будет выполнено указанное действие. Например, значение 2345 требует выполнить действие на уровнях 2, 3, 4 и 5. Здесь можно указывать также уровни по требованию (ondemand) А, В и С.

♦ Действие: одно из действий, перечисленных в таблице 9.1.

♦ Запускаемый_процесс: процесс, над которым производится действие. Это может быть исполняемый файл или сценарий.

Действия над процессами, задаваемые а файле /etc/inittab Таблица 9.1

Действие Описание
respawn В случае завершения процесс будет перезапущен
wait Процесс будет запущен при переключении на любой из указанных уровней, и init будет ждать его завершения
once При переключении на любой из указанных уровней процесс будет запущен только однажды
boot Процесс будет запущен во время загрузки системы. Поле «уровни_выполнения» игнорируется
bootwait То же, что и boot, но init
ждет завершения процесса
off Не выполняет никаких действий
ondemand Процесс выполняется в режиме по требованию, то есть, он будет запущен при переключении на уровни a, b или с
initdefault Определяет уровень выполнения по умолчанию
sysinit Процесс запускается во время загрузки системы до любых процессов, стартующих через boot или bootwait
powerwait Процесс будет запущен, когда исчезнет напряжение в сети. Естественно, для корректной работы этой записи нужен источник бесперебойного питания, от которого система и получит уведомление об исчезновении напряжения; init будет ждать завершения этого процесса
powerfail То же, что и powerwait, но init не будет ждать завершения процесса
powerokwait Процесс запускается по получении init сигнала о восстановлении питания
powerfailnow Процесс запускается, когда источник бесперебойного питания подает сигнал о том. что его батареи почти разряжены
ctrlaltdel Процесс запускается при получении init сигнала INT. посланного нажатием комбинации клавиш Ctrl+Alt+Del. Обычно это процесс перезагрузки, выключения или перехода в однопользовательский режим.
kbrequest Процесс запускается при получении init сигнала, посланного нажатием «специальной» комбинации клавиш. Назначить клавишам специальное значение можно с помощью утилит из пакета kbd

Сценарий, помеченный действием sysinit, выполняется во время запуска системы, однократно, вне зависимости от запрошенного уровня. Затем запускаются процессы, помеченные действиями boot и bootwait.

На данном этапе загрузки системы происходят следующие действия по инициализации, результат которых необходим на любом уровне выполнения:

1. Устанавливается имя машины (hostname).

2. Конфигурируются параметры ядра.

3. Устанавливаются раскладка клавиш и системный шрифт,

4. Активируются разделы подкачки.

5. Корневая система проверяется программой fsck. Если будут найдены ошибки, которые невозможно исправить автоматически, будет запрошен пароль администратора для входа в административный режим, что равноценно переходу на уровень выполнения 1. В этом режиме вы запустите программу fsck с аргументом «/», который означает проверку корневой файловой системы. После исправления всех ошибок введите команду

exit
для перезагрузки системы. Если программа fsck ошибок не обнаружила, файловая система монтируется в режиме чтение/запись.

6. Проверяются зависимости модулей ядра.

7. Выполняется проверка других файловых систем.

8. Монтируются локальные файловые системы.

9. Включаются квоты.

10. Подключается (не активизируется!) раздел подкачки. С этого момента система начинает использовать раздел подкачки.

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

В процессе развития UNIX-подобных ОС выделились две основных системы инициализации (набора сценариев загрузки). Одна была разработана в рамках ОС BSD (Berkeley Software Distribution) Калифорнийского университета, от которой произошли бесплатная FreeBSD и коммерческая SunOS. Другая применяется в классической System V от AT&T и ее потомках, среди которых UnixWare, IRIX, HP-UX и Solaris. ОС Linux заимствовала удачные решения с обеих эволюционных ветвей, и в результате часть дистрибутивов следует в инициализации стилю BSD (Slackware, CRUX, Gentoo), а часть (Red Hat-подобные) — стилю System V.

Инициализация в стиле BSD

Для этого стиля характерно наличие конфигурационного файла стартовых сценариев

/etc/rc.conf
. Уровней выполнения как таковых в BSD и ориентированных на нее реализациях Linux нет, вместо них вводится понятие режима — группы процессов, объединенных общей функциональностью. Режимов обычно два: однопользовательский и многопользовательский. Каждый режим запускается своим сценарием. Файлы этих сценариев обычно находятся в
/etc
и называются
rc.*
(рис. 9.1).

Поделиться с друзьями: