Помните, мы говорили про резервное копирование за NAT’ом? Так вот, поскольку резервное копирование без восстановление мертво, приходим к еще одной интересной теме. В моем случае, проблема образовалась из того, что хостинг предоставляет виртуалки на базе QEMU-KVM, а у меня только Hyper-V и VmWare. Мой рецепт успешно отработал на CentOS 7/8, остальное не обещаю.
Сложности связаны с тем, что CentOS типа умный и раздаёт разные имена дисковых накопителей в зависимости от того, что ему сообщает окружение или, в нашем случае, система виртуализации. В частности, диски QEMU монтируются как vdx, а VmWare – как sdx. Соответственно, загрузчик падает на бок и говорит, что нужного диска найти не может и отстаньте. Легких путей не будет, потому что “в лоб” восстановление всё равно не взлетит, можно особенно и не пытаться.
Первое – создаем виртуалку со схожими процессорно-памятными харатеристиками, чтобы система не прилегла прямо на старте. Добавляем в неё диск типа IDE или SATA соответствующего объема. Если оставить дефолтный ISCSI Paravirtual, мы получим ошибку “/dev/disk/by-uuid does not exist” и я не нашел, как её вылечить. Обязательно ставим режим загрузки BIOS, иначе будут сложности с поиском загрузочного тома в принципе.
Второе – монтируем диск восстановления Veeam и с его помощью один-в-один восстанавливаем диск из резервной копии. И да, если ваш сервер всё еще за NAT’ом, вам придется либо открывать нужные порты, указанные в соответствующей статье, либо городить огород с чистой системой на временном диске, куда будет поставлен VPN-клиент и Veeam-агент с восстановлением на второй диск, который станет постоянным. Уф….
Третье – подключаем LiveCD CentOS и грузимся в режиме Troubleshooting. Говорим, что мы хотим сделать Rescue a CentOS system и выбираем первый пункт. Если забыли или не знаем имя диска, спрашиваем:
fdisk -l
В моем случае диск назывался sda, а в оригинале было vda. Будем править конфиги. По идее, системный раздел должен примонтироваться в /mnt/sysimage. Если вдруг этого не произошло, монтируем его сами:
mount /dev/sda1 /mnt/sysimage
Чтобы всё отработало корректно, нужно также присоединить окружение нашего сервера:
mount --bind /proc /mnt/sysimage/proc
mount --bind /dev /mnt/sysimage/dev
mount --bind /sys /mnt/sysimage/sys
mount --bind /run /mnt/sysimage/run
chroot /mnt/sysimage
Далее в конфигах меняем имя диска:
nano /etc/fstab
nano /boot/grub2/grub.cfg
Ну и, наконец, устанавливаем загрузчик со всеми изменениями на место
grub2-install /dev/sda
Перезагружаем сервер и наслаждаемся работой сервера. Кстати, можно попробовать всё это провернуть и без LiveCD, если система загружается хоть как-то.