LINUX.ORG.RU
решено ФорумAdmin

kvm/qemu эмуляция nvme

 , , ,


1

1

Всем привет. Можно ли как-то в kvm эмулировать ssd диск, чтобы в виртуалке он был виден как /dev/nvme0n1?

Есть вот такой вариант - http://blog.frankenmichl.de/2018/02/13/add-nvme-device-to-vm/, но у меня не завелся. При запуске:

qemu-system-x86_64: -drive /var/lib/libvirt/images/nvme.img,if=none,id=D22: warning: short-form boolean option '/var/lib/libvirt/images/nvme.img' deprecated
Please use /var/lib/libvirt/images/nvme.img=on instead
2023-05-17T09:15:11.776360Z qemu-system-x86_64: -drive /var/lib/libvirt/images/nvme.img,if=none,id=D22: Must specify either driver or file

Может, в virtualbox есть что-то подобное? Но, как я понял, там просто скорость вращение диска меняется на 0, и он по прежнему видится, как /dev/sda.

Может как-то можно сэмулировать nvme в систему и прокинуть в kvm как устройство?

Перемещено hobbit из general

★★

Последнее исправление: nixit (всего исправлений: 4)

Ответ на: комментарий от soomrack

Я делал вот так, как в статье

  <qemu:commandline>
    <qemu:arg value="-drive"/>
    <qemu:arg value="file=/var/lib/libvirt/images/nvme.img,format=raw,if=none,id=NVME1"/>
    <qemu:arg value="-device"/>
    <qemu:arg value="nvme,drive=NVME1,serial=nvme-1"/>
  </qemu:commandline

Сейчас при запуске ругается на занятый pci слот

qemu-system-x86_64: -device {"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pcie.0","addr":"0x1"}: PCI: slot 1 function 0 not available for virtio-vga, in use by nvme,id=(null)

А как вот это в виде xml должно выглядеть, не соображу?

nixit ★★
() автор топика
Ответ на: комментарий от nixit

Понятия не имею, я этими доп прослойками не пользуюсь, я всегда делаю скрипт явным указанием команд:

#!/bin/bash

config=(
    '-name crypto'
    '-pidfile qemu.pid'
    '-D qemu.log'
#    '-daemonize'
    '-boot menu=on'

    # VIDEO
    '-display curses' '-vga virtio'
#    '-monitor none'
#    '-nographic'
#    '-display none -video none'

    # MACHINE
#    '-serial none'
    '-machine pc-q35-7.2,accel=kvm -enable-kvm'
#    '-cpu host -smp cpus=1,cores=1,threads=1,maxcpus=64'
    '-cpu qemu64-v1 -smp cpus=48,cores=1,threads=1,maxcpus=64'
    '-m 64G,slots=3,maxmem=128G'
    '-rtc base=utc,clock=host'
#    '-object rng-random,filename=/dev/random,id=RNG -device virtio-rng-pci,rng=RNG,period=1000,max-bytes=10'

    # DISK
    '-blockdev node-name=ROOT,driver=file,filename=disk.root.8G.raw'
    '-device virtio-blk-pci,drive=ROOT'

    '-blockdev node-name=VAR,driver=file,filename=disk.var.4G.raw'
    '-device virtio-blk-pci,drive=VAR'

    '-blockdev node-name=LOG,driver=file,filename=disk.log.4G.raw'
    '-device virtio-blk-pci,drive=LOG'

    '-blockdev node-name=SUPERUSER,driver=file,filename=disk.superuser.2G.raw'
    '-device virtio-blk-pci,drive=SUPERUSER'

    '-blockdev node-name=DISTFILES,driver=file,filename=disk.distfiles.10G.raw'
    '-device virtio-blk-pci,drive=DISTFILES'

    '-blockdev node-name=SRC,driver=file,filename=disk.src.6G.raw'
    '-device virtio-blk-pci,drive=SRC'

    '-cdrom minimal.iso'

    # NETWORK
#    '-drive if=virtio,format=qcow2,cache=writeback,aio=threads,file=disk.root.8G.qcow2'
#    '-netdev user,id=NIC,net=10.0.2.0/24,host=10.0.2.2,dns=10.0.2.3,dhcpstart=10.0.2.15,restrict=off,hostfwd=tcp:127.0.0.1:10022-10.0.2.15:22'

    '-netdev tap,id=NIC,ifname=tap0,vhost=on,script=no,downscript=no'
    '-device virtio-net-pci,netdev=NIC,mac=00:16:3e:99:00:01,vectors=64'

#    '-net none'
)


kernel=(
    '-kernel'
    'kernel-5.5.13'
    '-append'
    'root=/dev/vda1 nomodeset clocksource=tsc'
)


echo '/usr/bin/qemu-system-x86_64' ${config[@]} "${kernel[@]}" | tee qemu.log
echo ""
/usr/bin/qemu-system-x86_64 ${config[@]} #"${kernel[@]}"

В документации qemu написано, что -drive это для удобства и нет гарантий по сохранению синтаксиса в будущем, единственный стабильный вариант это -blockdev -device.

soomrack ★★★★
()
Ответ на: комментарий от soomrack

В общем, добавил так

  <qemu:commandline>
    <qemu:arg value="-blockdev"/>
    <qemu:arg value="node-name=NVME1,driver=file,filename=/var/lib/libvirt/images/wb_test_b.qcow2"/>
    <qemu:arg value="-device"/>
    <qemu:arg value="nvme,drive=NVME1,serial=123456"/>
  </qemu:commandline>

но результат все тот же

qemu-system-x86_64: -device {"driver":"virtio-vga","id":"video0","max_outputs":1,"bus":"pcie.0","addr":"0x1"}: PCI: slot 1 function 0 not available for virtio-vga, in use by nvme,id=(null)

Видимо, nvme занимает pci слот видюхи. И что с этим делать непонятно

nixit ★★
() автор топика
Ответ на: комментарий от nixit

Лучше все же менять слот у nvme, как советовали выше. Вот так:

  <qemu:commandline>
    <qemu:arg value='-blockdev'/>
    <qemu:arg value='node-name=NVME1,driver=file,filename=/var/lib/libvirt/images/test_a.qcow2'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='nvme,drive=NVME1,serial=654321,addr=06'/>
    <qemu:arg value='-blockdev'/>
    <qemu:arg value='node-name=NVME2,driver=file,filename=/var/lib/libvirt/images/test_b.qcow2'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='nvme,drive=NVME2,serial=123456,addr=07'/>
  </qemu:commandline>

Нужно добавить между <devices></devices>

nixit ★★
() автор топика
Последнее исправление: nixit (всего исправлений: 1)