Опубликован: 22.06.2005 | Уровень: для всех | Доступ: платный | ВУЗ: Компания IBM
Лекция 10:

Этапы загрузки системы

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Уровни выполнения

В 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 10В некоторых дистрибутивах - в каталоге /etc/ . заводится несколько " .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 " ( K ill), а затем, с параметром " start " - те, имена которых начинаются на " S " ( S tart). В приведенном примере при переходе на уровень 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. Эта же утилита позволяет добавлять и удалять службу на каждом уровне в отдельности или запрещать ее вовсе.

Загрузка типичной системы на уровень выполнения 5

Итак, что же происходит после запуска init?

[root@localhost root]# grep rc /etc/inittab
 si::sysinit:/etc/rc.d/rc.sysinit
 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
[root@localhost root]# grep initdefault /etc/inittab
 id:5:initdefault:
Пример 10.10. Стартовые сценарии в /etc/inittab

Метод " sysinit " в inittab означает, что процесс запускается во время начальной загрузки системы, до перехода на какой-нибудь уровень выполнения. Следовательно, первым запускается сценарий /etc/rc.d/rc.sysinit. Он настраивает аппаратуру дисковых массивов, проверяет и монтирует дисковые файловые системы, инициализирует область подкачки, межсетевой экран - словом, делает все, без чего дальнейшая полноценная загрузка системы невозможна. Далее из строчки с " initdefault " init узнает, что уровень выполнения по умолчанию - пятый ( многопользовательский графический ), и выполняет все строки из inittab, в поле уровни которых есть 5. В частности, запускается сценарий rc с параметром 5 (l5:5:wait:/etc/rc.d/rc 5), который и выполняет необходимые действия из " .d "-каталога /etc/rc.d/rc5.d. Метод запуска rc - " wait ", так что init ждет, пока не выполнятся все стартовые сценарии, а потом продолжает разбор inittab:

[root@localhost root]# ls /etc/rc.d/rc5.d/
K10acpid    S10network  S30syslogd     S37gpm      S50xinetd
K20nfs      S13portmap  S31klogd       S40crond    S54sshd
K65apmd     S15random   S32hotplug     S41anacron  S56rawdevices
K86nfslock  S25netfs    S35keytable    S44xfs      S64power
S05kudzu    S30sound    S36update_wms  S45dm       S98splash
Пример 10.11. Профиль системы на уровне выполнения 5

Мефодий заметил, что сценарий K20nfs (с параметром " stop ") не выполнился: соответствующего сообщения на системной консоли не появилось. Беглый просмотр /etc/rc.d/init.d/nfs показал, что этот сценарий предназначен для запуска и остановки сервера сетевой файловой системы (NFS). Сервер используется на уровне 3, а на уровне 5 - нет, поэтому при переходе с 3 на 5 его следует останавливать. Поскольку во время начальной загрузки останавливать нечего, сценарий не выполнился.

Из служб, запускаемых именно на пятом уровне, примечателен шрифтовый сервер, под номером 44 (the X f ont s erver, xfs ) - программа, у которой графическая подсистема получает шрифты (нередко по сети; тогда такой сервер может быть один на несколько рабочих станций), и экранный диспетчер 11Не путать с диспетчером окон, описанным в лекции 15. , под номером 45 (the X d isplay m anager, xdm ) - программа, регистрирующая пользователя на манер login, с той разницей, что регистрация и запуск графических приложений могут происходить по сети с удаленного компьютера. Тут разрешилась еще одна загадка: вместо обычной виртуальной консоли и login, Мефодий нередко наблюдал окно графической подсистемы с надписью " Login:" и " Password:", а кое-где даже " Логин:", " Пароль:" и портрет самого пользователя! Оказывается, это были различные версии xdm. Дабы не забивать себе голову разрозненными сведениями, Мефодий решил до поры (до лекции 15) не использовать графическую среду и нажал Ctrl+Alt+F1, переключившись в текстовую консоль.

Текстовая консоль на пятом уровне доступна: записи вида 1:2345:respawn:/sbin/mingetty tty1 обычно включают 5 в поле уровни.

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Аягоз Имансакипова
Аягоз Имансакипова
Тимур Булатов
Тимур Булатов

С момента выхода курса прошло достаточно много времени, и хотелось бы понимать, насколько курс является актуальным на сегодняшний день.

Александр Гордеев
Александр Гордеев
Казахстан, Алматы, ТУРАН
Александр Даниленко
Александр Даниленко
Россия, Москва, 797, 1993