Перейти к основному содержимому

Перенести ВМ из облака VMware другого провайдера в облачную платформу Selectel

Вы можете экспортировать ВМ из vCloud Director, vSphere и ESXi и импортировать в облачную платформу Selectel.

Как устроена миграция

ВМ выгружается из VMware в формате OVF вместе с дисками, проверяется по контрольным суммам, загружается в S3 Selectel и импортируется в облачную платформу как образ. Большинство площадок vCloud открывают доступ по API, поэтому почти все операции выполняются из консоли и легко автоматизируются. Под ВМ здесь и дальше понимается vApp целиком: экспортируются все ВМ, которые в него входят.

к сведению

Работающую ВМ выгрузить нельзя, поэтому OVF Tool выключает ее перед экспортом. Заранее согласуйте окно обслуживания для каждой ВМ.

1. Подготовиться к миграции

  1. Получите доступ к виртуальному дата-центру (vDC) с правами Organization Administrator.

  2. Скачайте VMware OVF Tool с сайта Broadcom (VMware) и распакуйте его на компьютер или ВМ, где хватит места под образы дисков.

  3. Создайте бакет в S3 Selectel.

  4. Настройте Rclone для работы с бакетом:

    [selectel]
    type = s3
    provider = Other
    access_key_id = ACCESS_KEY
    secret_access_key = SECRET_KEY
    endpoint = https://s3.ru-1.storage.selcloud.ru
    region = ru-1
  5. Для ВМ на Windows установите драйверы virtio (этап 6).

2. Экспортировать ВМ

Одна ВМ

Если машин немного, экспорт удобно запускать вручную для каждой ВМ. Запустите экспорт:

./ovftool --powerOffSource \
--X:logFile=/path/to/ovftool.log --X:logLevel=verbose \
--parallelThreads=4 --X:progressSmoothing=10 \
--X:vCloudTimeout=60000 --X:vCloudKeepAliveTimeout=60000 \
"vcloud://USERNAME:PASSWORD@vcd.provider.example?org=ORG_NAME&vdc=VDC_NAME&vapp=VAPP_NAME" \
"/path/to/export/VAPP_NAME.ovf"
ПараметрНазначение
--powerOffSourceВыключить ВМ перед экспортом
vcd.provider.exampleАдрес vCloud Director исходной площадки
org=, vdc=, vapp=Организация, виртуальный дата-центр и имя vApp
--X:logFile, --X:logLevelЖурнал и уровень логирования (none, quiet, panic, error, warning, info, verbose, trivia)
--parallelThreadsЧисло потоков, от 1 до 100, но не больше числа ядер CPU минус одно
--X:progressSmoothingИнтервал сглаживания оценки времени загрузки, секунды (по умолчанию 60)
--X:vCloudTimeoutСколько ждать ответа vCloud на этапе подготовки экспорта. Важно для больших ВМ
--X:vCloudKeepAliveTimeoutСколько держать соединение с vCloud. Важно для больших ВМ

Параметры вида --X:... и --parallelThreads указываются до адреса vCloud Director. Спецсимволы в пароле нужно закодировать для URL: например, @ записывается как %40.

В результате в каталоге появятся файлы:

  • .mf — контрольные суммы SHA-256 файлов ВМ, посчитанные на стороне VMware;
  • .ovf — описание ВМ в формате Open Virtualization Format;
  • .nvram — настройки BIOS/UEFI;
  • .vmdk — образы дисков. Они меньше, чем диски в vCloud Director, потому что при экспорте используется сжатие.

Несколько ВМ

Если машин много, экспорт лучше запускать скриптом в несколько потоков. Перечислите имена vApp в файле vmlist, по одному на строку, и положите скрипт рядом с ovftool:

#!/usr/bin/env bash
# export-vapps.sh - параллельный экспорт vApp из vCloud Director
set -euo pipefail

export OVFTOOL=./ovftool
export VCD_HOST="vcd.provider.example"
export ORG="ORG_NAME"
export VDC="VDC_NAME"
export VCD_USER="USERNAME"
export OUT_DIR=./export
NJOBS=3 # сколько vApp выгружать одновременно

read -rsp "Пароль vCloud (спецсимволы в URL-кодировке): " VCD_PASS; echo
export VCD_PASS
mkdir -p "$OUT_DIR"

export_vapp() {
local vapp="$1"
mkdir -p "$OUT_DIR/$vapp"
"$OVFTOOL" --powerOffSource \
--X:logFile="$OUT_DIR/$vapp/ovftool.log" --X:logLevel=verbose \
--parallelThreads=4 --X:vCloudTimeout=60000 --X:vCloudKeepAliveTimeout=60000 \
"vcloud://${VCD_USER}:${VCD_PASS}@${VCD_HOST}?org=${ORG}&vdc=${VDC}&vapp=${vapp}" \
"$OUT_DIR/$vapp/$vapp.ovf" && echo "OK $vapp" || echo "ERR $vapp"
}
export -f export_vapp

grep -v '^[[:space:]]*$' vmlist | xargs -P "$NJOBS" -I{} bash -c 'export_vapp "$1"' _ {}

3. Выполнить проверку и загрузить в S3

Перед загрузкой сверьте контрольные суммы скачанных файлов с .mf. Скрипт ниже проверяет каждую ВМ, загружает проверенные файлы в S3, сверяет загруженное с локальным и переносит обработанные каталоги в ./export/processed:

#!/usr/bin/env bash
# check-and-upload.sh - проверка SHA-256 по .mf и загрузка в хранилище
set -euo pipefail

EXPORT_DIR=./export
REMOTE="selectel:vm-images" # подключение rclone:контейнер
mkdir -p "$EXPORT_DIR/processed"

mapfile -t manifests < <(find "$EXPORT_DIR" -name '*.mf' -not -path '*/processed/*')

for mf in "${manifests[@]}"; do
dir=$(dirname "$mf"); vapp=$(basename "$dir"); ok=1
while IFS= read -r line; do
file=$(sed -E 's/^SHA256\((.*)\)= .*/\1/' <<<"$line")
expected=$(sed -E 's/^.*= //' <<<"$line")
actual=$(sha256sum "$dir/$file" | awk '{print $1}')
if [[ "$actual" == "$expected" ]]; then echo "OK $vapp/$file"
else echo "ERR $vapp/$file - контрольная сумма не совпала"; ok=0; fi
done < <(grep '^SHA256' "$mf")

if [[ $ok -eq 1 ]]; then
rclone copy "$dir" "$REMOTE/$vapp" --progress --transfers 4
rclone check "$dir" "$REMOTE/$vapp" --one-way && mv "$dir" "$EXPORT_DIR/processed/"
else
echo "vApp $vapp: повторите экспорт"
fi
done

Rclone сверяет размер и контрольную сумму файлов. Для очень больших файлов, которые загружаются в хранилище частями, общей контрольной суммы может не быть – тогда rclone check сравнивает только размер. Целостность самих данных в любом случае гарантирует проверка SHA-256 до загрузки.

Если экспорт падает с ошибкой

При экспорте vCloud сначала сохраняет образ ВМ у себя. У небольших провайдеров на хосте виртуализации может не хватить места под ВМ с большими дисками, и задание завершится ошибкой. Тогда диски можно выгрузить по сети через dd.

  1. Загрузите ВМ с Rescue-образа, например Selectel Rescue.

  2. Скопируйте диск на принимающий сервер:

    dd if=/dev/sda bs=32M status=progress | pv -qL 90M | ssh root@RECEIVER_IP "dd of=/data/VM_NAME.raw bs=32M"

    Здесь:

    • bs=32M - размер блока, на практике оптимальный по скорости;
    • pv -qL 90M ограничивает передачу 90 МБ/с, чтобы оставить часть канала другим ВМ. На принимающей стороне вместо файла можно сразу писать на диск, например of=/dev/sda.
  3. Сверьте контрольные суммы исходного диска и полученного образа. Используйте SHA-256, а не MD5 - он надежнее:

    sha256sum /dev/sda # на исходной ВМ
    sha256sum /data/VM_NAME.raw # на принимающем сервере

    Если суммы совпали, данные перенесены без потерь.

Подробнее о побайтовом копировании, в том числе о том, как продолжить прерванную передачу, в инструкции Перенос Linux-сервера полной копией диска.

4. Импорт в облачную платформу

В современных дистрибутивах Linux есть драйверы virtio и cloud-init, поэтому такие ВМ обычно импортируются и запускаются без доработок. Для полной совместимости выполните рекомендации по импорту образов из документации Selectel.

  1. Загрузите образ диска в панели управления в раздел Образы. Образы больше 100 ГБ удобнее загружать через OpenStack CLI:

    openstack image create --disk-format vmdk --container-format bare \
    --file VM_NAME-disk1.vmdk VM_NAME
  2. Создайте сервер из образа и проверьте работу сервисов.

6. Подготовить ВМ Windows

Чтобы Windows запустилась в облачной платформе, драйверы virtio нужно поставить в исходную ВМ до экспорта образа системного диска.

  1. Скачайте ISO-образ с драйверами: virtio-win.iso.
  2. Подключите образ в исходной ОС.
  3. Установите все драйверы и в согласованное время перезагрузите сервер.
  4. Экспортируйте ВМ и добавьте ее в облачную платформу как образ-источник.

Перед массовым переносом стоит проверить порядок действий на одной некритичной ВМ Windows.

7. Переезд в облако на базе VMware в Selectel

Если вы хотите остаться на VMware, способ переезда в облако на базе VMware в Selectel зависит от того, где сейчас находится инфраструктура:

Где сейчасСпособ миграции
Своя площадка на VMware с vCenterVMware Cloud Director Availability
Своя площадка на VMware без vCenter (например, бесплатный ESXi)VMware Cloud Director Availability, если развернуть пробную версию vCenter
Своя площадка на Hyper-V, Proxmox и других платформахVeeam Agent
Облако VMware другого провайдераVeeam Agent
Облако VMware в Selectel, смена кластера или регионаVMware Cloud Director Availability
Облако VMware в Selectel, смена юрлицаПеренос организации без простоя — по запросу в техподдержку
Выделенные серверы или облачная платформа SelectelVeeam Agent