현재 qcow2 파일에 저장된 일부 가상 머신을 ZFS ZVOL로 마이그레이션하려고 합니다.
정말로 이 작업을 수행할지 결정하기 전에 하고 싶은 한 가지는 전원이 꺼진 VM의 스냅샷을 생성한 다음 해당 스냅샷을 읽기 전용 모드로 호스트에 마운트하여 탐색할 수 있는지 확인하는 것입니다. 자유롭게 파일을 보거나 복사할 수 있습니다.
다음과 같은 워크플로가 있습니다.
정보 얻기:
/kvm-images $ sudo qemu-img info Ubuntu-Server-20.04.qcow2
image: Ubuntu-Server-20.04.qcow2
file format: qcow2
virtual size: 128 GiB (137438953472 bytes)
disk size: 41.4 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
ZVOL 생성
/kvm-images $ sudo zfs create -V 137438953472 tank/kvm-images/Ubuntu-Server-20.04
qcow2 파일에서 ZVOL로 이미지 내보내기
/kvm-images $ sudo qemu-img convert -O raw /kvm-images/Ubuntu-Server-20.04.qcow2 /dev/zvol/tank/kvm-images/Ubuntu-Server-20.04
그런 다음 VM Virtio Disk 1 xml을 수정합니다.
<disk type="file" device="disk">
<driver name="qemu" type="qcow2"/>
<source file="/kvm-images/Ubuntu-Server-20.04.qcow2"/>
<target dev="vda" bus="virtio"/>
<boot order="1"/>
<address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
</disk>
도착하다
<disk type="block" device="disk">
<driver name="qemu" type="raw" cache="none" io="native" discard="unmap"/>
<source dev="/dev/zvol/tank/kvm-images/Ubuntu-Server-20.04" index="2"/>
<backingStore/>
<target dev="vda" bus="virtio"/>
<boot order="1"/>
<alias name="virtio-disk0"/>
<address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
</disk>
가상 머신으로 부팅할 수 있는데 모든 것이 이전과 같은 것 같습니다.
그래서 VM을 종료하고 스냅샷을 생성했습니다.
/kvm-images $ sudo zfs snapshot tank/kvm-images/Ubuntu-Server-20.04@test-01
보낸 후
sudo zfs set snapdev=visible tank/kvm-images/Ubuntu-Server-20.04
스냅샷의 파티션을 볼 수 있습니다/dev/zvol/tank/kvm-images
/dev/zvol/tank/kvm-images $ ls -lsah
total 0
0 drwxr-xr-x 2 root root 280 Jul 25 16:31 .
0 drwxr-xr-x 3 root root 80 Jul 25 11:47 ..
0 lrwxrwxrwx 1 root root 13 Jul 25 15:53 Ubuntu-Server-20.04 -> ../../../zd48
0 lrwxrwxrwx 1 root root 15 Jul 25 15:53 Ubuntu-Server-20.04-part1 -> ../../../zd48p1
0 lrwxrwxrwx 1 root root 15 Jul 25 15:53 Ubuntu-Server-20.04-part2 -> ../../../zd48p2
0 lrwxrwxrwx 1 root root 15 Jul 25 15:53 Ubuntu-Server-20.04-part3 -> ../../../zd48p3
0 lrwxrwxrwx 1 root root 13 Jul 25 16:31 Ubuntu-Server-20.04@test-01 -> ../../../zd64
0 lrwxrwxrwx 1 root root 15 Jul 25 16:31 Ubuntu-Server-20.04@test-01-part1 -> ../../../zd64p1
0 lrwxrwxrwx 1 root root 15 Jul 25 16:31 Ubuntu-Server-20.04@test-01-part2 -> ../../../zd64p2
0 lrwxrwxrwx 1 root root 15 Jul 25 16:31 Ubuntu-Server-20.04@test-01-part3 -> ../../../zd64p3
사용해봐도 zfs mount
별 효과가 없었고,
sudo zfs mount tank/kvm-images/Ubuntu-Server-20.04@test-01
Ubuntu-Server-20.04 이후에는 자동으로 수행할 수 없으며 강제로 언급되는 경우
cannot open 'tank/kvm-images/Ubuntu-Server-20.04@test-01': snapshot delimiter '@' is not expected here
그래서 레거시인 것처럼 수동으로 설치해 보았습니다.
sudo mount /dev/zvol/tank/kvm-images/Ubuntu-Server-20.04@test-01-part3 /mnt/snapshots/ubuntu
mount: /mnt/snapshots/ubuntu: unknown filesystem type 'LVM2_member'.
파티션 2( Ubuntu-Server-20.04@test-01-part2
)는 마운트 및 탐색이 가능하며 이 파티션을 포함합니다 /boot
.
발행 sudo vgscan --mknodes
수익률
WARNING: Not using device /dev/zd64p3 for PV aaaaaa-aaaa-aaaa-aaaa-aaaa-aaaa-aaaaaa.
WARNING: PV aaaaaa-aaaa-aaaa-aaaa-aaaa-aaaa-aaaaaa prefers device /dev/zd48p3 because device is used by LV.
Found volume group "ubuntu-vg" using metadata type lvm2
WARNING: Not using device /dev/zd64p3 for PV aaaaaa-aaaa-aaaa-aaaa-aaaa-aaaa-aaaaaa.
WARNING: PV aaaaaa-aaaa-aaaa-aaaa-aaaa-aaaa-aaaaaa prefers device /dev/zd48p3 because device is used by LV.
이러한 고유 ID(aaa)는 모두 동일합니다.
따라서 이러한 모든 결과를 바탕으로 다음 위치에 있는 스냅샷 파일에 어떻게 액세스합니까?/dev/zvol/tank/kvm-images/Ubuntu-Server-20.04@test-01-part3
또한 저는 ZFS를 처음 접했고(지난 주에 ZFS에 대해 많이 읽었습니다) LVM에 대한 경험이 전혀 없습니다(OS 설치 프로그램에서 기본값으로 사용하도록 허용하는 것 제외). 따라서 다른 방법이 있을 수 있습니다. 이 작업에 대한 올바른 방법을 수행하십시오.
qcow2 파일을 ZFS 파일 시스템으로 이동하고 거기에서 계속 사용하면 스냅샷을 만드는 것이 더 쉬워지나요? 이 작업을 수행했고 작동했지만(테스트 스냅샷은 없음) 이것이 CoW의 CoW이므로 피해야 한다는 내용을 읽었으므로 이 ZVOL 접근 방식을 테스트하고 있습니다.