Короткий ответ
Не запускайте fsck и не жмите «repair disk» в панели гипервизора, пока не зафиксировали, на каком этапе остановилась загрузка: прошивка, GRUB, initramfs, emergency.target или уже multi-user, но нет сети/SSH. Данные обычно целы; ломают их повторные «чинки» суперблока и запись в том, который гипервизор открыл дважды.
Рабочая последовательность на Ubuntu 22.04 LTS и Ubuntu 24.04 LTS: консоль BMC/гипервизора → меню GRUB → journalctl -xb в emergency/rescue → blkid и /etc/fstab → только потом ремонт ФС на размонтированном томе с копией критичных данных. Цель — вернуть загрузку, сохранив данные на дисках, а не получить «чистую» ФС ценой потерянных inode.
Узел в примере: host.example, адрес 10.0.20.10, локальный администратор admin. Подставьте свои имена.
Симптомы и как отличить
Типичная картина «сервер не загружается»:
- ping на
10.0.20.10молчит, SSHadmin@host.exampleне открывается, а в консоли гипервизора крутится текст ядра или приглашение GRUB; - после логотипа прошивки —
Gave up waiting for root file systemи(initramfs); Welcome to emergency modeи запрос пароля root для maintenance;- цикл reboot каждые 10–30 секунд (watchdog гипервизора или
Restart=у критичного unit).
Отличия:
| Что видно | Это не «диск умер» | Куда смотреть |
|---|---|---|
| GRUB меню есть, ядро стартует, сеть не поднимается | netplan/DHCP, не корень ФС | Проблемы DNS, SSH не принимает |
| Система доходит до login на консоли, SSH нет | sshd/firewall | SSH не принимает подключение |
| Корневой том в read-only, login есть | I/O error, не GRUB | Файловая система стала read-only |
После сбоя питания EXT4-fs error | нужна оценка fsck | Ошибки ext4 после сбоя |
Загрузка висит на A start job is running for /data | запись в fstab без nofail | Не монтируется диск после перезагрузки |
Возможные причины
От более частых к редким:
- После клонирования VM или замены диска UUID в
/etc/fstabиroot=в GRUB не совпадают с фактическимblkid. - Дополнительный диск из fstab недоступен (iSCSI/NFS/LVM не собрался) — systemd ждёт
local-fs.targetи уходит в emergency. - Повреждён initramfs: нет нужного модуля virtio/nvme, после смены типа диска в гипервизоре корень не находится.
- Заполнен
/или/boot— GRUB не записывает, ядро не распаковывает initrd, либо emergency из‑за невозможности писать журналы. - Неудачный
update-grub/ сменаGRUB_CMDLINE_LINUX(удалилиconsole=, повесилиquiet splashна headless). - Редко: мёртвый диск, read-only LUN, сломанный RAID1 без второго плеча. Тогда цель — снимок и копия, не «ещё один fsck».
Диагностика
Работайте с консоли гипервизора или IPMI. SSH на этом этапе обычно мёртв.
1. Зафиксируйте экран и не перезагружайте пачкой
Сфотографируйте или скопируйте последние 30 строк. Нужны буквальные строки: UUID=... does not exist, Timeout waiting for device, Cannot open access to console, номер kernel panic. Перезагрузка стирает кольцевой буфер, если нет persistent journal на отдельном /var.
2. Меню GRUB
На Ubuntu Server меню часто скрыто. На экраке GRUB держите Shift (BIOS) или Esc (UEFI). Выберите «Advanced options» → строку с recovery или обычное ядро, но нажмите e и посмотрите root=.
Ожидание: root=UUID=<тот же UUID, что у корневого раздела>. Если там /dev/sda2, а в новой VM диск стал /dev/vda, ядро не найдёт корень.
Временный параметр для диагностики (только текущая загрузка, не пишется на диск):
# в редакторе GRUB добавьте в конец строки linux:
systemd.unit=rescue.target3. initramfs: нет корневого устройства
Если видите (initramfs):
cat /proc/cmdline
blkid
ls /dev/disk/by-uuid
ls /dev/mapper
lvm vgchange -ayСравните UUID из cat /proc/cmdline с blkid. Если том LVM не активен — сначала vgchange, не fsck. Если диск вообще не виден в /dev — проблема гипервизора/HBA, не Ubuntu.
4. emergency / rescue
После пароля root (на многих облачных образах root заблокирован — грузитесь с live ISO или через GRUB init=/bin/bash):
hostnamectl
systemctl list-units --failed
journalctl -xb -p err --no-pager | tail -n 80
findmnt --verify --verbose
cat /etc/fstab
blkid
df -h
df -ifindmnt --verify на Ubuntu 22.04/24.04 прямо указывает на битый UUID и на опции, которые systemd не может выполнить. df -h на корне, смонтированном ro, всё равно покажет заполненность: 100% на / объясняет обрыв обновления ядра.
Связь с сервисами: если машина доходит до multi-user, но «не загружается» с точки зрения мониторинга — это уже systemd-сервис не запускается, не этот сценарий.
5. Live ISO, если корень не монтируется
Загрузите Ubuntu 22.04/24.04 live (той же major, что сервер), не устанавливайте систему.
lsblk -o NAME,UUID,FSTYPE,SIZE,MOUNTPOINT
mkdir -p /mnt/root
mount /dev/vda2 /mnt/root
mount /dev/vda1 /mnt/root/boot
# UEFI:
mount /dev/vda15 /mnt/root/boot/efi
chroot /mnt/rootПеред chroot смонтируйте /proc /sys /dev. Снимайте копию /etc/fstab, /boot/grub/grub.cfg, вывод blkid в заявку.
Решение
Сценарий A. Неверный UUID в fstab или GRUB
С live или из rescue сравните:
blkid
grep -v '^#' /etc/fstab
grep -E 'linux\s' /boot/grub/grub.cfg | headИсправьте /etc/fstab на UUID из blkid. Для дисков, без которых сервер должен грузиться (бэкап, архив), добавьте nofail,x-systemd.device-timeout=10. Затем:
update-grub
update-initramfs -u -k allНа 24.04 update-initramfs тот же. Не меняйте GRUB_DISABLE_OS_PROBER ради «ускорения», если это не ваша цель.
Сценарий B. Initramfs без virtio/nvme
После смены типа диска в Proxmox/VMware:
lsinitramfs /boot/initrd.img-$(uname -r) | grep -E 'virtio|nvme|ahci'Если модулей нет — в chroot update-initramfs -u. Проверьте /etc/initramfs-tools/modules.
Сценарий C. Корень заполнен, GRUB/apt оборвались
Освободите место без удаления /home и баз:
du -xhd1 / | sort -h
journalctl --disk-usage
journalctl --vacuum-size=200M
apt-get cleanПодробнее: закончился диск. После появления свободных гигабайт завершите оборванный linux-image через dpkg --configure -a уже после успешной загрузки.
Сценарий D. Подозрение на повреждение ФС
Только если journal показывает EXT4-fs error / I/O error и том размонтирован:
Полный разбор — в ошибках ext4. Здесь достаточно: не чините суперблок с форума по смещению «наугад».
Сценарий E. Ядро паникует сразу
Выберите в GRUB предыдущий linux-image. На Ubuntu ядра копятся, пока не сработает autoremove. Если в GRUB одно ядро — не ставьте новое с полуживого chroot без сети и зеркала; сначала сеть в live.
Как проверить, что проблема устранена
С консоли после reboot:
systemctl is-system-running
systemctl list-jobs
findmnt /
cat /proc/cmdline
ip -br addr
ss -tlnp | grep -E ':22|:22 '
timedatectlОжидание: running или degraded с понятным списком failed unit, не initializing. Корень rw. SSH слушает — тогда с рабочей станции:
ssh -o ConnectTimeout=8 admin@10.0.20.10 'uptime; findmnt -n -o OPTIONS /'Функциональный тест сервиса, ради которого живёт узел (nginx, postgres, доменный клиент), обязателен. Зелёный is-system-running без приложения ничего не доказывает.
Если не помогло
- Консоль гипервизора чёрная до GRUB: проверьте boot order UEFI, Secure Boot vs самоподписанный grub, не тот диск в VM.
- Диск не виден в live: storage, thin pool, LUN mapping — не ОС.
- Emergency каждый раз из‑за NFS в fstab: перенесите в
_netdevили systemd.mountсAfter=network-online.target. - После «успешного» fsck приложения не стартуют: смотрите systemd-сервис и permission denied.
- Цикл OOM на раннем старте: OOM Killer.
Профилактика
- В fstab только UUID; некорневые тома —
nofailили отдельный mount unit. - Два ядра в GRUB, мониторинг свободного места
/и/boot. - Консоль гипервизора и serial
console=ttyS0вGRUB_CMDLINE_LINUX, не только SSH. - Снимок VM до
dist-upgradeядра; снимок не заменяет backup данных. - После смены типа диска в гипервизоре — обязательный
update-initramfs -uна ещё живой системе.
FAQ
Можно ли просто нажать «repair» в панели VMware/Proxmox?
Нет. Мастер часто запускает fsck без вашего контроля и без копии. Сначала снимок и чтение journal.
Нужен ли пароль root в emergency, если вхожу как admin?
На Ubuntu recovery цель sulogin. Если root заблокирован (passwd -l root), задайте его с live через chroot и passwd, либо используйте rw init=/bin/bash один раз.
update-grub безопасен на полуживом корне?
В chroot с правильно примонтированными /boot и EFI — да. Без /boot вы запишете конфиг не туда.
Почему ping есть, а «сервер не загрузился» по мониторингу?
Ядро подняло сеть из initramfs или cloud-init, а default.target не достигнут. Смотрите systemctl list-jobs.
Стоит ли удалять старые ядра, чтобы точно загрузилось одно?
Нет. Оставьте минимум два. Чистите только после подтверждённой загрузки нового.