Восстановление системы [202.2]

Рейтинг: 64.6% · 12 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Восстановление системы [202.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2] (вы здесь)
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 7. Восстановление системы [202.2]

Рано или поздно стенд перестаёт грузиться: кто-то поправил fstab и опечатался в UUID, обновление снесло запись в загрузчике, диск переразметили и GRUB потерял своё ядро. В этом уроке разбираем три уровня глубины починки: одноразовый аварийный таргет через параметр ядра, ремонт уже частично поднятой системы и полное восстановление с live-носителя через chroot. Заодно поймём, чем UEFI отличается от BIOS при переустановке загрузчика - это место, где чаще всего ломают руки.

Изображение

Как это работает

Загрузка идёт по цепочке: прошивка (BIOS или UEFI) находит загрузчик, GRUB разворачивает ядро и initramfs, ядро монтирует корень и передаёт управление systemd как PID 1. systemd доводит систему до таргета по умолчанию (обычно multi-user.target или graphical.target). Сломаться может любое звено, и для каждого есть точка вмешательства.

Если система в принципе грузится, но падает на каком-то сервисе, нам хватит сокращённого таргета. rescue.target поднимает корень для чтения и записи, запускает базовые юниты и udev, спрашивает пароль root и даёт shell - это аналог старого single-user. emergency.target ещё жёстче: корень примонтирован только для чтения, не запущено почти ничего, даже local-fs.target. Туда падаешь, когда сломан fstab и обычное монтирование не проходит.

Задать таргет на один раз можно прямо из GRUB. В меню жмём e, находим строку, начинающуюся с linux (на части UEFI-сборок - linuxefi), и дописываем в конец systemd.unit=rescue.target или systemd.unit=emergency.target, затем Ctrl-x для загрузки. Это разовый трюк, следующая перезагрузка снова идёт в дефолтный таргет. Полезные соседи: rd.break роняет нас в shell ещё внутри initramfs (до switch_root), а init=/bin/bash целиком минует systemd.

initramfs - это маленький временный корень в оперативке. Его задача - подгрузить драйверы дискового контроллера, собрать RAID, развернуть LVM, открыть LUKS и только потом смонтировать настоящий корень. Если после смены железа или шифрования система виснет на этапе поиска корня, почти всегда виноват устаревший initramfs, и его надо пересобрать. В Debian/Ubuntu это update-initramfs, в RHEL/Fedora - dracut.

chroot нужен, когда система не грузится вообще. Мы стартуем с live-образа, монтируем разделы установленной системы в каталог, прокидываем туда живые псевдо-ФС ядра (/proc, /sys, /dev) и делаем chroot. Внутри получаем окружение, где все пути и команды ведут себя так, будто система загружена нормально - можно править конфиги, пересобирать initramfs и переустанавливать загрузчик.

Команды и примеры

Монтируем целевую систему и заходим в chroot (предположим, корень на /dev/sda2, EFI-раздел на /dev/sda1):

Код: Выделить всё

mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi      # только для UEFI
for d in /dev /proc /sys /run; do mount --rbind $d /mnt$d; done
chroot /mnt /bin/bash
Пересборка initramfs внутри chroot:

Код: Выделить всё

# Debian / Ubuntu
update-initramfs -u -k all

# RHEL / Fedora
dracut --force --regenerate-all
Переустановка GRUB. Сначала ставим сам загрузчик, потом генерируем конфиг.

UEFI (целевой диск /dev/sda, ESP смонтирован в /boot/efi):

Код: Выделить всё

# Debian / Ubuntu
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
update-grub

# RHEL / Fedora
grub2-install --target=x86_64-efi --efi-directory=/boot/efi
grub2-mkconfig -o /boot/grub2/grub.cfg
Классический BIOS (загрузчик пишется в MBR диска, не раздела):

Код: Выделить всё

# Debian / Ubuntu
grub-install /dev/sda
update-grub

# RHEL / Fedora
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
Починка fstab. Если упали в emergency из-за него - перемонтируем корень на запись и правим:

Код: Выделить всё

mount -o remount,rw /
blkid                      # сверяем реальные UUID
nano /etc/fstab
systemctl daemon-reload    # перечитать units, сгенерированные из fstab
mount -a                   # проверить без перезагрузки
Частые грабли
  • Забыли прокинуть /proc, /sys, /dev перед chroot - grub-install и dracut ругаются на отсутствие устройств или собирают мусор.
  • В UEFI пытаются записать GRUB в MBR командой grub-install /dev/sda. В UEFI загрузчик ставится в ESP и регистрируется в NVRAM через efibootmgr, а не в загрузочный сектор.
  • На RHEL/Fedora с UEFI файл /boot/efi/EFI/redhat/grub.cfg - это заглушка. Перегенерировать конфиг надо в /boot/grub2/grub.cfg, иначе после grub2-mkconfig по неверному пути меняется не то.
  • RHEL 10 использует BLS: записи лежат отдельными файлами в /boot/loader/entries/, а параметры ядра правятся через grubby, а не руками в grub.cfg.
  • В fstab ставят noauto или забывают nofail на необязательном разделе - и эта строка валит весь boot в emergency, хотя проблема в одном диске.
  • Пересобрали initramfs не для того ядра. update-initramfs -u без -k all и dracut без --regenerate-all обновляют только текущее, а грузится другое.
  • Перепутали разовый параметр ядра с постоянным: правка в GRUB через e живёт до перезагрузки, для постоянной нужен /etc/default/grub и пересборка.
Мини-лаба
  • Шаг 1. На тестовой ВМ в меню GRUB нажмите e, допишите systemd.unit=rescue.target, загрузитесь, введите пароль root и убедитесь, что вы в rescue-shell (systemctl get-default покажет прежний дефолт).
  • Шаг 2. Намеренно сломайте /etc/fstab: добавьте строку с несуществующим UUID и опцией без nofail. Перезагрузитесь и поймайте падение в emergency.target.
  • Шаг 3. В emergency перемонтируйте корень на запись, исправьте fstab, выполните mount -a без ошибок и перезагрузитесь в норму.
  • Шаг 4. Загрузитесь с live-ISO, смонтируйте разделы установленной системы, прокиньте псевдо-ФС и войдите в chroot.
  • Шаг 5. Пересоберите initramfs (update-initramfs -u -k all или dracut --force --regenerate-all) и переустановите GRUB правильной для вашего режима командой.
  • Шаг 6. Выйдите из chroot, размонтируйте всё в обратном порядке и проверьте, что система грузится самостоятельно.
Контрольные вопросы
  • Чем отличается состояние системы в rescue.target от emergency.target и в каком из них корень монтируется только для чтения?
  • Какой параметр ядра дать в GRUB, чтобы один раз загрузиться в аварийный таргет, и почему эта правка не сохраняется?
  • Зачем перед chroot монтировать /proc, /sys и /dev, и что сломается, если этого не сделать?
  • Почему в UEFI нельзя восстанавливать загрузчик командой grub-install /dev/sda, и куда он ставится на самом деле?
  • Какой командой пересобрать initramfs для всех установленных ядер в Debian и в Fedora?
  • Что такое заглушка grub.cfg в EFI-каталоге RHEL и по какому пути на самом деле генерируется рабочий конфиг?
👍3 ❤️ 🔥1 😄 🤔1
Аватара пользователя
Krinkle
Сообщения: 1
Зарегистрирован: 16 май 2026, 14:07

Re: Восстановление системы [202.2]

Сообщение Krinkle »

А если пароль root забыл, в rescue.target же он спрашивается - как тогда чинить? Получается только через init=/bin/bash или rd.break и passwd внутри?
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
rabbitwizard
Сообщения: 1
Зарегистрирован: 14 май 2026, 20:52

Re: Восстановление системы [202.2]

Сообщение rabbitwizard »

Поймал на RHEL 10 ту самую засаду с заглушкой grub.cfg: гонял grub2-mkconfig в /boot/efi/EFI/redhat и не понимал, почему меню не меняется. Спасибо, теперь ясно про /boot/grub2/grub.cfg и grubby.
👍2 ❤️1 🔥1 😄 🤔
Ответить
← Предыдущая глава
Кастомизация запуска системы [202.1]
Следующая глава →
Альтернативные загрузчики [202.3]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость