私は現在qcow2ファイルに保存されているいくつかの仮想マシンをZFS ZVOLに移行しようとしています。
実際にこれを行うかどうかを決定する前にやりたいことの1つは、電源がオフになっている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アプローチをテストしています。