如何更改 qcow2 图像的 zstd 级别?

问题描述 投票:0回答:1

有一个选项

compression_type=zstd
可以为 qcow2 启用 zstd 压缩 根据 wiki

但是它总是使用

zstd level 3
,我该如何用
level 19
来压缩它呢?该图像是只读的,我只想要最大压缩级别。

我现在使用的命令是:

qemu-img convert -p -f qcow2 -O qcow2 -c -o compression_type=zstd,preallocation=off win10.qcow2 win10-zstd.qcow2

其他信息:

Linux fedora 5.17.5-300.fc36.x86_64
qemu-img.x86_64 2:6.2.0-9.fc36  
virtual-machine qemu zstd
1个回答
2
投票

没有命令行选项,所以我们需要修改源代码。开启 ./block/qcow2-threads.c (QEMU v8.2.0):

  224 |  */
+     | ZSTD_CCtx_setParameter(cctx, ZSTD_c_strategy, ZSTD_btultra2);
+     | ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, ZSTD_maxCLevel());
+     | ZSTD_CCtx_setParameter(cctx, ZSTD_c_enableLongDistanceMatching, 1);
  225 | zstd_ret = ZSTD_compressStream2(cctx, &output, &input, ZSTD_e_end);

自行编译或使用我的预构建的二进制文件(构建于GitHub Actions)。

现在我们在

qemu-img
处找到了
./build/softemu
。尝试转换文件:

./qemu-img convert -p -f qcow2 -O qcow2 -c -o compression_type=zstd win10.qcow2 win10-2.qcow2

我们明白了:

[kkocdko@fedora tmpfs]$ ls -l
total 3411264
-rw-r--r--. 1 kkocdko kkocdko 1651638272 Jun 12 01:57  win10-2.qcow2
-rw-r--r--. 1 kkocdko kkocdko 1841496064 May 25 18:21  win10.qcow2

也发布在我的博客

© www.soinside.com 2019 - 2024. All rights reserved.