Вопрос или проблема
Передача блочного устройства в 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 для обновлений и новых возможностей, которые могут улучшить вашу виртуализацию.