Несколько лет во французском облаке 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)
anatolykern
16.11.2022 05:20В далекие времена делал такие v2v миграции через dd в nc с предварительной подготовкой ядра/initrd. Но временами бывает проще просто перенести данные в созданную с 0 систему.
Stanislavvv
16.11.2022 15:00Зачем этот долгий и утомительный процесс с переустановкой ядра?
Загрузиться с live (мне зашел тот же кноппикс в текстовом режиме) и сделать update-initramfs в правильно смонтированном chroot?lyova Автор
16.11.2022 16:06Ядро собрано под работу у конкретного облачного провайдера, мне не удалось заставить его работать в ESXi. Но переустановка выполняется двумя командами и заняла у меня пару минут. Вряд ли это можно назвать долгим и утомительным процессом.
litos
А что если поставить Debian на сервер назначения, загрузить его в rescue с livecd, затем просто запустить rsync поверх с исходного сервера не забыв добавить exclude для файлов в /boot и некоторых в /etc таких как сеть и fstab?
Stanislavvv
Загрузчик всё равно надо ставить. К тому же, это будет дольше, если файликов много.