Linux Процесс загрузки системы

При загрузке Linux мы видим много информации о загрузке.

Процесс загрузки Linux не так сложен, как можно представить. Его можно разделить на 5 этапов:

  • Загрузка ядра.
  • Запуск init.
  • Инициализация системы.
  • Настройка терминала.
  • Вход пользователя.

Типы программ init:

  • SysV:init, до CentOS 5, файл конфигурации: /etc/inittab.
  • Upstart:init, CentOS 6, конфигурационные файлы: /etc/inittab, /etc/init/*.conf.
  • Systemd:systemd, CentOS 7, конфигурационные файлы: /usr/lib/systemd/system, /etc/systemd/system.

Загрузка ядра

После включения компьютера BIOS сначала выполняет самотестирование при включении, а затем загружается в соответствии с загрузочным устройством, заданным в BIOS (обычно это жёсткий диск).

После того как операционная система берёт на себя управление оборудованием, она сначала читает файлы ядра в каталоге /boot.


Запуск init

Процесс init — это начальная точка всех системных процессов. Его можно сравнить с предком всех системных процессов. Без этого процесса ни один процесс в системе не запустился бы.

Программа init сначала должна прочитать файл конфигурации /etc/inittab.

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

Многие программы должны запускаться при загрузке. В Windows они называются "службами", а в Linux — "демонами".

Одна из главных задач процесса init — запускать эти программы, запускаемые при загрузке.

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

Linux позволяет назначать разные программы загрузки для разных ситуаций, что называется "runlevel". То есть во время загрузки уровень выполнения определяет, какие программы запускать.

В системах Linux есть 7 уровней выполнения:

  • Уровень выполнения 0: состояние останова системы. Уровень выполнения по умолчанию нельзя установить в 0, иначе система не сможет нормально загрузиться.
  • Уровень выполнения 1: однопользовательский рабочий режим, права root, используется для обслуживания системы, удалённый вход запрещён.
  • Уровень выполнения 2: многопользовательский режим (без NFS)
  • Уровень выполнения 3: полный многопользовательский режим (с NFS), после входа переходит в консольный режим командной строки.
  • Уровень выполнения 4: не используется системой, зарезервирован.
  • Уровень выполнения 5: консоль X11, после входа переходит в графический режим GUI.
  • Уровень выполнения 6: система нормально завершает работу и перезагружается. Уровень выполнения по умолчанию нельзя установить в 6, иначе система не сможет нормально загрузиться.

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

В конфигурационном файле init есть строка такого вида: si::sysinit:/etc/rc.d/rc.sysinit. Она вызывает и выполняет /etc/rc.d/rc.sysinit. rc.sysinit — это сценарий bash, который в основном выполняет работу по инициализации системы. rc.sysinit — важный сценарий, который должен выполняться первым на каждом уровне выполнения.

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

l5:5:wait:/etc/rc.d/rc 5

Эта строка означает запуск /etc/rc.d/rc с параметром 5. /etc/rc.d/rc — это Shell-сценарий, который принимает 5 в качестве параметра и выполняет все rc-сценарии автозагрузки в каталоге /etc/rc.d/rc5.d/. Сценарии автозагрузки в каталоге /etc/rc.d/rc5.d/ на самом деле являются файлами-ссылками, а не настоящими rc-сценариями автозагрузки. Настоящие rc-сценарии автозагрузки фактически размещены в каталоге /etc/rc.d/init.d/.

Эти rc-сценарии автозагрузки имеют схожее использование; обычно они принимают такие параметры, как start, stop, restart, status и т. д.

rc-сценарии автозагрузки в /etc/rc.d/rc5.d/ обычно представляют собой файлы-ссылки, имена которых начинаются с K или S. Сценарии автозагрузки, начинающиеся с S, будут запущены с параметром start.

Если найден соответствующий сценарий со ссылкой, начинающейся с K, и он уже находится в запущенном состоянии (отмечается файлами в /var/lock/subsys/), уже запущенные демоны сначала будут остановлены с параметром stop, а затем запущены повторно.

Это делается для того, чтобы при смене уровня выполнения init все связанные демоны были перезапущены.

Что касается того, какие демоны будут запускаться на каждом уровне выполнения, пользователи могут настроить их через chkconfig или «System Services» в setup.


Настройка терминалов

После завершения выполнения rc управление возвращается к init. На данный момент базовая системная среда уже настроена, а различные демоны также запущены.

Затем init открывает 6 терминалов, чтобы пользователи могли войти в систему. Следующие 6 строк в inittab определяют эти 6 терминалов:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

Из вышесказанного видно, что на уровнях выполнения 2, 3, 4 и 5 программа mingetty будет работать в режиме respawn. Программа mingetty может открывать терминалы и устанавливать режимы.

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


Вход пользователя

Вообще говоря, существует три способа входа пользователей в систему:

  • (1) Вход через командную строку
  • (2) Вход по SSH
  • (3) Вход через графический интерфейс

Для пользователей в графическом режиме с уровнем выполнения 5 вход выполняется через графический интерфейс входа. После успешного входа они могут сразу войти в оконные менеджеры, такие как KDE, Gnome и т. д.

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

Программа проверки учётной записи в Linux — это login. login получает имя пользователя, переданное mingetty, в качестве параметра имени пользователя.

Затем login анализирует имя пользователя: если имя пользователя не root и файл /etc/nologin существует, login выведет содержимое файла nologin и затем завершит работу.

Обычно это используется, чтобы запретить вход не-root пользователям во время обслуживания системы. Только терминалы, зарегистрированные в /etc/securetty, разрешены для входа пользователя root. Если этого файла не существует, пользователь root может войти с любого терминала.

Файл /etc/usertty используется для наложения дополнительных ограничений доступа на пользователей. Если этого файла не существует, других ограничений нет.


Переключение между графическим и текстовым режимами

Linux по умолчанию предоставляет шесть консольных терминалов командной строки для входа в систему.

По умолчанию мы входим в первое окно, то есть tty1. Шесть окон — это tty1, tty2 ... tty6. Вы можете нажать Ctrl + Alt + F1 ~ F6, чтобы переключаться между ними.

Если вы установили графический интерфейс, по умолчанию вы попадёте в графический интерфейс. В этот момент вы можете нажать Ctrl + Alt + F1 ~ F6, чтобы войти в один из интерфейсов командной строки.

Когда вы хотите вернуться в графический интерфейс из окна командной строки, просто нажмите Ctrl + Alt + F7.

Если вы используете виртуальную машину VMware, сочетания клавиш для переключения командных окон — Alt + Space + F1~F6. Если вы находитесь в графическом интерфейсе, нажмите Alt + Shift + Ctrl + F1~F6, чтобы переключиться в командное окно.


Выключение Linux

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

Правильный процесс выключения: sync > shutdown > reboot > halt

Команда выключения — shutdown. Вы можете выполнить man shutdown, чтобы просмотреть справочную документацию.

Например, вы можете выполнить следующую команду, чтобы выключить систему:

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

В заключение, подводя итог, будь то перезагрузка или выключение системы, сначала выполните командуsync, чтобы записать данные из памяти на диск.

Команды выключения включаютshutdown –h now halt poweroffи init 0, команды перезагрузки включаютshutdown –r now reboot init 6。


Справочные статьи:

Другие расширения