qemu:如何获取图像 UUID

qemu: how to get image UUID

我想将现有映像 (file.vhd) 安装到 运行 来宾:

<!-- attach.xml -->
<disk type='file' device='disk'>
    <driver name='qemu' type='vpc' cache='none' io='native' dataplane='on' />
    <source file='/path/to/file.vhd'/>
    <target dev='vdf'/>
</disk>

然后

# virsh attach-device guest1 attach.xml

这里,我想挂载file.vhdguest1/dev/vdf下,但是当guest1上只有两个设备时,file.vhd将挂载到 /dev/vdc/dev/vda/dev/vbd 已被现有的 2 个磁盘占用),所以如果不登录 [=15],我不知道 file.vhd 将挂载到哪里=] 用于检查。

如何在挂载前知道挂载点file.vhd

顺便说一句,同时可能有其他客户端附加some.vhdguest1,所以只需检查guest1上的下一个挂载点远程可能无法工作。

我知道 lsblk 可以像这样列出设备的 UUID:

# lsblk -nio NAME,UUID

我不知道 UUID 是否存在于我附加到 guest1 之前的 file.vhd 中,或者仅由 guest1 生成。如果UUID存在于file.vhd,如何获取?

我试过多次将同一个file.vhd文件挂载到guest1(使用不同的/dev/vd*),它们的UUID似乎是相同的,所以我认为UUID 可能存在于 file.vhd 中,但我仍然不确定。

libguestfs 提供了一组用于操作/检查磁盘映像的工具。这能够报告与来宾磁盘映像内的任何文件系统关联的标签和 UUID。例如http://libguestfs.org/virt-filesystems.1.html

 $ virt-filesystems -a win.img --all --long --uuid -h
 Name      Type       VFS  Label           Size Parent   UUID
 /dev/sda1 filesystem ntfs System Reserved 100M -        F81C92571C92112C
 /dev/sda2 filesystem ntfs -               20G  -        F2E8996AE8992E3B
 /dev/sda1 partition  -    -               100M /dev/sda -
 /dev/sda2 partition  -    -               20G  /dev/sda -
 /dev/sda  device     -    -               20G  -        -

一个可能更简单的替代方法(特别是如果您在磁盘中只有一个分区)是在磁盘中指定一个唯一的序列字符串 XML 例如

<disk type='file' device='disk'>
    <driver name='qemu' type='vpc' cache='none' io='native' dataplane='on' />
    <source file='/path/to/file.vhd'/>
    <serial>XXXXXXXXXX</serial>
    <target dev='vdf'/>
</disk>

序列字段中的文本包含在 /dev/disk/by-path 符号链接中,允许您使用可预测的设备名称来挂载它。