Вход в систему
РФЭИ/ИТ
Уровни выполнения Запуск системных служб Загрузка системы Этапы загрузки системы IT1100: Операционные системы UNIX
Схема ".d" Загрузка типичной системы на уровень выполнения 5

Уровни выполнения

В Linux схема начальной загрузки слегка сложнее, чем обычная .d. Связано это с тем, что одну и ту же систему в разных случаях бывает необходимо загружать с разным набором служб. Если, скажем, использование сети нежелательно, удобнее сказать что-то вроде «Система! Загружайся без сети!», чем вручную удалять стартовые сценарии всех предположительно сетевых служб из .d-каталога. Необходимость выбора также возникает, если компьютер используется в качестве рабочей станции с запуском графической среды и всего с нею связанного или в качестве стоечного сервера, управлять которым лучше с системной консоли.

Поэтому в Linux предусмотрено несколько вариантов начальной загрузки, называемых уровнями выполнения (run levels). Уровни выполнения нумеруются с 0 до 9:

  • Уровень 1 соответствует однопользовательскому режиму загрузки системы. При загрузке на уровень 1 не запускается никаких служб, и даже системная консоль, как правило, бывает доступна только одна, так что в системе может работать не более одного пользователя. В однопользовательском режиме изредка работает администратор - исправляет неполадки системы, изменяет ключевые настройки, обслуживает файловые системы.
  • Уровень 2 соответствует многопользовательскому режиму загрузки системы с отключенной сетью. В этом режиме не запускаются никакие сетевые службы, что, с одной стороны, соответствует строгим требованиям безопасности, а с другой стороны, позволяет запускать службы и настраивать сеть вручную.
  • Уровень 3 соответствует многопользовательскому сетевому режиму загрузки системы. Сеть при загрузке на этот уровень настроена, и все необходимые сетевые службы запущены. На этом уровне обычно работают компьютеры-серверы.
  • Уровень 5 соответствует многопользовательскому графическому режиму загрузки системы. На этом уровне обычно функционируют рабочие станции, предоставляя пользователям возможность работать с графической подсистемой X11. Сеть на этом уровне настроена, а вот список запущенных сетевых служб может быть меньше, так как рабочая станция не всегда выполняет серверные функции (хотя, безусловно, может).
  • Уровни 0 и 6 - специальные. Они соответствуют остановке и перезагрузке системы. В сущности, это удобные упрощения для действий, обратных загрузке на уровень: все службы останавливаются, диски размонтируются. В случае остановки даже электропитание можно отключать программно, если аппаратура позволяет, а в случае перезагрузки система идет на повторную загрузку.

Остальные уровни никак специально в Linux не описаны, однако администратор может использовать и их, определяя особый профиль работы системы. Переход с уровня на уровень выполняется очень просто: по команде init номер_уровня. На какой уровень загружаться при старте системы, написано в inittab (в поле действия должно быть написано initdefault, а в поле уровни - только одна цифра). Узнать текущий уровень выполнения можно с помощью команды runlevel:

[root@localhost root]# grep initdefault /etc/inittab
 id:3:initdefault:
[root@localhost root]# runlevel
 N 3

Пример 10.7. Задание и просмотр уровня выполнения

Уровень выполнения. Сохраненный профиль загрузки системы. В Linux реализован выполнением всех сценариев остановки и запуска служб из подкаталога rc.d каталога /etc или /etc/rc.d

Схема .d легко учитывает уровни выполнения. В каталоге /etc/rc.d заводится несколько .d-подкаталогов, соответствующих каждому уровню выполнения: /etc/rc.d/rc_уровень.d. Именно оттуда их запускает стартовый сценарий /etc/rc.d/rc:

[root@localhost root]# ls -F /etc/rc.d
 init.d/  rc.powerfail* rc0.d/ rc2.d/ rc4.d/ rc6.d/
 rc*      rc.sysinit*   rc1.d/ rc3.d/ rc5.d/ scripts/
[root@localhost root]# ls /etc/rc2.d
 K10power      K75netfs   S15random  S31klogd    S37gpm     S54sshd
 K44rawdevices K95kudzu   S30sound   S32hotplug  S40crond   S98splash
 K50xinetd     S10network S30syslogd S35keytable S41anacron S99local
[root@localhost root]# ls -l /etc/rc2.d/ K75netfs
 lrwxrwxrwx 1 root root 15 Nov 9 01:16 /etc/rc2.d/K75netfs ->
../init.d/netfs

Пример 10.8. Содержимое каталогов /etc/rc.d и /etc/rc.d/rc2.d

Переход с уровня на уровень должен сопровождаться не только запуском, но и остановкой служб. Это касается не только уровней 0 и 6, но и любых других. Например, при переходе с уровня 3 на уровень 2 необходимо остановить все сетевые службы. Поэтому схема .d была расширена: сначала с параметром stop запускаются сценарии, имена которых начинаются на K (Kill), а затем, с параметром start - те, имена которых начинаются на S (Start). В приведенном примере при переходе на уровень 2 останавливается несколько служб, в том числе сетевой метадемон (K50xinetd) и монтирование по сети удаленных файловых систем (K75netfs). Если при переходе с уровня на уровень некой службе не требуется менять своего состояния, сценарий не запускается вовсе. Так, при переходе с уровня 3 на уровень 2 сетевые настройки остаются активными, поэтому соответствующий сценарий (S10network), скорее всего, запущен не будет.

Долгое время считалось, что определение порядка загрузки - дело системного администратора, поэтому расставлять символьные ссылки в каталогах rc*.d приходилось вручную. Однако одно из другого не следует: можно предусмотреть и более простой способ наполнения этих каталогов ссылками. Один из способов такой: поставить в стартовый сценарий комментарий особого вида, в котором описать, на каких уровнях служба должна быть активизирована, и какой по порядку должна быть запущена и остановлена:

[root@localhost root]# grep chkconfig /etc/init.d/netfs
 # chkconfig: 345 25 75
[root@localhost root]# chkconfig --list netfs
 netfs       0:off  1:off  2:off  3:on  4:on  5:on  6:off
[root@localhost root]# ls /etc/rc.d/rc*.d/*netfs
 /etc/rc.d/rc0.d/K75netfs /etc/rc.d/rc3.d/S25netfs
 /etc/rc.d/rc6.d/K75netfs
 /etc/rc.d/rc1.d/K75netfs /etc/rc.d/rc4.d/S25netfs
 /etc/rc.d/rc2.d/K75netfs /etc/rc.d/rc5.d/S25netfs

Пример 10.9. Управление порядком выполнения стартовых сценариев

Здесь Иван использовал утилиту chkconfig, которая ищет в стартовом сценарии комментарий вида chkconfig: уровни вкл выкл, и самостоятельно проставляет ссылки в соответствии с этими полями: во всех каталогах, упомянутых в уровнях соответствующий netfs сценарий имеет вид Sвклnetfs, а во всех остальных - Kвыклnetfs. Эта же утилита позволяет добавлять и удалять службу на каждом уровне в отдельности или запрещать ее вовсе.

Схема ".d" Загрузка типичной системы на уровень выполнения 5
2012 © ООО «Территория Образования»
Сделано с помощью Circumflex