На сервере, который не загружается, обычно все данные на месте. Причина часто мелкая: неверная строка в /etc/fstab, обновление ядра, сломавшее загрузчик, заполненный диск, файловая система, требующая проверки, или правило файрвола, отрезавшее вам доступ. Система восстановления загружается по сети, а не с ваших дисков, поэтому можно смонтировать диски, устранить проблему и снова загрузиться в обычном режиме или сначала скопировать данные в безопасное место. В этом руководстве описаны типовые способы восстановления серверов Linux.
Прежде чем что-либо менять, откройте консоль и посмотрите последние сообщения на экране:
В системе восстановления выведите список дисков и разделов:
lsblk -f
fdisk -l
Найдите корневой раздел (часто это самый большой раздел ext4 или xfs), а на серверах с UEFI — небольшой раздел vfat (системный раздел EFI). Если видите linux_raid_member или LVM2_member, сначала соберите их:
# Software RAID (mdadm)
mdadm --assemble --scan
cat /proc/mdstat
# LVM
vgscan
vgchange -ay
lvs
Запускайте проверку файловой системы, пока раздел не смонтирован. Замените имена устройств на свои:
# ext4
fsck -f /dev/sda2
# XFS: try a normal mount first, use xfs_repair only if mounting fails
xfs_repair /dev/mapper/vg0-root
xfs_repair -L, если обычное восстановление возможно: эта опция сбрасывает журнал и может привести к потере последних записей. Если данные важны, сначала скопируйте их (шаг 8).mkdir -p /mnt/sys
mount /dev/sda2 /mnt/sys # your root partition or LV
ls /mnt/sys # you should see etc, home, var ...
nano /mnt/sys/etc/fstab
Закомментируйте строку диска, которого больше нет, поставив перед ней #, и добавьте nofail для необязательных дисков с данными, чтобы отсутствующий диск больше не мог остановить загрузку:
UUID=1234-abcd /data ext4 defaults,nofail 0 2
Используйте UUID из blkid, а не имена вроде /dev/sdb1, которые могут меняться между загрузками. Как правильно монтировать диски, объясняется в статье разметка и монтирование диска для данных.
Если корневая файловая система заполнена на 100%, службы падают, а некоторые системы перестают загружаться. Смонтировав диск, найдите и удалите крупные файлы, как правило старые логи или резервные копии:
du -xh /mnt/sys --max-depth=2 2>/dev/null | sort -h | tail -20
Другие способы очистки — в статье освобождение места на диске в Linux.
Для исправлений, которым нужны собственные инструменты системы (GRUB, менеджер пакетов, passwd), выполните chroot:
mount /dev/sda1 /mnt/sys/boot # only if /boot is a separate partition
mount /dev/sda15 /mnt/sys/boot/efi # UEFI only: the vfat EFI partition
for d in dev proc sys run; do mount --bind /$d /mnt/sys/$d; done
chroot /mnt/sys /bin/bash
Теперь вы работаете внутри установленной системы. Чтобы сбросить забытый пароль root, просто выполните passwd root; другие способы описаны в статье сброс пароля root в Linux.
Внутри chroot:
# Debian / Ubuntu, legacy BIOS boot
grub-install /dev/sda
update-grub
update-initramfs -u -k all
# Debian / Ubuntu, UEFI boot
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
update-grub
# Rocky / AlmaLinux / CentOS
grub2-mkconfig -o /boot/grub2/grub.cfg
dracut -f --regenerate-all
При программном RAID запустите grub-install на каждом диске массива (например, /dev/sda и /dev/sdb), чтобы сервер мог загрузиться с любого из них.
Если сервер загружается, но после изменения настроек файрвола или SSH подключиться не удаётся, исправьте это из chroot (или прямо в консоли VNC, если система ещё загружается):
# Check the SSH configuration for errors
sshd -t
# Temporarily disable the firewall at next boot
systemctl disable ufw 2>/dev/null; systemctl disable firewalld 2>/dev/null
Вернув доступ, снова включите файрвол с открытым нужным портом, как в статье открытие портов в firewalld и ufw.
Если исправить не удалось или вы планируете переустановку, сначала скопируйте важные данные на другой сервер. Из системы восстановления:
# Copy a directory to a backup server over SSH
rsync -aHAX --info=progress2 /mnt/sys/var/www/ user@backup-server:/backup/www/
# Stream a compressed archive without needing local space
tar -C /mnt/sys -czf - home etc var/lib/mysql | ssh user@backup-server "cat > /backup/server.tar.gz"
Для баз данных копирование исходных файлов с остановленного сервера подходит, если вы восстанавливаете их в ту же версию СУБД. В остальных случаях загрузите систему после ремонта и используйте mysqldump.
exit # leave the chroot
for d in run sys proc dev; do umount /mnt/sys/$d; done
umount -R /mnt/sys
sync
Затем выйдите из режима восстановления (в IMIDC: Current Task → Exit Rescue), чтобы сервер загрузился с собственных дисков, и наблюдайте за загрузкой в консоли VNC.
Выберите тип восстановления Windows, чтобы запустить среду Windows, в которой можно скопировать файлы с системного диска или выполнить chkdsk C: /f и bcdboot C:\Windows для восстановления загрузочных файлов.
Возможно, RAID-контроллеру нужен драйвер, которого нет в системе восстановления, или диск вышел из строя. Создайте тикет, чтобы наши инженеры проверили оборудование.
Только после того, как данные будут в безопасности. Переустановка стирает диски, а система восстановления позволяет сначала сделать копию.
Не удалось решить проблему по этим шагам? Создайте тикет в поддержку, и круглосуточная техническая команда IMIDC поможет. Укажите IP сервера, приложите скриншот ошибки загрузки из консоли и вывод lsblk -f, чтобы мы быстрее нашли причину.