如何列出 QEMU 虚拟机中模拟的所有设备?

如何列出 QEMU 虚拟机中模拟的所有设备?

我已经在启用了 KVM 的 qemu 中使用以下命令创建了一个 VM。

qemu-kvm -m 1024 -enable-kvm -hda /var/lib/libvirt/images/fedora.img

我想知道为此虚拟机模拟的确切设备,包括存储和网络(我可以看到使用 ifconfig 在虚拟机内部启用的网络接口)。

答案1

info qtree

这个很棒的 QEMU 监控命令以漂亮的树状视图显示了所有 QEMU 设备的放置方式。

您可以通过以下方式获取 QEMU 监视器提示:

  • Ctrl + AC 开启-nographic
  • Ctrl + Alt + ?,其中?1、2、3 等在图形 QEMU 窗口中
  • -monitor telnet::45454,server,nowait然后连接到它telnet 45454

然后例如我可以看到我的网络设备为:

  dev: rtl8139, id ""                                                                                                                                                                                           
    mac = "52:54:00:12:34:56"                                                                                                                                                                                   
    vlan = <null>                                                                                                                                                                                               
    netdev = "net0"                                                                                                                                                                                             
    addr = 03.0                                                                                                                                                                                                 
    romfile = "efi-rtl8139.rom"                                                                                                                                                                                 
    rombar = 1 (0x1)                                                                                                                                                                                            
    multifunction = false                                                                                                                                                                                       
    command_serr_enable = true                                                                                                                                                                                  
    x-pcie-lnksta-dllla = true                                                                                                                                                                                  
    x-pcie-extcap-init = true                                                                                                                                                                                   
    class Ethernet controller, addr 00:03.0, pci id 10ec:8139 (sub 1af4:1100)                                                                                                                                   
    bar 0: i/o at 0xc000 [0xc0ff]                                                                                                                                                                               
    bar 1: mem at 0xfeb51000 [0xfeb510ff]                                                                                                                                                                       
    bar 6: mem at 0xffffffffffffffff [0x3fffe] 

和我的存储设备为:

    bus: virtio-bus
      type virtio-pci-bus
      dev: virtio-blk-device, id ""
        drive = "virtio0"
        logical_block_size = 512 (0x200)
        physical_block_size = 512 (0x200)
        min_io_size = 0 (0x0)
        opt_io_size = 0 (0x0)
        discard_granularity = 4294967295 (0xffffffff)
        write-cache = "auto"
        share-rw = false
        rerror = "auto"
        werror = "auto"
        cyls = 1040 (0x410)
        heads = 16 (0x10)
        secs = 63 (0x3f)
        serial = ""
        config-wce = true
        scsi = false
        request-merging = true
        num-queues = 1 (0x1)
        queue-size = 128 (0x80)
        iothread = ""
        indirect_desc = true
        event_idx = true
        notify_on_empty = true
        any_layout = true
        iommu_platform = false

以及其他 PCI 设备:

  dev: edu, id ""
    addr = 06.0
    romfile = ""
    rombar = 1 (0x1)
    multifunction = false
    command_serr_enable = true
    x-pcie-lnksta-dllla = true
    x-pcie-extcap-init = true
    class Class 00ff, addr 00:06.0, pci id 1234:11e8 (sub 1af4:1100)
    bar 0: mem at 0xfea00000 [0xfeafffff]

在 QEMU v2.12 中测试。

答案2

如果您有权访问客户机,为什么不使用“lspci”之类的东西呢?如果您尝试从主机获取此信息,则需要弄清楚 qemu 使用的默认值。这将根据您使用的版本而有所不同。

我建议您使用 libvirt,而不是手动启动 qemu。这将为您提供更好的客户机 API,并以合理的方式为您提供这些信息(您可以简单地使用它virsh dumpxml来转储客户机的配置,包括所有连接的硬件设备)。

相关内容