qemu: как получить 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.vhd к guest1 и под /dev/vdf, но когда на guest1 существует только два устройства, file.vhd будет монтироваться на /dev/vdc (/dev/vda и /dev/vbd заняты существующими 2 дисками), поэтому я не могу знать, где file.vhd будет смонтирован без входа в guest1 для проверки.

Как сделать так, чтобы можно было узнать точку монтирования до того, как я смонтирую file.vhd?

Кстати, в то же время может быть другой клиент, подключенный some.vhd к guest1, поэтому просто проверьте следующую точку монтирования на guest1 удаленно, может не работать.

Я знаю, что lsblk может отображать UUID устройства следующим образом:

# lsblk -nio NAME,UUID

Я не знаю, существовал ли UUID в file.vhd до того, как я присоединился к guest1, или он был сгенерирован только guest1. Если UUID существует в пределах file.vhd, как его получить?

Я пытался смонтировать один и тот же файл file.vhd в guest1 несколько раз (с разными /dev/vd*), кажется, что их UUID одинаковы, поэтому я думаю, что UUID может существовать в file.vhd, но я все еще не уверен.


person coanor    schedule 19.03.2017    source источник


Ответы (1)


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, что позволяет вам иметь предсказуемое имя устройства для его монтирования.

person DanielB    schedule 20.03.2017
comment
Как только serial назначено, я могу использовать udevadm, чтобы зациклить все устройства для serial: udevadm info --query=property --name=/dev/vd[a-z] | grep 'ID_SERIAL=' - person coanor; 22.03.2017