Вы можете перенести в LXD-кластер виртуальную машину (ВМ), созданную с помощью OVZ-виртуализации. Чтобы сделать это:

  1. Сохраните информацию о правах на файлы ВМ.
  2. Создайте LXD-контейнер для ВМ и очистите его.
  3. Перенесите каталог исходной ВМ в созданный LXD-контейнер.
  4. Восстановите права на файлы ВМ.

    Обратите внимание!

    Вы можете применить этот способ только для переноса ВМ в  LXD-кластер с типом настройки сети "Коммутация".

Пример для ОС CentOS 7


  1. Обновите пакеты ПО до последней версии:

    yum update
    BASH
  2. На запущенной ВМ установите пакет ПО acl:

    yum install acl
    BASH
  3. Установите пакет ПО Cloud-init:

    yum install cloud-init
    CODE
  4.  Cохраните информацию о правах на файлы и каталоги ВМ:

    cd / && getfacl -R / > acl.save
    BASH
  5. Остановите ВМ:

    Обратите внимание!

    Если вы используете VMmanager 5 OVZ, остановите ВМ в панели управления: УправлениеВиртуальные машины → выберите ВМ → кнопка Стоп.

    vzctl stop 109
    BASH

    109 — id OVZ-контейнера ВМ

  6. Сохраните каталог ВМ в архив:

    Если вы используете simfs

    cd /vz/private/109/;tar -czf /109.tgz .
    BASH

    Если вы используете ploop

    mount -t ploop /vz/private/109/root.hdd/DiskDescriptor.xml /media/;cd /media;tar -czf /109.tgz .
    BASH
  7. Скопируйте созданный архив на узел LXD-кластера.
  8. В интерфейсе VMmanager cоздайте ВМ в LXD-кластере и остановите её.

    Обратите внимание!

    Создайте ВМ с той же ОС и теми же параметрами, что у исходной ВМ.

  9. Определите, где находится контейнер с ВМ:

    zfs list
    BASH
  10. Примонтируйте контейнер с созданной ВМ:

    zfs mount tank/containers/vm-624
    BASH

    tank — имя ZFS-пула

    vm-624 — имя ВМ

  11. Очистите контейнер:

    rm -rf /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/*
    BASH
  12. Распакуйте архив с исходной ВМ:

    tar -xf 109.tgz -C /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs
    BASH
  13. Измените владельца файловой системы на root-пользователя LXD-контейнера:

    chown 1000000:1000000 /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/ -R
    BASH
  14. Удалите старые конфигурационные файлы сети:

    rm /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/etc/sysconfig/network-scripts/ifcfg-venet*
    CODE
  15. Отредактируйте файл /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/etc/sysconfig/network:

    Пример файла

    NETWORKING="yes"
    GATEWAYDEV="venet0"
    NETWORKING_IPV6="yes"
    IPV6_DEFAULTDEV="venet0"
    HOSTNAME="example.com"
    CODE
  16. Создайте новый конфигурационный файл для сетевого интерфейса:

    touch /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/etc/sysconfig/network-scripts/ifcfg-ens1
    CODE

    Содержимое файла

    # Created by cloud-init on instance boot automatically, do not edit.
    #
    BOOTPROTO=none
    DEFROUTE=yes
    DEVICE=ens1
    DNS1=8.8.8.8
    DNS2=1.1.1.1
    DNS3=77.88.8.8
    GATEWAY=10.13.0.1
    IPADDR=10.13.0.156
    IPADDR1=10.13.0.157
    NETMASK=255.255.255.0
    NETMASK1=255.255.255.255
    ONBOOT=yes
    STARTMODE=auto
    TYPE=Ethernet
    USERCTL=no
    CODE
  17. Отмонтируйте контейнер:

    zfs umount tank/containers/vm-624
    BASH
  18. Удалите содержимое директории /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/.

  19. Запустите ВМ в интерфейсе VMmanager.

  20. Восстановите права на файлы ВМ:

    lxc exec vm-624 bash
    BASH
    cd / && setfacl --restore=acl.save
    BASH
  21. Перезагрузите ВМ для применения настроек:

    reboot
    BASH

Пример для ОС Debian 9


  1. Обновить пакеты ПО до последней версии:

    apt update && apt upgrade
    BASH
  2. На запущенной ВМ установите пакет ПО acl:

    apt install acl
    BASH
  3. Если на сервере не установлена утилита curl, установите её: 
    apt install curl
    BASH
  4. Загрузите пакеты ПО Cloud-init:

    curl -O https://download.ispsystem.com/external/cloud-init/stretch/cloud-guest-utils_0.29-1_all.deb -O https://download.ispsystem.com/external/cloud-init/stretch/cloud-image-utils_0.29-1_all.deb -O https://download.ispsystem.com/external/cloud-init/stretch/cloud-init_20.2-2~deb10u1_all.deb -O https://download.ispsystem.com/external/cloud-init/stretch/cloud-utils-euca_0.29-1_all.deb -O https://download.ispsystem.com/external/cloud-init/stretch/cloud-utils_0.29-1_all.deb 
    CODE
  5. Установите ПО Cloud-init:

    dpkg -i cloud-*
    
    BASH
    apt --fix-broken install -y
    BASH
    dpkg -i cloud-*
    BASH
  6.  Cохраните информацию о правах на файлы и каталоги ВМ:

    cd / && getfacl -R / > acl.save
    BASH
  7. Остановите ВМ:

    Обратите внимание!

    Если вы используете VMmanager 5 OVZ, остановите ВМ в панели управления: УправлениеВиртуальные машины → выберите ВМ → кнопка Стоп.

    vzctl stop 109
    BASH

    109 — id OVZ-контейнера ВМ

  8. Сохраните каталог ВМ в архив:

    Если вы используете simfs

    cd /vz/private/109/;tar -czf /109.tgz .
    BASH

    Если вы используете ploop

    mount -t ploop /vz/private/109/root.hdd/DiskDescriptor.xml /media/;cd /media;tar -czf /109.tgz .
    BASH
  9. Скопируйте созданный архив на узел LXD-кластера.
  10. В интерфейсе VMmanager cоздайте ВМ в LXD-кластере и остановите её.

    Обратите внимание!

    Создайте ВМ с той же ОС и теми же параметрами, что у исходной ВМ.

  11. Определите, где находится контейнер с ВМ:

    zfs list
    BASH
  12. Примонтируйте контейнер с созданной ВМ:

    zfs mount tank/containers/vm-624
    BASH

    tank — имя ZFS-пула

    vm-624 — имя ВМ

  13. Очистите контейнер:

    rm -rf /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/*
    BASH
  14. Распакуйте архив с исходной ВМ:

    tar -xf 109.tgz -C /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs
    BASH
  15. Измените владельца файловой системы на root-пользователя LXD-контейнера:

    chown 1000000:1000000 /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/ -R
    BASH
  16. Отредактируйте конфигурационный файл сетевого интерфейса:

    vi /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/rootfs/etc/network/interfaces
    CODE

    Содержимое файла

    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    source /etc/network/interfaces.d/*
    CODE
  17. Отредактируйте конфигурационный файл сетевых настроек для Cloud-init:

    vi /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-882-deb9v1/rootfs/etc/network/interfaces.d/50-cloud-init
    CODE

    Содержимое файла

    # This file is generated from information provided by the datasource.  Changes
    # to it will not persist across an instance reboot.  To disable cloud-init's
    # network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    auto lo
    iface lo inet loopback
    
    auto ens1
    iface ens1 inet static
        address 10.13.0.162/24
        dns-nameservers 77.88.8.8 8.8.8.8 1.1.1.1
        gateway 10.13.0.1
    CODE
  18. Отмонтируйте контейнер:

    zfs umount tank/containers/vm-624
    BASH
  19. Удалите содержимое директории /var/snap/lxd/common/lxd/storage-pools/zfs_pool/containers/vm-624/.

  20. Запустите ВМ в интерфейсе VMmanager.

  21. Восстановите права на файлы ВМ:

    lxc exec vm-624 bash
    BASH
    cd / && setfacl --restore=acl.save
    BASH
  22. Перезагрузите ВМ для применения настроек:

    reboot
    BASH