使用qemu-img 2.8,如何将原始图像转换为luks加密qcow图像?

wan*_*gbo 3 qemu

我正在尝试将原始图像文件转换为带有 luks 加密的 qcow2。我搜索了很多,大部分都使用“-o 加密 = on”,但它将来会在 qemu-img 工具中删除。

我使用的是 qemu-img 2.8 版本,我尝试这个命令:

qemu-img convert --object secret,data=123456,id=sec0 -O luks -o key-secret=sec0 raw.img demo.luks

qemu-img: Could not open 'demo.luks': Parameter 'key-secret' is required for cipher
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题吗?如果这个luks加密qcow2创建成功,是否需要更改qemu-system-x86-64参数来运行这个图像?

小智 6

不幸的是,在任何已发布的 QEMU 版本中,qemu-img 中的“convert”命令不支持输出 luks 格式图像所需的语法。

它是当前的 GIT master,有一个轻微的改进 - 现在您可以使用 LUKS 图像作为目标,前提是您预先创建了 LUKS 图像。首先使用“qemu-img create”创建一个没有写入任何数据的空 luks 映像,然后转换为该映像。

首先我有一些之前创建的随机 qcow2 图像

$ qemu-img create -f qcow2 demo.qcow2 10M
Run Code Online (Sandbox Code Playgroud)

我已经在来宾中使用它或以其他方式向其写入数据,现在想要转换为 luks。首先,我必须创建一个大小完全相同的 luks 图像:

$ qemu-img create -f luks --object secret,data=123,id=sec0  \
    -o key-secret=sec0 demo.luks  10M
Run Code Online (Sandbox Code Playgroud)

现在我可以从 qcow2 图像中提取数据,并将其写入 luks 图像中:

$ qemu-img convert --target-image-opts \
    --object secret,data=123,id=sec0 -f qcow2 demo.qcow2 -n \
    driver=luks,file.filename=demo.luks,key-secret=sec0
Run Code Online (Sandbox Code Playgroud)

注意,如上所述,这是目前仅在 GIT master 中的功能

commit 305b4c60f200ee8e6267ac75f3f5b5d09fda1079
Author: Daniel P. Berrange <berrange@redhat.com>
Date:   Mon May 15 17:47:11 2017 +0100

    qemu-img: introduce --target-image-opts for 'convert' command
Run Code Online (Sandbox Code Playgroud)

因此,第一个可用的版本是下一个 QEMU 2.10 版本。