Несколько лет во французском облаке Scaleway у меня крутилась виртуалка на Debian 10. Там LAMP-стэк, несколько сайтов и несколько сервисов в docker. После того, как я переоборудовал свой десктоп под homelab, было решено перенести эту виртуалку на свой bare-metal гипервизор ESXi 7.0. Понятно, что воссоздать виртуальную машину можно было бы вручную путем переноса конфигов. Но там много чего работало, и я уже не до конца помнил, что именно, поэтому в приоритете были варианты с выкачиваем образа всей машины.

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

Забираем образ

Для создания виртуальной машины из живого сервера у VMware есть бесплатная утилита - VMware Standalone Converter. Скачать ее можно на сайте компании, но для этого потребовалась бы регистрация, поэтому я взял дистрибутив на рутрекере.

Утилита работает только под Windows. Интерфейс у нее интуитивно понятный, однако сразу после ввода всех реквизитов исходного сервера она выдала ошибку: «The destination does not support EFI firmware.» Выяснилось, что Standalone Converter не поддерживает импорт виртуальных машин Debian, и ругается он завуалировано именно на это. Однако ограничение можно преодолеть, если заставить конвертер думать, что импортируется Ubuntu.

С этой целью я поменял id и номер версии в /etc/os-releases следующим образом:

PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="20.04"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=ubuntu
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

После этого импорт дойдет до 97% и конвертер все равно выдаст ошибку, но это неважно - машина уже будет в ESXi и все, что нам останется, это переконфигурировать ее вручную.

Делаем машину загружаемой

Лучше всего скачать Debian Live CD и подключить его к нашей новой виртуалке. С него можно запустить shell в Rescue Mode. Плюс здесь в том, что в режиме восстановления Live CD автоматически монтирует имеющиеся жесткие диски.

Дальше можно пройти долгий путь с редактированием grub.cfg и fstab для того, чтобы виртуальная машина начала загружаться. Однако добившись старта загрузки ядра, я обнаржил, что имеющиеся в системе ядра linux заточены под работу в облаке, и загрузка все равно застрянет на позднейших этапах (в моем случае на строке Clocksource tsc unstable). В ходе же замены ядра все необходимые обновления конфигураций выполнятся автоматически. Таким образом, загрузившись с Live CD можно сразу переходить к обновлению ядра.

Самый простой вариант – обновление через пакетный менеджер:

apt-cache search linux-image
sudo apt install linux-image-<flavour>

В конце установки произойдет изменение grub.cfg и после перезагрузки машина заработает как того и хотелось. В дальнейшем никаких проблем с ней замечено не было.

Возможный альтернативный вариант

Уже когда все работало, я выяснил, что созданный моим облачным провайдером образ виртуалки можно скинуть в Object Storage. Образ будет в формате qcow (используется QEMU). Оттуда его можно скачать, и судя по инструкциям сконвертировать в vmdk. Я не пробовал, но по-видимому машина также сначала получится незагружаемой, и последняя часть этой инструкции все равно пригодится.

Комментарии (5)


  1. litos
    16.11.2022 04:32
    +1

    А что если поставить Debian на сервер назначения, загрузить его в rescue с livecd, затем просто запустить rsync поверх с исходного сервера не забыв добавить exclude для файлов в /boot и некоторых в /etc таких как сеть и fstab?


    1. Stanislavvv
      16.11.2022 14:58

      Загрузчик всё равно надо ставить. К тому же, это будет дольше, если файликов много.


  1. anatolykern
    16.11.2022 05:20

    В далекие времена делал такие v2v миграции через dd в nc с предварительной подготовкой ядра/initrd. Но временами бывает проще просто перенести данные в созданную с 0 систему.


  1. Stanislavvv
    16.11.2022 15:00

    Зачем этот долгий и утомительный процесс с переустановкой ядра?
    Загрузиться с live (мне зашел тот же кноппикс в текстовом режиме) и сделать update-initramfs в правильно смонтированном chroot?


    1. lyova Автор
      16.11.2022 16:06

      Ядро собрано под работу у конкретного облачного провайдера, мне не удалось заставить его работать в ESXi. Но переустановка выполняется двумя командами и заняла у меня пару минут. Вряд ли это можно назвать долгим и утомительным процессом.