Резюме
Резюме¶
В этой главе вы узнали, как управлять процессом загрузки Linux. В начале главы был рассмотрен принцип работы процесса загрузки. Процесс загрузки разбивается на три фазы:
- Фаза BIOS
- Фаза загрузчика
- Фаза ядра
В фазе BIOS управление системой переходит к микросхеме BIOS компьютера. Основные задачи BIOS — настроить базовое аппаратное обеспечение, проверить его с помощью процедуры самотестирования при включении питания (POST), а затем найти устройство с загрузочными файлами.
В фазе загрузчика BIOS передаёт управление системой загрузчику. Главная задача загрузчика — указать на ядро операционной системы и загрузить его. Загрузчик может располагаться в главной загрузочной записи (MBR) загрузочного устройства или в загрузочном разделе диска. Загрузчики Linux можно настроить с меню, которое предоставляет конечному пользователю несколько вариантов загрузки операционной системы. Их можно даже настроить для загрузки операционных систем, отличных от Linux, например Windows.
Загрузчик Linux создаёт виртуальный жёсткий диск в оперативной памяти системы (называемый RAM-диском) и копирует на него базовую корневую файловую систему. Эта виртуальная файловая система может использоваться ядром Linux для загрузки программного обеспечения, необходимого для доступа к реальным устройствам хранения, их проверки и монтирования. В зависимости от дистрибутива такая виртуальная файловая система называется образом initrd или образом initramfs.
В фазе ядра загрузчик загружает операционную систему из жёсткого диска или другого загрузочного устройства в оперативную память системы. Ядро Linux расположено в /boot в файловой системе и называется vmlinuz-version.gz. После загрузки ядра в фазе ядра происходит следующее:
- Ядро инициализирует базовое аппаратное обеспечение системы, используя различные настройки из микросхем BIOS и CMOS.
- Ядро выполняет поиск файловой системы initrd или initramfs и запускает программу
linuxrcдля настройки системы. - После завершения работы
linuxrcфайловая система initrd или initramfs отмонтируется, а RAM-диск уничтожается. - Ядро выполняет зондирование нового оборудования и загружает соответствующие модули драйверов.
- Монтируется настоящая корневая файловая система (
/). - Ядро загружает процесс
initили systemd.
Затем было рассмотрено конфигурирование загрузчиков Linux. Первым рассмотренным загрузчиком стал GRUB Legacy. Загрузчик GRUB Legacy на протяжении ряда лет использовался во многих действующих дистрибутивах Linux. GRUB разделён на несколько этапов:
- Этап 1 (Stage 1) — как правило, хранится в MBR. Указывает на расположение Stage 1.5 или Stage 2.
- Этап 1.5 (Stage 1.5) — хранится в первых 30 КБ после MBR. Указывает на расположение Stage 2.
- Этап 2 (Stage 2) — хранится в разделе диска. Отображает конечному пользователю меню для выбора загружаемой операционной системы.
Файл для настройки GRUB зависит от дистрибутива: одни используют /boot/grub/grub.conf, другие — /boot/grub/menu.lst. GRUB обозначает жёсткие диски в системе как hdx, где x — номер диска. Таким образом обозначаются диски SCSI, SATA и IDE (PATA). Разделы на диске обозначаются как hdx,y, где y — номер раздела на диске.
Если для каталога /boot создан отдельный раздел, GRUB использует его в качестве корня GRUB и обращается к файлам внутри /boot/grub без включения /boot в путь. Если каталог /boot не имеет собственного раздела, GRUB использует полный путь для обращения к файлам /boot/grub/.
Одна из полезных возможностей GRUB — интерактивное управление процессом загрузки. Вы можете изменять пункты загрузочного меню при запуске системы, чтобы настроить способ загрузки. Также можно интерактивно создавать новые пункты загрузочного меню, обратившись к приглашению grub>. Кроме того, в пункты загрузочного меню GRUB можно добавить зашифрованный пароль.
Затем была рассмотрена последняя версия загрузчика GRUB — GRUB2. GRUB2 работает принципиально иначе, чем исходный GRUB Legacy. Версия GRUB 1.98 и выше считается «GRUB2». GRUB2 использует совершенно другой набор конфигурационных файлов по сравнению с GRUB Legacy. Файлы конфигурации GRUB2:
- Файл
/boot/grub/grub.cfg - Файлы в каталоге
/etc/grub.d - Файл
/etc/default/grub
В GRUB2 отсутствует файл menu.lst — он заменён файлом /boot/grub2/grub.cfg. Файл grub.cfg автоматически обновляется каждый раз, когда вносятся изменения в конфигурацию, после чего выполняется одна из следующих команд:
- В некоторых дистрибутивах используется команда
update-grub. - В других дистрибутивах используется команда
grub2-mkconfig -o /boot/grub2/grub.cfg.
Конфигурация GRUB2 хранится в нескольких файлах сценариев в каталоге /etc/grub.d. Если внести изменения в один из этих файлов и выполнить команду update-grub или grub2-mkconfig, файл grub.cfg автоматически обновится с новыми настройками GRUB.
После обсуждения GRUB было рассмотрено управление уровнями выполнения Linux. Сначала был изложен принцип работы уровней выполнения. Linux определяет семь уровней выполнения (0–6), выполняющих следующие функции:
- 0 — останавливает систему.
- 1 — запускает Linux в однопользовательском режиме.
- 2 — запускает Linux в многопользовательском режиме с отключённой сетью.
- 3 — запускает Linux в многопользовательском режиме с включённой сетью.
- 4 — не используется.
- 5 — запускает Linux в многопользовательском режиме с включённой сетью. Используется графический пользовательский интерфейс.
- 6 — перезагружает систему.
Файл /etc/inittab используется для настройки того, что происходит на каждом уровне выполнения. Этот файл также определяет уровень выполнения по умолчанию, в который загружается система. Каталог init системы содержит ряд подкаталогов с именами rc.0 — rc.6, каждый из которых содержит символьные ссылки на сценарии init, запускаемые для соответствующего уровня выполнения.
На системе типа BSD процесс init при инициализации системы выполняет следующие задачи:
- Запускает сценарий
/etc/init.d/bootдля подготовки системы. - Обрабатывает
/etc/inittabдля определения подходящего уровня выполнения и сценариев. - Запускает сценарии в соответствующем каталоге уровня выполнения в
/etc/init.d. - Запускает сценарий
/etc/init.d/boot.local.
На системе типа System V процесс init при запуске системы выполняет следующее:
- Запускает сценарий
/etc/rc.d/sysinitдля подготовки системы. - Обрабатывает
/etc/inittabдля определения подходящего уровня выполнения и сценариев. - Запускает сценарии в соответствующем каталоге уровня выполнения в
/etc/rc.d/. - Запускает сценарий
/etc/rc.d/rc.local.
Затем было рассмотрено управление сценариями init в каталоге init. Синтаксис управления службами с помощью сценариев init: /etc/init.d/имя_сценария start | stop | restart.
Далее было рассмотрено управление уровнями выполнения. Сначала была рассмотрена настройка уровня выполнения по умолчанию в файле /etc/inittab. Затем была рассмотрена смена уровня выполнения в динамическом режиме. Смена уровня выполнения выполняется с помощью команды init: нужно ввести init уровень_выполнения из приглашения командной строки. При этом процесс init запускает сценарий rc, который останавливает службы, связанные с текущим уровнем выполнения, и запускает сценарии, связанные с уровнем выполнения, на который выполняется переключение.
Затем рассматривалась система systemd. Большинство современных дистрибутивов Linux перешли от init к systemd. Демон systemd является заменой традиционного демона init. Одно из преимуществ systemd — возможность загружать службы параллельно при запуске системы. Демон systemd использует концепцию целей загрузки (boot targets), которые функционируют аналогично уровням выполнения. Традиционные уровни выполнения init и соответствующие им файлы целей загрузки systemd:
- уровень выполнения 3 =
multi-user.targetилиrunlevel3.target - уровень выполнения 5 =
graphical.targetилиrunlevel5.target
На системе с systemd для управления службами и целями загрузки используется команда systemctl. Для смены уровня выполнения выполняется systemctl с указанием конкретной цели загрузки. Синтаксис: systemctl isolate цель_загрузки. Файл /etc/systemd/system/default.target управляет целью загрузки по умолчанию. Чтобы изменить цель загрузки по умолчанию, необходимо изменить файл загрузки, на который указывает эта символьная ссылка, — это делается с помощью команды systemctl set-default цель_загрузки. Для просмотра текущего уровня выполнения вводится systemctl get-default.
Управление системными демонами на системе с systemd осуществляется практически так же, как на системе с init, однако используется другая команда. Для остановки, запуска, перезапуска или просмотра статуса конкретной службы вводится systemctl, затем нужное действие и имя службы. Команда systemctl также позволяет включить или отключить конкретную службу при загрузке системы.
Глава завершается рассмотрением того, как указать, какие службы запускаются на каждом уровне выполнения. Это делается с помощью команд insserv и chkconfig. Команда insserv считывает сведения из блока INIT INFO сценария init, чтобы определить, на каких уровнях выполнения должна запускаться соответствующая служба по умолчанию. Синтаксис использования insserv: insserv имя_службы.
Помимо insserv, для управления уровнями выполнения демона можно использовать команду chkconfig. Ввод chkconfig -l выведет список всех служб и уровней выполнения, на которых они настроены для запуска. Чтобы настроить запуск службы на конкретном уровне выполнения, вводится chkconfig -s имя_службы уровни_выполнения. Для отключения службы вводится chkconfig имя_службы off.
Ускоренное повторение¶
- В фазе BIOS управление системой получает микросхема BIOS компьютера.
- BIOS тестирует аппаратное обеспечение системы с помощью процедуры самотестирования при включении питания (POST), а затем находит устройство хранения с загрузочными файлами.
- В фазе загрузчика BIOS передаёт управление системой загрузчику.
- Загрузчик указывает на ядро операционной системы и загружает его.
- Загрузчик может располагаться в главной загрузочной записи (MBR) загрузочного устройства или в загрузочном разделе диска.
- Загрузчик Linux может также создать виртуальный жёсткий диск в оперативной памяти системы, называемый RAM-диском, и скопировать на него базовую корневую файловую систему.
- Эта виртуальная файловая система (называемая образом initrd или initramfs в зависимости от дистрибутива) используется ядром Linux для загрузки программного обеспечения, необходимого для доступа к реальным устройствам хранения, их проверки и монтирования.
- В фазе ядра загрузчик загружает операционную систему из жёсткого диска или другого загрузочного устройства в оперативную память системы.
- Ядро Linux расположено в
/bootи называетсяvmlinuz-version.gz. - Загрузчик GRUB Legacy широко применялся во многих дистрибутивах Linux.
- GRUB Legacy разделён на несколько этапов: Stage 1, Stage 1.5 и Stage 2.
- Одни дистрибутивы используют
/boot/grub/grub.conf, другие —/boot/grub/menu.lstдля настройки GRUB Legacy. - GRUB Legacy обозначает жёсткие диски в системе как
hdx, гдеx— номер диска. - Разделы на диске обозначаются как
hdx,y, гдеy— номер раздела на диске. - Если для каталога
/bootсоздан отдельный раздел, GRUB Legacy использует его в качестве корня GRUB и обращается к файлам внутри/boot/grubбез включения/bootв путь. - Если каталог
/bootне имеет собственного раздела, GRUB Legacy использует полный путь для обращения к файлам/boot/grub/. - GRUB Legacy позволяет изменять пункты загрузочного меню при запуске системы для настройки способа загрузки.
- GRUB Legacy позволяет интерактивно создавать новые пункты загрузочного меню через приглашение
grub>. - Из меню GRUB можно заменить процесс
initдругой программой (например, оболочкой bash) для устранения неполадок в системе, которая не загружается. - В загрузочное меню GRUB можно добавить зашифрованный пароль для ограничения доступа.
- Версия GRUB 1.98 и выше считается «GRUB2».
- Файлы конфигурации GRUB2:
- Файл
/boot/grub/grub.cfg - Файлы в каталоге
/etc/grub.d - Файл
/etc/default/grub
- Файл
- В GRUB2 файл
menu.lstзаменён файлом/boot/grub2/grub.cfg. - Конфигурация GRUB2 хранится в нескольких файлах сценариев в каталоге
/etc/grub.d. - После внесения изменений в конфигурацию GRUB2 необходимо выполнить команду
update-grubилиgrub2-mkconfig -o /boot/grub2/grub.cfg. - Linux определяет семь уровней выполнения (0–6):
- 0 — останавливает систему.
- 1 — запускает Linux в однопользовательском режиме.
- 2 — запускает Linux в многопользовательском режиме с отключённой сетью.
- 3 — запускает Linux в многопользовательском режиме с включённой сетью.
- 4 — не используется.
- 5 — запускает Linux в многопользовательском режиме с включённой сетью. Используется графический пользовательский интерфейс.
- 6 — перезагружает систему.
- Файл
/etc/inittabиспользуется для настройки того, что происходит на каждом уровне выполнения. /etc/inittabтакже определяет уровень выполнения по умолчанию, в который загружается система.- Системные процессы в Linux запускаются и останавливаются с помощью сценария init.
- Сценарий init используется процессом
initдля запуска процессов при загрузке системы и при каждой смене текущего уровня выполнения. - Большинство дистрибутивов Linux используют один из двух типов сценариев init:
- System V
- BSD
- Синтаксис запуска сценариев init:
/etc/init.d/имя_сценария start | stop | restart. - Каталог
initсистемы содержит ряд подкаталогов с именамиrc.0—rc.6, каждый из которых содержит символьные ссылки на сценарии init, выполняемые для соответствующего уровня выполнения. - Изменить уровень выполнения в динамическом режиме можно с помощью команды
init, введяinit уровень_выполненияиз приглашения командной строки. - При смене уровня выполнения процесс
initзапускает сценарийrc, который останавливает службы, связанные с текущим уровнем выполнения, и запускает сценарии, связанные с уровнем выполнения, на который выполняется переключение. - Для настройки запуска служб на определённом уровне выполнения используются команды
insservиchkconfig. - Команда
insservсчитывает сведения из блока INIT INFO сценария init, чтобы определить, на каких уровнях выполнения должна запускаться соответствующая служба по умолчанию. - Синтаксис использования
insserv:insserv имя_службы. - Ввод
chkconfig -lвыведет список всех служб и уровней выполнения, на которых они настроены для запуска. - Для настройки запуска службы на конкретном уровне выполнения вводится
chkconfig -s имя_службы уровни_выполнения. - Для отключения службы вводится
chkconfig имя_службы off. - Большинство современных дистрибутивов Linux перешли от
initк systemd. - Демон systemd использует концепцию целей загрузки (boot targets), которые функционируют аналогично уровням выполнения.
- Традиционные уровни выполнения init и соответствующие им файлы целей загрузки systemd:
- уровень выполнения 3 =
multi-user.targetилиrunlevel3.target - уровень выполнения 5 =
graphical.targetилиrunlevel5.target
- уровень выполнения 3 =
- На системе с systemd для управления службами и целями загрузки используется команда
systemctl.