Миграция виртуальной машины на Debian 9 с XenServer на VMware ESXi 6

Ранее в рамках статьи я рассматривал миграцию Centos 7 на XenServer на ESXi 6.5. В этот раз столкнулся с рядом новых ошибок, решение которых опишу ниже.

По завершению работы VMWare vCenter Converter возникает ошибка:

description = “GrubInstaller::InstallGrub: /usr/lib/vmware-converter/installGrub.sh failed with return code: 127, and message:
/vmware-updateGrub.sh: 38: grub: not found

Очевидно, что проблема касается загрузчика и я даже нашёл в сети материал, который описывает такие проблемы, но данной статьи не было бы, не будь всё так просто.

По завершении миграции, на ESXi есть готовая машина, но лишь без возможности загружаться, т.к. загрузчик повреждён. Для его восстановления нужно подключить оригинальный ISO образ Debian 9 и загрузиться в режиме восстановления (rescue mode).

У меня в системе был раздел /dev/sda1 в ext2 – всё это относится к загрузчику. А корневой раздел системы был в LVM на /dev/mapper/…

В rescue mode нужно настроить доступ в интернет, а в конце выбрать корневой раздел (в моём случае на LVM, скриншот из интернета):

Choose a root file system

Будет предложено примонтировать /boot – нужно отказаться и сделать это вручную. Перед этим проверить диски:

fdisk -l
lsblk

Найти в выводе команд выше нужный диск, на котором содержался или будет содержаться загрузчик. Напоминаю, в моём случае это /dev/sda (хотя выносить раздел загрузки из LVM не обязательно, но так уже было настроено до меня).

mount /dev/sda /boot

Теперь нужно установить grub2 и обновить его конфигурационный файл:

apt update
apt install grub2

В процессе установки будет задан вопрос, на какой диск (именно диск, а не раздел) надо установить загрузчик, я выбрал /dev/sda

Теперь, когда загрузчик установлен, нужно проверить UUID разделов, выполнив:

blkid

Надо записать UUID своего раздела, где установлен загрузчик, и проверить, что в /etc/fstab прописано такое же значение. Исправить, если нет + проверить для остальных разделов, которые будут примонтированы. Также я закомментировал в fstab строку с монтированием swap, т.к. он не был нужен + чтобы исключить потенциальные проблемы.

Теперь можно отмонтировать диск, на который был установлен загрузчик:

umount /boot

И выполнить перезагрузку виртуальной машины.

Казалось бы, теперь всё должно заработать, т.к. загрузчик установлен и даже позволяет выбрать ядро, с которым нужно грузиться, но происходит зависание, т.н. freeze, после строки loading initial ramdisk

Я пробовал из rescue mode обновлять ядро, делать update-initramfs, но проблема не ушла. Случайно нашёл следующее решение, которое внезапно оказалось рабочим:

При первой загрузке нажать кнопку “е”, и добавить после quiet строку console=ttyS0 (скриншот из интернета):

Нажать F10 или Ctrl+x и внезапно загрузка успешно происходит!

Загрузка происходит через консоль на последовательном порту и ядро обычно обнаруживает это автоматически, но в данном случае нужно было прописать явно параметр console=ttyS0.

Чтобы каждый раз не заниматься правкой конфига, стоит сделать это один раз уже на работающей системе. В /etc/default/grub в строку GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_CMDLINE_LINUX_DEFAULT="quiet console=ttyS0"

И осталось выполнить обновление конфига для загрузчика:

update-grub

И для общего сведения по загрузчику стоит почитать https://wiki.archlinux.org/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *