1. はじめに
Rackwareは現在、SUSE + btrfsの移行をサポートしていないので、virt-v2vで移行できるかを確かめてみた。
ただ、SUSEそのものは持っていないので、OpenSUSEをVMWare上にインストールして検証している。手順のほとんどは、これと同じなので、何を実施したかの概要しか説明していない。
2. VMware環境上のOpenSuse環境の確認
OpenSuse環境のインストール手順は省略。btrfsがroot file systemとして利用されている。
syasuda@opensuse-syasuda1:~> cat /etc/os-release
NAME="openSUSE Leap"
VERSION="16.0"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="16.0"
PRETTY_NAME="openSUSE Leap 16.0"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:16.0"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"
syasuda@opensuse-syasuda1:~> df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 btrfs 24G 810M 23G 4% /
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 985M 0 985M 0% /dev/shm
tmpfs tmpfs 394M 744K 394M 1% /run
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service
/dev/sda3 btrfs 24G 810M 23G 4% /.snapshots
/dev/sda3 btrfs 24G 810M 23G 4% /boot/grub2/i386-pc
/dev/sda3 btrfs 24G 810M 23G 4% /boot/grub2/x86_64-efi
/dev/sda3 btrfs 24G 810M 23G 4% /home
/dev/sda3 btrfs 24G 810M 23G 4% /opt
/dev/sda3 btrfs 24G 810M 23G 4% /srv
/dev/sda3 btrfs 24G 810M 23G 4% /root
/dev/sda3 btrfs 24G 810M 23G 4% /tmp
/dev/sda3 btrfs 24G 810M 23G 4% /usr/local
/dev/sda3 btrfs 24G 810M 23G 4% /var
/dev/sda2 vfat 512M 4.0M 508M 1% /boot/efi
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service
tmpfs tmpfs 197M 4.0K 197M 1% /run/user/1000
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/serial-getty@ttyS0.service
syasuda@opensuse-syasuda1:~> lsblk -pf
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/sda
├─/dev/sda1
├─/dev/sda2 vfat FAT16 EFI BE2D-B7C2 507.8M 1% /boot/efi
└─/dev/sda3 btrfs ROOT 41b87736-08cc-6bd0-85de-d844cd161676 22.2G 3% /var
/usr/local
/tmp
/root
/srv
/opt
/home
/boot/grub2/x86_64-efi
/boot/grub2/i386-pc
/.snapshots
/
/dev/sr0
syasuda@opensuse-syasuda1:~> nmcli con show
NAME UUID TYPE DEVICE
ens192 6a12b10a-ddf4-49a9-83fd-f797a6e8cc0b ethernet ens192
lo 2ee90eea-b0f0-4e4f-b19e-8d6effbc78c0 loopback lo
syasuda@opensuse-syasuda1:~> nmcli dev show
GENERAL.DEVICE: ens192
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:50:56:9D:30:42
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: ens192
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 10.153.35.253/27
IP4.GATEWAY: 10.153.35.225
IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 10.153.35.225, mt = 20100
IP4.ROUTE[2]: dst = 10.153.35.224/27, nh = 0.0.0.0, mt = 100
IP4.DNS[1]: 10.0.80.11
IP4.DNS[2]: 10.0.80.12
IP6.ADDRESS[1]: fe80::250:56ff:fe9d:3042/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 256
GENERAL.DEVICE: lo
GENERAL.TYPE: loopback
GENERAL.HWADDR: 00:00:00:00:00:00
GENERAL.MTU: 65536
GENERAL.STATE: 100 (connected (externally))
GENERAL.CONNECTION: lo
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]: 127.0.0.1/8
IP4.GATEWAY: --
IP6.ADDRESS[1]: ::1/128
IP6.GATEWAY: --
syasuda@opensuse-syasuda1:~> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:9d:30:42 brd ff:ff:ff:ff:ff:ff
altname enp11s0
altname enx0050569d3042
inet 10.153.35.253/27 brd 10.153.35.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe9d:3042/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
syasuda@opensuse-syasuda1:~> ip r
default via 10.153.35.225 dev ens192 proto static metric 20100
10.153.35.224/27 dev ens192 proto kernel scope link src 10.153.35.253 metric 100
opensuse-syasuda1:~ # rpm -qa | grep cloud-init
opensuse-syasuda1:~ # ls -l /var/lib/cloud
ls: cannot access '/var/lib/cloud': No such file or directory
opensuse-syasuda1:~ # ls -l /etc/lib/cloud
ls: cannot access '/etc/lib/cloud': No such file or directory
opensuse-syasuda1:~ # ls -l /etc/cloud
ls: cannot access '/etc/cloud': No such file or directory
3. 変換の実施
-
Converter VSIのセットアップなど詳細な手順はこれを参照。
-
Gen1ストレージ付きの暫定VSI for VPCをCentOS10で作成。Auto-DeleteはDisabledにする。その後、この暫定VSIを削除して、Boot DISKを得る。
-
Converter VSIに上記Boot DISKをアタッチ。/dev/vdeが割り当てられたことを以下で確認。
Converer VSI上でのディスク確認root@syasuda-converter-fedora:~# lsblk -pf NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS /dev/vda ├─/dev/vda1 ├─/dev/vda2 vfat FAT16 EFI-SYSTEM 7B77-95E7 ├─/dev/vda3 ext4 1.0 boot 99d3b227-8df4-44aa-9e03-c7f3dbc6b118 45M 81% /boot └─/dev/vda4 xfs root d0463b38-8446-453c-83bf-8d7a8a6f8b60 89G 10% /var /sysroot/ostree/deploy/fedora-coreos/var /sysroot /etc /dev/vdb iso9660 Joliet Extension cidata 2026-10-22-01-34-42-00 /dev/vdc swap 1 SWAP-xvdb1 238abd1c-dd21-4e1a-b01a-6de74299c8fa /dev/vdd ext4 1.0 12e543f7-69a7-457c-bf6d-b447ea2b1842 /dev/vde ├─/dev/vde1 ├─/dev/vde2 vfat FAT16 EFI 3E93-A4FF └─/dev/vde3 xfs ROOT 4a4e2c6d-cef5-4496-8fc5-150e0d5eb189 -
Converter VSI上で、以下のスクリプトを作成して実行。
createlink_opensuse.shVM_NAME=syasuda-opensuse16 TARGET_DEV=/dev/vde SYMLINK="/tmp/${VM_NAME}-sda" ln -fs "${TARGET_DEV}" "${SYMLINK}" ls -l "${SYMLINK}"root@syasuda-converter-fedora:~# bash createlink_opensuse.sh lrwxrwxrwx. 1 root root 8 Oct 22 10:40 /tmp/syasuda-opensuse16-sda -> /dev/vde -
VMware環境上のVMの正常停止
-
Converter VSIで変換を実施。指定するスクリプトは以下を利用。
root@syasuda-converter-fedora:~# virt-v2v -ic 'vpx://vsphere.local%5CAdministrator@vcsosv-vc.acs.japan.local/IBMCloud/vcs-osv-cluster/host-km000.acs.japan.local?no_verify=1' -it vddk -io vddk-libdir=/opt/vmware-vix-disklib-distrib/ -io vddk-thumbprint=D2:AE:CF:26:22:8C:89:13:A4:67:89:19:7F:64:1C:97:35:C8:11:54 "syasuda-opensuse16" -ip vcenter_passwd.txt -o disk -os /tmp --run nwscript-update-suse.sh [ 0.0] Setting up the source: -i libvirt -ic vpx://vsphere.local%5CAdministrator@vcsosv-vc.acs.japan.local/IBMCloud/vcs-osv-cluster/host-km000.acs.japan.local?no_verify=1 -it vddk syasuda-opensuse16 [ 1.6] Opening the source [ 11.0] Checking filesystem integrity before conversion [ 25.8] Detecting if this guest uses BIOS or UEFI to boot [ 26.2] Inspecting the source [ 29.0] Detecting the boot device [ 29.2] Checking for sufficient free disk space in the guest [ 29.2] Converting openSUSE Leap 16.0 (opensuse16.0) to run on KVM virt-v2v: warning: could not determine a way to update the configuration of Grub2 virt-v2v: The QEMU Guest Agent will be installed for this guest at first boot. virt-v2v: This guest has virtio drivers installed. [ 37.8] Setting a random seed [ 37.8] Running: nwscript-update-suse.sh [ 38.8] SELinux relabelling [ 40.8] Mapping filesystem data to avoid copying unused and blank areas [ 46.1] Checking filesystem integrity after conversion [ 47.4] Closing the overlay [ 47.4] Assigning disks to buses [ 47.4] Checking if the guest needs BIOS or UEFI to boot [ 47.4] Setting up the destination: -o disk -os /tmp [ 49.3] Copying disk 1/1 █ 100% [****************************************] [ 574.0] Creating output metadata virt-v2v: warning: get_osinfo_id: unknown guest operating system: opensuse16.0 [ 574.0] Finishing offnwscript-update-suse.sh#!/bin/bash set -e ############################################ # SLES/openSUSE (update kernel parameter) ############################################ if grep -qiE '^(ID=sles|ID="sles"|ID=opensuse-leap|ID="opensuse-leap")' /etc/os-release; then GRUB_CFG="/etc/default/grub" CMDLINE=$(grep '^GRUB_CMDLINE_LINUX=' "$GRUB_CFG" | cut -d'"' -f2) CMDLINE_DEFAULT=$(grep '^GRUB_CMDLINE_LINUX_DEFAULT=' "$GRUB_CFG" | cut -d'"' -f2) [[ "$CMDLINE_DEFAULT" != *net.ifnames=0* && "$CMDLINE" != *net.ifnames=0* ]] && CMDLINE="$CMDLINE net.ifnames=0" [[ "$CMDLINE_DEFAULT" != *biosdevname=0* && "$CMDLINE" != *biosdevname=0* ]] && CMDLINE="$CMDLINE biosdevname=0" [[ "$CMDLINE_DEFAULT" != *vga=normal* && "$CMDLINE" != *vga=normal* ]] && CMDLINE="$CMDLINE vga=normal" [[ "$CMDLINE_DEFAULT" != *console=tty1* && "$CMDLINE" != *console=tty1* ]] && CMDLINE="$CMDLINE console=tty1" [[ "$CMDLINE_DEFAULT" != *console=ttyS0* && "$CMDLINE" != *console=ttyS0* ]] && CMDLINE="$CMDLINE console=ttyS0" sed -i \ "s|^GRUB_CMDLINE_LINUX=.*|GRUB_CMDLINE_LINUX=\"$CMDLINE\"|" \ "$GRUB_CFG" grub2-mkconfig -o /boot/grub2/grub.cfg 2>/dev/null || true fi ############################################ # Network Settings ############################################ rm -f /etc/NetworkManager/system-connections/* || true rm -f /etc/sysconfig/network/ifcfg-* || true rm -f /etc/sysconfig/network/routes || true rm -f /etc/udev/rules.d/70-persistent-net.rules || true ############################################ # keyfile for NetworkManager ############################################ if grep -qiE '^(ID=sles|ID="sles"|ID=opensuse-leap|ID="opensuse-leap")' /etc/os-release; then cat <<EOF >/etc/NetworkManager/system-connections/dhcp-any.nmconnection [connection] id=dhcp-any type=ethernet autoconnect=true [ipv4] method=auto [ipv6] method=disabled EOF chmod 600 /etc/NetworkManager/system-connections/dhcp-any.nmconnection fi ############################################ # ifcfg for wicked or NetworkManager ############################################ if [ -d /etc/sysconfig/network ]; then IFCFG_FILE="/etc/sysconfig/network/ifcfg-eth0" cat > "$IFCFG_FILE" <<EOF BOOTPROTO='dhcp' DEVICE='eth0' STARTMODE='auto' EOF chmod 600 "$IFCFG_FILE" fi -
DISKのフラッシュ
root@syasuda-converter-fedora:~# blockdev --flushbufs /dev/vde -
Converter VSIからディスクをdetach
-
新規にこのディスクをBoot DiskとしてVSI for VPCをプロビジョニング
4. 起動後の確認
opensuse-syasuda1:~ # cat /etc/os-release
NAME="openSUSE Leap"
VERSION="16.0"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="16.0"
PRETTY_NAME="openSUSE Leap 16.0"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:16.0"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
DOCUMENTATION_URL="https://en.opensuse.org/Portal:Leap"
LOGO="distributor-logo-Leap"
opensuse-syasuda1:~ # df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda3 btrfs 24G 1007M 23G 5% /
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 1.6G 608K 1.6G 1% /run
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service
/dev/vda3 btrfs 24G 1007M 23G 5% /.snapshots
/dev/vda3 btrfs 24G 1007M 23G 5% /boot/grub2/x86_64-efi
/dev/vda3 btrfs 24G 1007M 23G 5% /home
/dev/vda3 btrfs 24G 1007M 23G 5% /opt
/dev/vda3 btrfs 24G 1007M 23G 5% /boot/grub2/i386-pc
/dev/vda3 btrfs 24G 1007M 23G 5% /root
/dev/vda3 btrfs 24G 1007M 23G 5% /srv
/dev/vda3 btrfs 24G 1007M 23G 5% /tmp
/dev/vda3 btrfs 24G 1007M 23G 5% /usr/local
/dev/vda3 btrfs 24G 1007M 23G 5% /var
/dev/vda2 vfat 512M 4.0M 508M 1% /boot/efi
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service
tmpfs tmpfs 1.0M 0 1.0M 0% /run/credentials/serial-getty@ttyS0.service
tmpfs tmpfs 794M 4.0K 794M 1% /run/user/1000
opensuse-syasuda1:~ # lsblk -pf
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/vda
├─/dev/vda1
├─/dev/vda2 vfat FAT16 EFI BE2D-B7C2 507.8M 1% /boot/efi
└─/dev/vda3 btrfs ROOT 41b87736-08cc-6bd0-85de-d844cd161676 22.1G 4% /var
/usr/local
/tmp
/srv
/root
/boot/grub2/i386-pc
/opt
/home
/boot/grub2/x86_64-efi
/.snapshots
/
/dev/vdb iso9660 Joliet Extension cidata 2026-10-22-02-40-26-00
/dev/vdc swap 1 SWAP-xvdb1 3b1abd86-7fc2-4401-ac3c-9b47ed928430
opensuse-syasuda1:~ # nmcli con
NAME UUID TYPE DEVICE
dhcp-any 27b549ef-0d09-30fe-80ee-63d2c2727120 ethernet eth0
lo e4135082-fc13-4b35-8734-f3d2d3ca2570 loopback lo
opensuse-syasuda1:~ # nmcli dev show
GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 02:00:07:DE:54:A8
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: dhcp-any
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 10.239.0.20/24
IP4.GATEWAY: 10.239.0.1
IP4.ROUTE[1]: dst = 10.239.0.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 10.239.0.1, mt = 100
IP4.DNS[1]: 161.26.0.7
IP4.DNS[2]: 161.26.0.8
IP6.GATEWAY: --
GENERAL.DEVICE: lo
GENERAL.TYPE: loopback
GENERAL.HWADDR: 00:00:00:00:00:00
GENERAL.MTU: 65536
GENERAL.STATE: 100 (connected (externally))
GENERAL.CONNECTION: lo
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]: 127.0.0.1/8
IP4.GATEWAY: --
IP6.ADDRESS[1]: ::1/128
IP6.GATEWAY: --
opensuse-syasuda1:~ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:00:07:de:54:a8 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3
altname enx020007de54a8
inet 10.239.0.20/24 brd 10.239.0.255 scope global dynamic noprefixroute eth0
valid_lft 156sec preferred_lft 156sec
opensuse-syasuda1:~ # ip r
default via 10.239.0.1 dev eth0 proto dhcp src 10.239.0.20 metric 100
10.239.0.0/24 dev eth0 proto kernel scope link src 10.239.0.20 metric 100
opensuse-syasuda1:~ # cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.12.0-160000.39-default root=UUID=41b87736-08cc-6bd0-85de-d844cd161676 net.ifnames=0 biosdevname=0 vga=normal console=tty1 rw quiet systemd.show_status=1 console=ttyS0,115200 console=tty0 security=selinux selinux=1