Гайд: Диагностика сбоев в emergency mode: работа с journalctl -xb и восстановление fstab
Причины падения systemd в аварийные режимы Emergency и Rescue Mode
В процессе инициализации операционной системы systemd запускает таргет local-fs.target, который выполняет параллельную проверку целостности (fsck) и монтирование всех блочных устройств, описанных в статическом файле конфигурации /etc/fstab. Если критический раздел (/, /boot, /home, /var) не может быть смонтирован из-за неверного UUID, повреждения суперблока файловой системы или недоступности сетевого NFS/iSCSI хранилища, systemd прерывает обычный граф загрузки и переводит сервер в изолированный режим:
«You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, or "exit" to continue bootup. Cannot open access to console, the root account is locked.»
Бизнес-риски
Полная блокировка старта продуктовых серверов после планового ребута, зависание удаленных необслуживаемых серверов в дата-центрах.
Сравнение режимов Emergency Mode и Rescue Mode
| Параметр | Rescue Mode (Single-User) | Emergency Mode |
|---|---|---|
| Целевой таргет systemd | rescue.target | emergency.target |
| Состояние файловых систем | Смонтированы все базовые локальные файловые системы. | Смонтирован ТОЛЬКО корневой раздел (/) в режиме Read-Only. |
| Доступные службы | Базовые службы systemd, сокеты, журналы. | Минимальный shell без фоновых демонов. |
Регламент диагностики и восстановления системы в Emergency Mode
Сценарий 1: Перевод корневой системы в режим записи (Read-Write)
По умолчанию в emergency mode корень смонтирован в ro, что запрещает сохранение изменений в конфигурационных файлах:
# 1. Перемонтирование корневой файловой системы на запись:
mount -o remount,rw /
# 2. Проверка возможности записи:
touch /test_rw && rm /test_rwСценарий 2: Поиск виновника сбоя через journalctl -xb
Фильтрация логов текущей неудавшейся загрузки по уровням ошибок:
# 1. Поиск критических ошибок монтирования и дисковых сбоев:
journalctl -xb -p 3
# 2. Поиск строк с ошибками монтирования конкретных таргетов:
journalctl -xb | grep -E "Failed to mount|dependency failed|Timed out"Сценарий 3: Исправление файла конфигурации /etc/fstab
Чаще всего сбой вызван удаленным сетевым диском, сменившимся UUID или опечаткой в опциях монтирования:
# 1. Вывод актуальных UUID всех подключенных блочных устройств:
blkid
# 2. Редактирование fstab:
nano /etc/fstab
# Рекомендации по безопасной настройке fstab:
# Для некритичных и внешних дисков ВСЕГДА добавляйте опции nofail и x-systemd.device-timeout=5s:
# ПРИМЕР ПРАВИЛЬНОЙ СТРОКИ:
# UUID=4a21-9bc2 /mnt/data ext4 defaults,nofail,x-systemd.device-timeout=5s 0 2
# 3. Перезагрузка демона systemd для перегенерации mount-юнитов:
systemctl daemon-reload
# 4. Проверка монтирования всех точек без перезапуска:
mount -a
# 5. Перезагрузка сервера в штатный режим:
systemctl rebootТиповые ошибки администраторов
- Монтирование сетевых NFS/CIFS шаров без опции _netdev: Если в
fstabдля сетевого диска не указана опция_netdev, systemd попытается смонтировать его ДО инициализации сетевого стека, что мгновенно вызовет аварийный стоп в Emergency Mode. - Блокировка root-пользователя: Если в Ubuntu аккаунт
rootзаблокирован (нет пароля), вход в Emergency Mode невозможен. В GRUB добавьте параметрinit=/bin/bashдля сброса пароля или исправленияfstab.
Инженеры ITSTM настроят Out-of-Band доступ через KVM-консоль, исправят сбойные системные юниты и оптимизируют тайминги монтирования.
Частые вопросы (FAQ)
Что делает опция nofail в /etc/fstab?
Опция nofail указывает systemd продолжать загрузку операционной системы в штатном режиме, даже если данное конкретное устройство отсутствует или повреждено.
Как загрузиться в обход fstab при помощи systemd mask?
Можно замаскировать сбойный таргет монтирования: systemctl mask mnt-data.mount, после чего система успешно завершит загрузку.
Почему fsck завершается с кодом ошибки 4 в emergency mode?
Код ошибки fsck 4 означает: 'Файловая система содержит неисправленные ошибки, требуется ручной запуск fsck'. Запустите e2fsck -y /dev/sdX.
Как выйти из emergency mode без перезагрузки?
После устранения причины выполните: systemctl default или нажмите Ctrl+D.