Нужно переместить часть машин из инфраструктуры vSphere на KVM. Для этого понадобятся хост с linux+qemu+kvm и набр утилит libguestfs-tools (в частности - virt-v2v)

Импорт машин из vSphere в Fedora Server 25

Исполнять перенесенные машины можно на любом дистрабутиве linux, однако проще всего всего процесс миграции идет под rpm-based системой с текущей стабильной версией libguestfstools.
На данный момент такой версией дистрибутива является Fedora Server 25. Итак ставим Fedora Server 25 с дефолтным набором ПО. А затем:

dnf -y install @virt* policycoreutils-python bridge-utils virt-v2v *guestf* 
echo LIBGUESTFS_BACKEND=direct > /etc/envoronment
wget https://fedorapeople.org/groups/virt/virtio-win/repo/stable/virtio-win-0.1.126-2.noarch.rpm
rpm -iv ./virtio-win-0.1.126-2.noarch.rpm

Обязательно перезагружаемся:

reboot

Теперь можно импортировать виртуальную машину:

virt-v2v -v -x -ic vpx://DOMAIN%5cadmin@vcenter.domain.local/Datacenter%20Name/Cluster%20Name/esx_host_name?no_verify=1  -os storage-pool-name vm-name

После импорта можно поправить конфигурацию сетевого интерфейса (установить корректный интерфейс для bridge) и диска (установить режим кеширования и режим ввода\вывода).

  Cache mode: none
  I/O mode: native

Некоторые нюансы составления URI для virt-v2v

Формат URI такой:
_username_@_vcenter_address_/_DataCenter_Name_/_Cluster_Name_/_hostname_
Если пользователь доменный, то его в его имени в URI символ \ нужно заменять на %5c, то есть будет как-то так: DOMAIN%5cusername. Использовать экранирование \\ не получится.
Если не указывать имя пользователя, то будут ошибки на этапе скачивания диска vmdk:

curl -q --insecure --head --silent --url '....'
HTTP/1.1 401 Unauthorized

При указании имени датацентра и кластера важен регистр символов!

Пробелы в названиях датацентра и кластера заменяем на %20, символ \ заменяем на %5c.

Импорт в ubuntu 16.04

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get install -y nano alien qemu-kvm libvirt-bin  bridge-utils libguestfs-tools
wget https://fedorapeople.org/groups/virt/virtio-win/repo/stable/virtio-win-0.1.126-2.noarch.rpm
sudo alien -i ./virtio-win-0.1.126-2.noarch.rpm

Перезагружаемся и приступаем к импорту.

virt-v2v -v -x -ic vpx://DOMAIN%5cadmin@vcenter.domain.local/Datacenter%20Name/Cluster%20Name/esx_host_name?no_verify=1  -os storage-pool-name vm-name

Всякие ошибки virt-v2v

Однако, в Cent-OS 6.8 возникали ошибки типа:

libvirt error code: 45, message: authentication failed: Password request failed
libvirt error code: 45, message: authentication failed: Username request failed

Оказалось, нужно создать файлик ~/.netrc с таким содержимым: machine vCenter_hostname login vCenter_login password vCenter_password

echo "machine vcenter.domain.local     login   DOMAIN%5cadmin        password        admin_pass" > ~/.netrc
chmod 600  ~/.netrc\

Однако, это актуально для старых версий libguestfs. В новых версиях (1.28 и далее) для этой цели предусмотрена опция –password-file.

При импорте возникает ошибка:

ошибка: Не удалось определить домен на основе /tmp/v2vlibvirtbe6ed8.xml
ошибка: internal error unknown disk type 'volume'

Судя по всему эта ошибка связана с устаревшей версией virt-v2v. В репозиториях CentOS 7_15.11 лежит версия 1.28, а эта ошибка поправлена в 1.30.

Сборка свежей версии libguestfs

Поэтому возвращаемся на ubuntu 14.04 и собираем текущую версию libguestfs-tools.

sudo apt-get update && sudo apt-get upgrade && sudo apt-get install nano build-essential qemu alien flex bison
cd ~
wget https://fedorapeople.org/groups/virt/virtio-win/repo/stable/virtio-win-0.1.126-2.noarch.rpm
sudo alien -i ./virtio-win-0.1.126-2.noarch.rpm
wget http://libguestfs.org/download/supermin/supermin-5.1.17.tar.gz
tar -xvf ./supermin-5.1.17.tar.gz 
cd supermin-5.1.17/
sudo apt-get build-dep supermin
./configure 
make
sudo make install
cd ~
wget http://libguestfs.org/download/1.34-stable/libguestfs-1.34.3.tar.gz
tar -xvf ./libguestfs-1.34.3.tar.gz 
cd libguestfs-1.34.3/

Включаем в /etc/apt/sources.list репозитории src

sudo apt-get update && sudo apt-get build-dep libguestfs
./configure 
make
sudo make check

ВНИМАНИЕ! Дальше make install делать не нужно. Запускаем так:

./run ./v2v/virt-v2v --version

На ubuntu 14.04 неудачно.

Вариант переноса машин непосредственно с тома vmfs

Я заменю ESXi на ubuntu+kvm, подмонтирую том VMFS с виртуальными машинами, перенесу данные на нативный том ext4 и импортирую виртуальные машины в конфигурацию libvirt. На первый диск вместо ESXi устанавливаем linux, в моем случае - Ububntu Server 16.04. После установки ставим на него все что нужно для хоста KVM и для переноса виртуальных машин.

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virt-goodies vmfs-tools

Теперь можно монтировать том VMFS:

sudo mkdir /mnt/vmfs
sudo vmfs-fuse /dev/cciss/c0d1p1 /mnt/vmfs/

Проверяем, что том смонтировался:

sudo ls /mnt/vmfs

В выводе будет список папок с виртуальными машинами. Образы дисков VMDK поддерживаются без конвертации. Просто копируем их в новое мостоположение:

sudo rsync -avP /mnt/vmfs/ /mnt/vm_images/

Теперь нужно конвертировать файлы vmx в xml. Для этого писпользуем утилиту vmware2libvirt из пакета virt-goodies:

vmware2libvirt -f <source.vmx> > target.xml
virsh -c qemu:///system define file.xml

Скрипт оказался непригоден.

Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/convert_vmware_to_kvm.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1