Передача блочного устройства в Qemu

Вопрос или проблема

Передача блочного устройства в Qemu 3.0.1 таким образом работает, но выдает предупреждение оdeprecated:

-blockdev file,node-name=f1,filename=/dev/loop0 \
-blockdev raw,node-name=q1,file=f1 \
-device virtio-blk,drive=q1

Предупреждение:

qemu-system-x86_64: -blockdev file,node-name=f1,filename=/dev/loop0: 
  предупреждение: Открытие блочного устройства как файла с использованием драйвера 'file'
    устарело

Справедливо, но как передать блочное устройство в qemu без использования драйвера ‘file’?

Вам следует использовать host_device вместо, что, безусловно, сложно, так как это не задокументировано.

В вашем случае, неустаревшие опции – это

-blockdev node-name=q1,driver=raw,file.driver=host_device,file.filename=/dev/loop0 \
-device virtio-blk,drive=q1

Ответ или решение

Передача блочного устройства в QEMU может быть осуществлена с использованием различных методов, однако важно избегать устаревших методов, чтобы обеспечить долгосрочную стабильность и безопасность вашей виртуальной среды. В частности, с версии QEMU 3.0.1 открытие блочного устройства как файла через драйвер ‘file’ вызывает предупреждение о депрекации.

Проблема

В вашем текущем подходе использование следующей команды:

-blockdev file,node-name=f1,filename=/dev/loop0 \
-blockdev raw,node-name=q1,file=f1 \
-device virtio-blk,drive=q1

вызывает следующее предупреждение:

qemu-system-x86_64: -blockdev file,node-name=f1,filename=/dev/loop0: 
  warning: Opening a block device as a file using the 'file' driver
    is deprecated

Решение

Для того чтобы избежать устаревшего метода, вам необходимо использовать драйвер host_device. Это позволит вам напрямую обращаться к блочному устройству без необходимости его предварительного открытия как файла. Пропишите команду следующим образом:

-blockdev node-name=q1,driver=raw,file.driver=host_device,file.filename=/dev/loop0 \
-device virtio-blk,drive=q1

Подробное объяснение

  • blockdev: Эта опция определяет блочное устройство, где node-name=q1 задает имя узла для использования в других частях команды.

  • driver: Указание driver=raw позволяет QEMU знать, что оно работает с необработанными данными, что является специфичным для низкоуровневых блочных устройств.

  • file.driver=host_device: Этот параметр указывает, что файл является блочным устройством хоста, что позволяет избежать использования устаревшего драйвера.

  • file.filename=/dev/loop0: Указывает фактический путь к блочному устройству, которое вы хотите использовать.

  • device virtio-blk,drive=q1: Эта команда подключает виртуализированное блочное устройство virtio-blk, используя ранее определённое блочное устройство q1.

Заключение

С переходом на метод использования драйвера host_device вы не только устраняете предупреждение о депрекации, но и обеспечиваете более эффективное взаимодействие с вашим блочным устройством. Это поможет избежать возможных проблем в будущем и повысит стабильность работы QEMU. Не забывайте также просматривать официальную документацию и комментарии кода QEMU для обновлений и новых возможностей, которые могут улучшить вашу виртуализацию.

Оцените материал
Добавить комментарий

Капча загружается...