我运行一个小型内部云,利用 3 个冗余、具有实时迁移能力的 Ubuntu/Qemu/KVM 主机和大约 30 个混合操作系统虚拟机。
池卷是 BTRFS,在你们任何人对我提出这个问题之前:这是一家小商店,实用性比性能更重要,所以拉上拉链!
话虽如此,我们仍然应该尽可能地缓解性能问题。替代方案是在音量级别或文件级别关闭 COW。
我不想用 nocow 安装 BTRFS,因为担心会以任何方式干扰 BTRFS 带来的真正酷炫的快照和备份功能。小商店,大量自动化,不想冒险!
因此,我选择使用实用程序-o nocow=on
下的选项创建 .qcow2 VM 卷qemu-img
。这似乎工作得很好。我节省了空间(比原始文件节省了空间),性能也很好。我确实需要定期对它们进行碎片整理,virsh blockcopy ... -pivot
但这可以通过 cron 来完成,所以我关心什么呢?
但它有点困扰着我:一个人会失去什么能力-o nocow=on
?
答案1
使用以下选项创建的文件qemu-img create -o nocow=on
无法复制cp --reflink=always
:
root@cview:/kvm# btrfs subvolume create ./tmpvol
Create subvolume './tmpvol'
root@cview:/kvm# qemu-img create -f qcow2 cow.qcow2 10G
Formatting 'cow.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
root@cview:/kvm# qemu-img create -f qcow2 -o nocow=on nocow.qcow2 10G
Formatting 'nocow.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16 nocow=on
root@cview:/kvm# cp --reflink=always cow-*.qcow2 ./tmpvol
cp: failed to clone './tmpvol/cow-no.qcow2' from 'cow-no.qcow2': Invalid argument
root@cview:/kvm# ls -l ./tmpvol
total 196
-rw-r--r-- 1 root root 0 Nov 15 07:54 cow-no.qcow2
-rw-r--r-- 1 root root 196768 Nov 15 07:54 cow-yes.qcow2
这次失败会产生一个零长度的文件。
真有趣。直到今天我才有机会使用它cp --reflink
。我立刻想到了这篇文章。