мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версия | |||
| notes:howlinuxworks:vol6 [2026/05/14 15:29] – radi0dev | notes:howlinuxworks:vol6 [2026/05/14 16:59] (текущий) – radi0dev | ||
|---|---|---|---|
| Строка 254: | Строка 254: | ||
| По умолчанию юниты с Requires и Wants запускаются одновременно. Для упорядочивания используйте: | По умолчанию юниты с Requires и Wants запускаются одновременно. Для упорядочивания используйте: | ||
| - | * **Before** | + | * **Before** |
| - | * **After** | + | * **After** |
| systemd ждет активного статуса юнита перед активацией зависимостей. | systemd ждет активного статуса юнита перед активацией зависимостей. | ||
| Строка 272: | Строка 272: | ||
| Для проверки состояния системы: | Для проверки состояния системы: | ||
| - | * **ConditionPathExists=p** | + | * **ConditionPathExists=p** |
| - | * **ConditionPathIsDirectory=p** | + | * **ConditionPathIsDirectory=p** |
| - | * **ConditionFileNotEmpty=p** | + | * **ConditionFileNotEmpty=p** |
| При ложном условии юнит не активируется, | При ложном условии юнит не активируется, | ||
| Строка 404: | Строка 404: | ||
| * systemd-fsck (простая обертка для стандартных системных утилит) | * systemd-fsck (простая обертка для стандартных системных утилит) | ||
| - | Некоторые программы в / | + | Некоторые программы в / |
| **Справка: | **Справка: | ||
| + | ===== 6.4. Уровни выполнения в System V ===== | ||
| + | |||
| + | System V init использует **уровни выполнения** (runlevel) для определения состояния машины - число от 0 до 6. Проверить текущий уровень: | ||
| + | |||
| + | <code bash> | ||
| + | who -r | ||
| + | </ | ||
| + | |||
| + | Выход: '' | ||
| + | |||
| + | Уровни выполнения различают состояния: | ||
| + | |||
| + | **Примечание: | ||
| + | |||
| + | ===== 6.5. System V init ===== | ||
| + | |||
| + | System V init - одна из старейших систем инициализации Linux. Устанавливается редко (встречается в RHEL < 7.0, встроенных системах), | ||
| + | |||
| + | Состоит из: | ||
| + | * Конфигурационный файл: '' | ||
| + | * Сценарии загрузки и символические ссылки | ||
| + | |||
| + | ^ Файл ^ Содержимое ^ | ||
| + | | / | ||
| + | | / | ||
| + | | /etc/rc*.d | Каталоги со сценариями (rc1.d, rc2.d и т.д.) | | ||
| + | |||
| + | **Пример строки inittab:** | ||
| + | |||
| + | < | ||
| + | id: | ||
| + | l5: | ||
| + | </ | ||
| + | |||
| + | ^ Действие ^ Назначение ^ | ||
| + | | **initdefault** | Уровень выполнения по умолчанию | | ||
| + | | **wait** | Выполнить команду один раз при входе на уровень, | ||
| + | | **respawn** | Перезапустить команду при выходе (например, | ||
| + | | **ctrlaltdel** | Действие при нажатии Ctrl+Alt+Del (обычно shutdown) | | ||
| + | | **sysinit** | Первое действие при запуске, | ||
| + | |||
| + | ==== 6.5.1. System V init: последовательность команд при запуске ==== | ||
| + | |||
| + | Команда '' | ||
| + | |||
| + | * **S** (Start) - выполнить с аргументом '' | ||
| + | * **K** (Kill) - выполнить с аргументом '' | ||
| + | * **Числа 00–99** - порядок выполнения | ||
| + | |||
| + | **Пример каталога rc5.d:** | ||
| + | |||
| + | < | ||
| + | S10sysklogd | ||
| + | S12kerneld | ||
| + | S15netstd_init | ||
| + | </ | ||
| + | |||
| + | Команда rc выполняет их последовательно: | ||
| + | |||
| + | <code bash> | ||
| + | S10sysklogd start | ||
| + | S12kerneld start | ||
| + | S15netstd_init start | ||
| + | ... | ||
| + | S99sshd start | ||
| + | </ | ||
| + | |||
| + | Сценарии оболочки запускают программы из ''/ | ||
| + | |||
| + | ==== 6.5.2. Ферма ссылок System V init ==== | ||
| + | |||
| + | Содержимое rc*.d - **символические ссылки** на файлы в ''/ | ||
| + | |||
| + | < | ||
| + | lrwxrwxrwx . . . S10sysklogd -> ../ | ||
| + | lrwxrwxrwx . . . S12kerneld -> ../ | ||
| + | lrwxrwxrwx . . . S99httpd -> ../ | ||
| + | </ | ||
| + | |||
| + | Дистрибутивы используют эту **ферму ссылок (link farm)** для переиспользования одних сценариев на всех уровнях выполнения. | ||
| + | |||
| + | === Запуск и остановка служб === | ||
| + | |||
| + | <code bash> | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | === Изменение последовательности загрузки === | ||
| + | |||
| + | **Отключить службу без удаления: | ||
| + | |||
| + | <code bash> | ||
| + | mv S99httpd _S99httpd | ||
| + | </ | ||
| + | |||
| + | Префикс '' | ||
| + | |||
| + | **Добавить службу: | ||
| + | |||
| + | ==== 6.5.3. Команда run-parts ==== | ||
| + | |||
| + | Утилита **run-parts** запускает все исполняемые программы в каталоге в определённом порядке. | ||
| + | |||
| + | ^ Дистрибутив ^ Функции ^ | ||
| + | | Fedora | Простая версия - запускает всё подряд | | ||
| + | | Debian/ | ||
| + | |||
| + | Используется в сценариях для массового запуска программ. Большинству пользователей детали неважны. | ||
| + | |||
| + | ==== 6.5.4. Управление System V init ==== | ||
| + | |||
| + | **telinit** - команда управления уровнями выполнения: | ||
| + | |||
| + | ^ Команда ^ Действие ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | **Предупреждение: | ||
| + | |||
| + | ==== 6.5.5. Совместимость systemd и System V ==== | ||
| + | |||
| + | systemd отслеживает System V сценарии: | ||
| + | |||
| + | 1. Активирует ''< | ||
| + | 2. Идентифицирует скрипты в ''/ | ||
| + | 3. Связывает скрипт со служебным юнитом ('' | ||
| + | 4. Активирует юнит, запускает с аргументом start/stop | ||
| + | 5. Связывает процессы со служебным юнитом | ||
| + | |||
| + | **Результат: | ||
| + | |||
| + | ===== 6.6 Завершение работы системы ===== | ||
| + | |||
| + | Используйте **shutdown** для корректного завершения: | ||
| + | |||
| + | <code bash> | ||
| + | shutdown -h now # Остановить сейчас | ||
| + | shutdown -r +10 # Перезагрузить через 10 минут | ||
| + | </ | ||
| + | |||
| + | ^ Параметр ^ Действие ^ | ||
| + | | **-h** | Halt - остановка и отключение питания | | ||
| + | | **-r** | Reboot - перезагрузка | | ||
| + | | **now** | Немедленно | | ||
| + | | **+n** | Через n минут | | ||
| + | |||
| + | **Перед завершением: | ||
| + | |||
| + | === Процедура завершения === | ||
| + | |||
| + | 1. init просит каждый процесс завершиться | ||
| + | 2. Через время применяет сигнал TERM | ||
| + | 3. Если не помогает - KILL для оставшихся процессов | ||
| + | 4. Блокирует системные файлы | ||
| + | 5. Демонтирует все FS кроме корневой | ||
| + | 6. Ремонтирует корневую FS в режиме read-only | ||
| + | 7. Синхронизирует буфер (sync) | ||
| + | 8. Указывает ядру перезагрузиться/ | ||
| + | |||
| + | **halt/ | ||
| + | |||
| + | ===== 6.7 Начальная файловая система оперативной памяти ===== | ||
| + | |||
| + | **initramfs** - временное пользовательское пространство перед основной загрузкой. Решает проблему: | ||
| + | |||
| + | === Как это работает === | ||
| + | |||
| + | 1. Загрузчик загружает архив с модулями ядра в оперативную память | ||
| + | 2. Ядро распаковывает архив во временную RAM-FS | ||
| + | 3. Утилиты в initramfs загружают необходимые драйверы | ||
| + | 4. Монтируют реальную корневую FS | ||
| + | 5. Запускают полноценный init | ||
| + | |||
| + | ^ Дистрибутив ^ Реализация ^ | ||
| + | | Простые системы | Shell-скрипт, | ||
| + | | systemd системы | Полная systemd без модулей, | ||
| + | |||
| + | === Отключение initramfs === | ||
| + | |||
| + | Если все драйверы встроены в ядро - можно пропустить initramfs. Удалите строку '' | ||
| + | |||
| + | **Примечание: | ||
| + | |||
| + | === Содержимое initramfs === | ||
| + | |||
| + | Распакуйте архив: | ||
| + | |||
| + | <code bash> | ||
| + | unmkinitramfs / | ||
| + | </ | ||
| + | |||
| + | Старые системы использовали **cpio** архивы (см. cpio(1)). | ||
| + | |||
| + | === Создание initramfs === | ||
| + | |||
| + | Обычно создаётся автоматически дистрибутивом. Основные утилиты: | ||
| + | * **mkinitramfs** - простая, | ||
| + | * **dracut** - более мощная | ||
| + | |||
| + | **Примечание: | ||
| + | |||
| + | ===== 6.8 Аварийная загрузка системы и однопользовательский режим ===== | ||
| + | |||
| + | При проблемах с системой используйте **live-образ** дистрибутива или SystemRescueCD на съёмном носителе. Live-образ - полная Linux, загружающаяся без установки. | ||
| + | |||
| + | === Задачи после сбоя === | ||
| + | |||
| + | * Проверка файловых систем | ||
| + | * Сброс забытого пароля | ||
| + | * Исправление критичных файлов (''/ | ||
| + | * Восстановление резервных копий | ||
| + | |||
| + | === Однопользовательский режим === | ||
| + | |||
| + | **Быстрая загрузка в root-оболочку без служб.** | ||
| + | |||
| + | ^ Init система ^ Режим ^ | ||
| + | | System V | Уровень выполнения 1 | | ||
| + | | systemd | rescue.target | | ||
| + | | Параметр загрузчика | **-s** | | ||
| + | |||
| + | **Недостатки: | ||
| + | |||
| + | **Требует: | ||