Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

Запуск уровней в Linux

Условие: загрузка Linux
Уровень выполнения — это состояние init и всей системы, которое определяет, какие системные службы работают. Уровни запуска обозначены номерами. Некоторые системные администраторы используют уровни выполнения, чтобы определить, какие подсистемы работают, например, работает ли X, работает ли сеть и так далее.

  • Всякий раз, когда загружается система LINUX, сначала запускается процесс init, который фактически отвечает за запуск других сценариев запуска, которые в основном включают в себя инициализацию вашего оборудования, запуск сети, запуск графического интерфейса.
  • Теперь init сначала находит уровень запуска системы по умолчанию, чтобы он мог запускать сценарии запуска, соответствующие уровню выполнения по умолчанию.
  • Уровень выполнения можно просто представить как состояние, в которое входит ваша система, например, если система находится в однопользовательском режиме, она будет иметь уровень запуска 1, а если система находится в многопользовательском режиме, она будет иметь уровень запуска 5 .
  • Другими словами, уровень запуска можно определить как предварительно заданное однозначное целое число для определения рабочего состояния вашей операционной системы на основе Linux или UNIX. Каждый уровень выполнения обозначает свою конфигурацию системы и обеспечивает доступ к различным комбинациям процессов .

Здесь важно отметить, что существуют различия в уровнях выполнения в зависимости от операционной системы. Стандартное ядро LINUX поддерживает эти семь различных уровней запуска:

  • 0 — Остановка системы. Система может быть безопасно отключена без активности.
  • 1 — однопользовательский режим.
  • 2 — Многопользовательский режим без NFS (сетевая файловая система).
  • 3 — Многопользовательский режим в интерфейсе командной строки, а не в графическом интерфейсе пользователя.
  • 4 — Определяется пользователем.
  • 5 — Многопользовательский режим в графическом интерфейсе пользователя, и это стандартный уровень выполнения для большинства систем на основе LINUX.
  • 6 — перезагрузка, которая используется для перезагрузки системы.

По умолчанию большая часть системы на основе LINUX загружается на уровень запуска 3 или уровень запуска 5.
В дополнение к стандартным уровням выполнения пользователи могут изменять предустановленные уровни выполнения или даже создавать новые в соответствии с требованиями. Уровни запуска 2 и 4 используются для определяемых пользователем уровней запуска, а уровни запуска 0 и 6 используются для остановки и перезагрузки системы.

Очевидно, что стартовые сценарии для каждого уровня выполнения будут разными при выполнении разных задач. Эти стартовые сценарии, соответствующие каждому уровню выполнения, можно найти в специальных файлах, находящихся в подкаталогах rc .
В каталоге /etc/rc.d будет либо набор файлов с именами rc.0, rc.1, rc.2, rc.3, rc.4, rc.5 и rc.6, либо набор каталогов названы rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d и rc6.d.
Например, уровень запуска 1 будет иметь свой стартовый скрипт либо в файле /etc/rc.d/rc.1, либо в любых файлах в каталоге /etc/rc.d/rc1.d.

Изменение уровня выполнения

init — это программа, отвечающая за изменение уровня выполнения, который можно вызвать с помощью команды telinit .

Например, чтобы изменить уровень запуска с 3 на уровень запуска 5, который фактически позволит запускать графический интерфейс в многопользовательском режиме, команду telinit можно использовать как:

ПРИМЕЧАНИЕ . Изменение уровней выполнения является задачей для суперпользователя, а не обычного пользователя, поэтому для успешного выполнения вышеуказанной команды telinit необходимо войти в систему как суперпользователь, или вы можете использовать команду sudo как:

Уровень запуска по умолчанию для системы указан в файле / etc / initab, который будет иметь идентификатор записи : 5: initdefault, если для уровня запуска по умолчанию задано значение 5 или будет иметь идентификатор записи : 3: initdefault, если уровень запуска по умолчанию установлен на 3 ,

Нужно изменить уровень запуска

  • Может возникнуть ситуация, когда вы можете столкнуться с проблемами при входе в систему, если вы не помните пароль или из-за поврежденного файла / etc / passwd (есть все имена пользователей и пароли), в этом случае проблему можно решить. загрузившись в однопользовательском режиме уровня запуска 1.
  • Вы можете легко остановить систему, изменив уровень запуска на 0, используя telinit 0 .

Последовательность загрузки Linux

[Disclaimer: Данная статья была переведена в рамках «Конкурса на лучший перевод статьи» на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]

Последовательность загрузки Linux системы состоит из следующих этапов:

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

Как правило это:

  • Привод CD-ROM
  • Жёсткий диск
  • Дисковод (используются всё реже)

Список зависит от возможностей конкретного BIOS’а, а также вашего оборудования.

Приоритет загрузки может быть изменён в BIOS’е. Войти в меню настройки BIOS’а, как правило, можно нажав Del, F1, F2 или F10 во время загрузки компьютера.

Первый сектор загружаемого устройства хранения данных зарезервирован под главную загрузочную запись. Когда происходит загрузка с устройства, BIOS загружает и исполняет загрузчик операционной системы (boot loader), находящийся в MBR.

В большинстве случаев загрузчик достаточно сложен и не может вместиться в 512 байт отведённые MBR. В этом случае в MBR находится так называемый stage1, программа которая просто загружает программу второго этапа загрузки операционной системы — stage2 (иногда в качестве stage2 загружается загрузочный сектор активного раздела, boot manager или программа авторизации и защиты доступа).

В частности, stage2 загрузчика GRUB считывает данные из файла /boot/grub/grub.conf (или /boot/grub/menu.lst, в зависимости от версии), который содержит список всех доступных операционных систем и их параметры загрузки. После этого на экран выводится список операционных систем из которого пользователь выбирает ОС для загрузки.

В некоторых случаях stage1 загрузчика GRUB (GRand Unified Bootloader) производит загрузку stage1.5 код которого находится в первых тридцати килобайтах устройства хранения данных следующих сразу за MBR, и уже stage1.5 производит загрузку stage2.

Когда stage2 получает управление, на экран выводится (псевдо)графическое меню для выбора пользователем ОС для загрузки. Стоит отметить, что параметры загрузки могут быть изменены из этого же меню, что позволяет восстановить систему после того как menu.lst или grub.conf были случайно испорчены.

Как только параметры загрузки были выбраны, GRUB загружает выбранное ядро в память и передаёт управление ядру, которое уже само продолжает загрузку системы. Также GRUB может передать управление не ядру, а другому загрузчику, используя так называемую цепную загрузку (chain loading), например загрузчику ОС не поддерживающей стандарт Multiboot.

В свою очередь, ядро проверяет конфигурацию оборудования, инициализирует устройства и запускает initrd (опционально), после чего монтирует с устройство указанное в параметрах загрузки как «root» как корневую файловую систему.

Файловая система устройства определяется автоматически. Если по каким либо причинам монтирование не удаётся, система выдаёт kernel panic и загрузка останавливается.

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

init — это последний шаг в последовательности загрузки системы. init является родителем (или же более далёким предком) для всех процессов исполняемых в системе. Этот процесс запускается первым в системе и его запуск производится непосредственно ядром. Он же запускает все системные процессы так как это указано в /etc/inittab.

Покуда система работает, init не будет завершён. Стоит отметить что init — пользовательский процесс, а не системный, не смотря на то что он запущен от root’а.

Каждая запись в /etc/inittab содержит так называемый «уровень запуска» для процесса, т.е. информацию о том на каком уровне запуска системы данный процесс должен быть запущен.

В Linux системах существует семь возможных значений для уровня запуска: от 0 до 6 включительно:

  1. Останов системы
  2. Однопользовательский режим
  3. Определяется пользователем, как правило это многопользовательский режим без поддержки сети и графической оболочки
  4. Многопользовательский режим без графической оболочки
  5. Определяется пользователем, как правило, не используется
  6. Многопользовательский режим с графической оболочкой
  7. Перезагрузка

Основываясь на текущем уровне запуска, init запускает скрипты находящиеся в поддиректориях /etc/rc.d/, для каждого уровня запуска существует своя поддиректория, от /etc/rc.d/rc0.d до /etc/rc.d/rc6.d.

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

Уровень запуска по умолчанию определяется записью в /etc/inittab:

Текущий уровень запуска может быть изменён путём вызова:

Где # — желаемый уровень запуска. Т.е. вызов «/sbin/telinit 6» приведёт к перезагрузке системы.

Если Вам понравилась статья, проголосуйте за нее

Голосов: 12 Голосовать

OpenSource в заметках

В Linux службами называют приложение или набор приложений, которые запускаются и выполняют свою работу в фоновом режиме. С некоторыми вы можете быть знакомы, например такими, как Apache или MySQL, в то время как о других вы можете вообще не догадываться, хотя они и выполняют важные задачи в вашей системе. Как же узнать, какие службы работают в вашей системе и, что более важно, как самостоятельно настраивать работу собственных?

System V vs. BSD

В этой статье я рассматриваю так называемый System V стиль запуска системы и дистрибутивы, использующие этот стиль, поскольку в Linux он наиболее распространён. Другим популярным стилем запуска является BSD (Berkeley Software Distribution). В чём же между ними разница? Если совсем кратко, то в BSD отсутствуют уровни запуска системы и System V к этом смысле является более гибкой, предоставляя администратору больше возможностей по организации процесса загрузки системы.

Львиная дола дистрибутивов Linux хранят сценарии инициализации (rc-сценарии) в каталогах /etc/rc1.d, /etc/rc2.d и т. д., в то время как BSD-системы размещают rc-сценарии в каталоге /etc/rc.d. Процесс загрузки Slackware похож на BSD, хотя в Slackware есть уровни запуска и она является System V-совместимой, начиная с версии 7.

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

Когда вы включаете компьютер, одним из первых запускается загрузчик, обычно это LILO или GRUB. Далее, загрузчик загружает ядро операционной системы. После этого ядро запускает процесс init, который, в свою очередь, считывает файл /etc/inittab, чтобы определить уровень запуска системы по умолчанию. Этот уровень и определяет дальнейшую конфигурацию загрузки вашей системы. После того, как демон init определяет уровень запуска, он ищет файлы сценариев, определённые для данного уровня, затем выполняет их.

Давайте взглянем на то, как система запускается и рассмотрим поближе содержимое каталога /etc/rc.d. В этом каталоге вы найдёте файлы с именами rc.0, rc.1, rc.2, rc.3, rc.4, rc.5, и rc.6, или же набор каталогов с именами rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, и rc6.d. Также, вы должны найти файл /etc/inittab. Всё перечисленное система использует на стадии загрузки для запуска служб.

Если вы посмотрите внутрь файла /etc/inittab, вы обнаружите в нём примерно следующее:

id:4:initdefault:1
0:0:wait:/etc/rc.d/rc.01
6:6:wait:/etc/rc.d/rc.6x
1:4:wait:/etc/rc.d/rc.4

В процессе загрузки система использует эту информацию для того, чтобы определить уровень загрузки по-умолчанию, а также перечень файлов, используемых этим уровнем. В приведённом примере уровнем загрузки по-умолчанию назначен 4-й, а файлы, участвующие в нём, расположены в каталоге /etc/rc.d/rc.4

Что же такое уровень запуска? Вы можете подумать, речь идёт о каких-то уровнях, через которые система проходит в процессе загрузки. Это не совсем так. Представляйте себе уровень запуска, как некую точку, в которую входит система, загружаясь. Уровень запуска с номером 1, как правило, определяет наиболее простую однопользовательскую конфигурацию системы без графической оболочки и поддержки сети. А, например, уровень 5 загружает систему в многопользовательском режиме, с графической оболочкой и сетевой поддержкой. Уровни 0 и 6 используются при останове или перезагрузке системы соответственно.

Однако, существуют определённые отличия в разных дистрибутивах. Например, Fedora на 5-м уровне запускает графический логин-менеджер, в то время как Slackware делает это на 4-м. Так что, проконсультируйтесь с документацией к используемому дистрибутиву, прежде чем будете вносить какие-либо изменения. Приведённая ниже таблица отображает «традиционное» использование уровней запуска, а также использование их в некоторых популярных дистрибутивах. Взято из книги «Linux — The Complete Reference» (R.Peterson, Osbourne/McGraw-Hill).

Как вы видите, различия в разных дистрибутивах хоть и небольшие, но существенные. Одно в них одинаково: если вы хотите изменить уровень запуска системы, вы должны иметь права root, чтобы отредактировать файл /etc/inittab.

Зачем вам может понадобиться изменить уровень запуска? В повседневной работе обычно используют многопользовательский текстовый или графический режим. Но в некоторых случаях, когда возникают какие-то неполадки в системе, нужен однопользовательский режим, в котором бы не запускались автоматически какие-то службы, вероятно вызывающие проблемы. Уровни 0 и 6 никогда не должны использоваться в качестве уровней по умолчанию, ведь вам не нужно, чтобы система была постоянно выключена или находилась в состоянии перезагрузки?

Изменить уровень запуска вы можете в том числе и при запущенной системе при помощи команды:

На основе номера уровня запуска программа init принимает решение, какой набор сценариев из каталога /etc/rc.d ей выполнять. Например, если уровень запуска равен 4, то будет запущен скрипт /etc/rc.d/rc.4 или же все скрипты из каталога /etc/rc.d/rc4.d. Давайте взглянем на пример rc.d-сценария. Ниже приведён сценарий rc4.d из Slackware 10.2.

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

В других дистрибутивах, таких как RedHat или Debain, вы обнаружите, что что rc-сценарии являются символическими ссылками на файлы в каталоге /etc/init.d — общее хранилище всех rc-сценариев. Так что, если вы создадите свой собственный rc-скрипт, разместите его в /etc/init.d, а затем сделайте на него символическую ссылку из каталога нужного уровня запуска (или из файла сценария уровня запуска, в зависимости от того, какой механизм используется в вашей системе).

Например, в Debian уровнем запуска по умолчанию является второй. Если в вашей системе работает Apache 2, то вы можете найти его rc-сценарий в файле /etc/init.d/apache2 и символическую ссылку с именем S91apache2 на этот файл из каталога /etc/rc2.d. Наличие этой ссылки обеспечивает запуск Apache 2 на втором уровне запуска системы, но только после тех сервисов, номера в именах файлов символических ссылок которых меньше 91-го.

Когда система выключается или перезагружается, используются символические ссылки из каталогов /etc/rc0.d и /etc/rc6.d соответственно. Однако имена этих ссылок начинаются с буквы «K», а не «S», что сообщает rc-сценариям о необходимости завершить работу процессов.

Если всё сказанное звучит для вас слишком сложно, вы можете использовать файл /etc/rc.d/rc.local для собственных нужд. Этот скрипт запускается после всех rc-сценариев, но до появления приглашения входа в систему. По умолчанию он выглядит примерно так:

Вы можете дополнить этот скрипт вызовами нужных вам сценариев. Например:

Или же добавить запуск программ:

Однако имейте ввиду, что в некоторых дистрибутивах, таких как Debian и основанных на нём, не стоит использовать сценарий /etc/rc.d/rc.local. Обратитесь к Debian FAQ, если у вас возникла необходимость в настройке собственного сценария, выполняющегося при загрузке системы.

И напоследок. Если вы добавляете в систему сценарий запуска чего-либо, то не забывайте и о сценарии останова этого при помощи скриптов в каталогах /etc/rc0.d и /etc/rc6.d. Таким образом вы сможете гарантировать то, что ваши запущенные сервисы будут корректно остановлены и не создадут неопределённого состояния, могущего помешать их запуску при следующем старте системы.

Также имейте ввиду, что некоторые дистрибутивы имеют специальные средства для обслуживания сценариев запуска. Например, в RedHat и Fedora используется программа chkconfig, в Debian — update-rc.d.

Я надеюсь, что этот краткий обзор помог вам понять, как работают rc-сценарии и как при помощи них управлять службами, работающими в вашей системе. Теперь, в случае необходимости, вы можете создавать собственные rc-скрипты, а также находить и отключать ненужные вам, чтобы ускорить запуск системы и снизить её загрузку.

Исследуем процесс загрузки Linux

(C) В.А.Костромин, 2007
(версия файла от 03.10.2007 г.)

Этап 5: Процесс init и файл /etc/inittab

Как было показано в предыдущем разделе, если в параметре начальной загрузки «init=» не задан запуск какой-то другой программы, после монтирования корневой файловой системы в режиме «только для чтения» ядро запускает процесс init , который, как известно, является родоначальником всех других процессов в Linux. Сам по себе init в принципе ничем не отличается от других программ в системе Linux, просто это первая (и единственная) программа, которая запускается непосредственно ядром, все остальные процессы являются потомками процесса init. Файл программы init вы можете найти в каталоге /sbin среди других исполняемых файлов.

Init отвечает за продолжение процедуры загрузки, и перевод системы от начального состояния, возникающего после загрузки ядра, в стандартное состояние обработки запросов многих пользователей. Основная задача, которая стоит перед init, заключается в том, чтобы запускать в определенной последовательности другие программы в процессе загрузки системы и останавливать процессы в случае переключения уровня выполнения (в частности, при остановке системы). Init выполняет еще массу различных операций, необходимых для дальнейшей работы системы: проверку и монтирование файловых систем, запуск различных служб (демонов), запуск процедур логирования, оболочек пользователей на различных терминалах и т.д. Но, прежде чем рассматривать работу процесса init более детально, нужно сказать несколько слов о стилях загрузки и так называемых «уровнях выполнения».

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

Уровни выполнения (run levels) – это просто несколько стандартных вариантов загрузки системы, каждый из которых определяет перечень действий, выполняемых процессом init , и состояние системы после загрузки, т. е. конфигурацию запущенных процессов. Уровень выполнения идентифицируется одним символом. В большинстве дистрибутивов ОС Linux используется 6 основных уровней выполнения. В следующей таблице показано, как эти уровни используются в дистрибутивах Slackware и Red Hat:

Как видите, уровни 0, 1 и 6 зарезервированы для особых случаев. Относительно того, как использовать уровни со 2 по 5, единого мнения не существует. Некоторые системные администраторы используют разные уровни для того, чтобы задать разные варианты работы, например, на одном уровне запускается графический режим, на другом работают в сети и т. д. Вы можете сами решить, как использовать разные уровни для создания разных вариантов загрузки. Но для начала проще всего воспользоваться тем способом определения разных уровней, который был задан при установке.

Уровень выполнения может быть задан как одна из опций, передаваемых ядру загрузчиком. Обычно единственной причиной, по которой уровень загрузки может быть задан как аргумент при загрузке, является необходимость запуска системы в однопользовательском режиме (уровень выполнения 1) для выполнения каких-то административных задач или в случае повреждения диска. Но если уровень выполнения не задан как опция загрузки, то init будет загружать систему на уровень, заданный в файле /etc/inittab .

Если вам нужно узнать, на каком уровне выполнения работает ваша система, то можно воспользоваться командой runlevel. Будучи запущенной без параметров, она сообщает предыдущий и текущий уровень выполнения в виде двух цифр (лучше сказать символов, потому что существуют уровни S и s), разделенных пробелом. Если уровень выполнения не изменялся, то первый символ (идентифицирующий предыдущий уровень) примет значение N.

Изменять уровень выполнения в в работающей системе можно с помощью команды telinit. Естественно, что для ее запуска нужно иметь права суперпользователя. Но об этой команде мы поговорим чуть позже, а пока давайте посмотрим что из себя представляет файл /etc/inittab .

5.2. Файл inittab

Конфигурационный файл /etc/inittab состоит из отдельных строк. Если строка начинается со знака # или пуста, то она игнорируется. Все остальные строки состоят из 4 полей, разделенных двоеточиями:

  • id — идентификатор строки. Это произвольная комбинация, содержащая от 1 до 4 символов. В файле inittab не может быть двух строк с одинаковыми идентификаторами;
  • runlevels — уровни выполнения, на которых эта строка будет задействована. Уровни задаются цифрами или буквами без разделителей, например, 345;
  • process — процесс, который должен запускаться на указанных уровнях. Другими словами в этом поле указывается имя программы, вызываемой при переходе на указанные уровни выполнения;
  • action — действие.

В поле action стоит ключевое слово, которое определяет дополнительные условия выполнения команды, заданной полем process . Допустимые значения поля action :

    respawn — перезапустить процесс в случае завершения его работы;

Кодовое слово respawn заставляет init запустить команду, которая указана в этой строке и, если вызванная программа завершает работу, запустить ее снова. Возьмем, например, следующую строку в файле inittab:

Программа getty обеспечивает открытие виртуальной консоли (в данном случае — первой) и запуск в ней программы login, выводящей приглашение ко входу пользователя в систему. Ключевое слово respawn в приведенной строке означает, что после того, как пользователь выйдет из системы, приглашение login будет выведено на первую виртуальную консоль снова.

  • once — выполнить процесс только один раз при переходе на указанный уровень;
  • wait — процесс будет запущен один раз при переходе на указанный уровень и init будет ожидать завершения работы этого процесса, прежде, чем продолжать работу; Например, появление этого слова в строке

    означает, что init при переходе на 5-ый уровень запустит на выполнение команду /etc/rc.d/rc 5 и будет ожидать окончания работы этой программы прежде чем приступить к чему-либо другому.

  • sysinit — это ключевое слово обозначает самые первые действия, выполняемые процессом init еще до перехода на какой-либо уровень выполнения (поле id игнорируется). Процессы, помеченные этим словом, запускаются до процессов, помеченных словами boot и bootwait ;
  • boot — процесс будет запущен на этапе загрузки системы независимо от уровня выполнения;
  • bootwait — процесс будет запущен на этапе загрузки системы независимо от уровня выполнения, и init будет дожидаться его завершения;
  • initdefault — строка, в которой это слово стоит в поле action, определяет уровень выполнения, на который система переходит по умолчанию. Поле process в этой строке игнорируется. Если уровень выполнения, используемый по умолчанию, не задан, то процесс init будет ждать, пока пользователь, запускающий систему, не введет его с консоли;
  • off — игнорировать данный элемент;
  • powerwait — позволяет процессу init остановить систему, когда пропало питание. Использование этого слова предполагает, что имеется источник бесперебойного питания (UPS) и программное обеспечение, которое отслеживает состояние UPS и информирует init о том, что питание отключилось;
  • ctrlaltdel — разрешает init перезагрузить систему, когда пользователь нажимает комбинацию клавиш ++ на клавиатуре. Обратите внимание на то, что системный администратор может определить действия по комбинации клавиш ++ , например игнорировать нажатие этой комбинации (что вполне разумно в системе, где много пользователей).
  • Этот список не является исчерпывающим. Более подробно о файле inittab можно узнать из man-страниц init (8), inittab (5) и getty (8).

    5.3. Стили начальной загрузки

    А теперь давайте вспомним, что существует два разных стиля начальной загрузки операционной системы типа UNIX, происхождение которых уходит корями в историю развития UNIX-систем: так называемый стиль BSD (используемый также в таких системах как FreeBSD, NetBSD и OpenBSD), и стиль System V (или стиль ATT). Различие между ними проявляется в организации и размещении стартовых сценариев (скриптов), обеспечивающих управление процессами загрузки системы. В классических BSD-системах эти файлы хранятся в каталоге /etc и их имена начинаются с префикса «rc». В системах семейства System V файлы сценариев располагаются в каталоге /etc/init.d, а ссылки на них созданы в каталогах /etc/rc0.d, /etc/rc1.d и т.д. Как пишет В.Попов в статье [42] главное отличие стиля BSD от стиля System V состоит в организации скриптов rc: если в системах стиля System V вызывается один и тот скрипт rc, только ему передается параметр, задающий уровень выполнения, то для систем BSD-стиля характерно наличие отдельного скрипта для каждого из уровней выполнения. Вариант организации в стиле System V является более четким и позволяет аккуратнее выполнять останов системы. Если вы хотите подробнее узнать о различиях в двух названных стилях загрузки, прочитайте главу 2 книги [41] или статьи [42]-[45].

    Большая часть дистрибутивов Linux использует на этапе загрузки стиль System V. К этому классу относятся Debian, все клоны Red Hat, включая Mandrake и российские дистрибутивы ASPlinux и ALT Linux. В стиле BSD организована загрузка в дистрибутивах Gentoo, Slackware (см. [43]-[45]) и производных последнего). Однако тот или иной стиль сценариев начальной загрузки выдерживается не очень четко. Поскольку стиль System V взят за основу при создании стандарта LSB (Linux Standart Base), дистрибутивы, ранее использовавшие стиль BSD, в последнее время заботятся о совместимости с System V. Slackware обеспечивает такую совместимость начиная с версии 7.0.

    Структура каталогов, в которых хранятся инициализационные скрипты, в основных дистрибутивах существенно различается:

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

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

    Сразу после запуска компьютера появляется приглашение нажать специальную клавишу для запуска меню BIOS, если этого не сделать продолжится загрузка системы. Дальше мы рассмотрим что же происходит на каждом этапе загрузки linux.

    Инициализация

    BIOS (Basic Input Output System) — это программное обеспечение, предварительно встроенное в чипсет материнской платы. BIOS загружает компьютер и сканирует все его оборудование, проверяет наличие и работоспособность устройств, таких как жесткий диск, CD-ROM, RAM. На этом этапе начинается процесс загрузки ОС Linux.

    Затем BIOS ищет MBR (Master Boot Record), которая обычно расположена в первом секторе жесткого диска и запускает записанный там загрузчик первой степени, например, Grub или Lilo. BIOS подготавливает загрузчик MBR, загружает все данные в оперативную память и выполняет их.

    MBR занимает первых 512 байт на жестком диске. Здесь содержится информация о загрузчике операционной системы, туда записываются загрузчики большинства операционных систем, например: Linux, Unix, WIndows.

    Несмотря на то, что MBR занимает место на диске, эта область не принадлежит никакому разделу. Адрес MBR, как правило, дорожка 0, цилиндр 0. Это место зарезервировано для программ начальной загрузки. Она включает не только исполняемую программу загрузчика, но и таблицу разделов на диске.

    BIOS сканирует MBR, находит загрузчик первой ступени, затем сканирует таблицу разделов и находит загрузчик второй степени на разделе, который отмечен как загрузочный.

    Загрузчик

    Если поделить процесс загрузки Linux на этапы, это второй этап. Первая часть загрузчика, размещенная в MBR, загружает себя в оперативную память.

    Затем подгружаются файлы второй части загрузчика из загрузочного раздела жесткого диска. Например, Grub или Lilo. Такое разделение нужно, потому что весь код загрузчика в 512 байт не помещается.

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

    В конфигурационном файле для каждого пункта записано ядро, которое и нужно загрузить. Обычно ядра находятся в папке /boot. Затем Grub загружает нужное ядро vmlinuz-версия

    Подготовка ядра

    Здесь начинается загрузка ядра Linux. Grub резервирует место в оперативной памяти для образа Initrd, затем загружает туда этот образ. В этом образе содержится начальная файловая система, необходимые при ранней загрузке модули и утилиты, например, для работы с Btrfs или зашифрованным разделом. Затем загрузчик подготавливает ядро к загрузке и загружает необходимые модули, чтобы можно было начать процесс инициализации.

    В Linux, большинство проприетарных драйверов собраны в виде модулей и размещены на загрузочном диске initrd.img. Таким образом, когда ядро загружается, в initrd уже доступны все необходимые модули.

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

    Инициализация ядра

    Инициализация ядра включает такие этапы:

    • Инициализация компонентов процессора, например MMU
    • Инициализация планировщика (PID 0)
    • Монтирование файловой системы в режиме чтения и записи
    • Форк процесса инициализации (PID 1)

    В процессе инициализации ядро выполняет следующие задачи:

    • Запуск основной системы и общего менеджера ресурсов (RAM, процессор, жесткий диск)
    • Запуск процесса инициализации (/sbin/init)

    Система инициализации

    Именно на этом этапе процесс загрузки Linux наиболее подвержен ошибкам. После того, как ядро передало управление системе инициализации, начинается подготовка системы к работе и запуск всех необходимых сервисов — логгирования, обмена системными сообщениями, настройка сети, подготовка сетевых файловых систем, настройка звука, монтирование локальных файловых систем и другие системные компоненты. На данный момент используется в большинстве случаев одна из двух самых популярных систем инициализации — SysVinit или Systemd.

    Процесс загрузки в каждом из случаев немного отличается, но суть одна и та же.

    В SysVinit сначала запускается программа /sbin/init, затем она читает файл параметров /etc/inittab чтобы определить нужный уровень запуска по умолчанию. Вот эти уровни загрузки Linux:

    • 0 — выключение
    • 1 — Однопользовательский режим
    • 2 — Многопользовательский режим без сети
    • 3 — Полноценный режим
    • 4 — Не используется
    • 5 — Запуск X11
    • 6 — перезагрузка

    Уровни загрузки Linux можно переключать и вручную, с помощью команды telinit. По умолчанию используется, обычно, уровень 5.

    Затем выполняется скрипт /etc/rc.d/rc.sysinit, а также все скрипты из папки /etc/rc.d/rcx, где x — номер уровня запуска. Например если мы загружаемся с уровнем запуска 5, то будут выполнены все скрипты из папки /etc/rc.d/rc5.d.

    Имена скриптов запуска начинаются с буквы S, а завершения — K. После рассмотрения этой структуры, вы уже понимаете как работает автозагрузка сервисов в Linux? Теперь вы можете добавить скрипт в автозагрузку вручную просто создав символическую ссылку в нужной папке.

    После выполнения всех этих действий системе остается только запустить все виртуальные консоли TTY и менеджер входа в систему, например XDM или SDDM.

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

    Но суть процесса загрузки та же, запускаются такие же сервисы. Вместо уровней запуска используются специальные юниты — .target. Имя юнита содержит номер уровня запуска и слово runlevel. Например: runlevel0.target — отключение, и т д. Эти юниты и тянут за собой в зависимостях все необходимые сервисы для нормальной работы системы.

    Читать еще:  Удаленный доступ к рабочему столу linux
    Ссылка на основную публикацию
    Adblock
    detector