Bug 1046267
| Summary: | Libvirt can not assign particular USB controller to USB disk in Domain | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Hu Jianwei <jiahu> |
| Component: | libvirt | Assignee: | Martin Kletzander <mkletzan> |
| Status: | CLOSED DUPLICATE | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 7.0 | CC: | ajia, dyuan, mzhan, pzhang, rbalakri, xuzhang |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2015-07-22 14:18:33 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
Moreover, the problem here is that we do not generate the address automatically, but we leave it to qemu and then we don't know what address qemu picked. This is actually the same as Bug 1215968 and Bug 1176772, so I'll mark it as a duplicate. *** This bug has been marked as a duplicate of bug 1215968 *** |
Description of problem: Libvirt can not assign particular USB controller to USB disk in Domain Version-Release number of selected component (if applicable): libvirt-1.1.1-16.el7.x86_64 qemu-kvm-rhev-1.5.3-21.el7.x86_64 kernel-3.10.0-60.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1. Add some USB disks to domain xml ... <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/usb-img/usb-1.img'/> <target dev='sda' bus='usb'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/usb-img/usb-2.img'/> <target dev='sdb' bus='usb'/> </disk> ... 2. Added more than 2 USB controller to domain xml ... <controller type='usb' index='0'> <alias name='usb0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='usb' index='1'> <alias name='usb1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </controller> <controller type='usb' index='2'> <alias name='usb2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </controller> <controller type='usb' index='3'> <alias name='usb3'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </controller> ... 3. Enter into guest OS to check those usb devices [root@localhost ~]# lsusb -t /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/8p, 12M |__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 2: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 3: Dev 6, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 4: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 5: Dev 8, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 6: Dev 9, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 7: Dev 10, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 8: Dev 11, If 0, Class=Hub, Driver=hub/8p, 12M |__ Port 1: Dev 12, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 2: Dev 13, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 3: Dev 14, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 4: Dev 15, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 5: Dev 16, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 6: Dev 17, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 7: Dev 18, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 8: Dev 19, If 0, Class=Hub, Driver=hub/8p, 12M |__ Port 1: Dev 20, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 2: Dev 21, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 3: Dev 22, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 4: Dev 23, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 5: Dev 24, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 6: Dev 25, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 7: Dev 26, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 8: Dev 27, If 0, Class=Hub, Driver=hub/8p, 12M |__ Port 1: Dev 28, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 2: Dev 29, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 3: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 4: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 5: Dev 32, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 6: Dev 33, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 7: Dev 34, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 8: Dev 35, If 0, Class=Hub, Driver=hub/8p, 12M |__ Port 1: Dev 36, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 2: Dev 37, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 3: Dev 38, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 4: Dev 39, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 5: Dev 40, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 6: Dev 41, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 7: Dev 42, If 0, Class=Mass Storage, Driver=usb-storage, 12M |__ Port 8: Dev 43, If 0, Class=Mass Storage, Driver=usb-storage, 12M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M [root@localhost ~]# 4. To check the address of USB devices # virsh dumpxml rhel <domain type='kvm' id='7'> <name>rhel</name> <uuid>205c40e0-e917-47fe-9c4a-1f35748ffd21</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> ... <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/mnt/jiahu/images/rhel.img'> <seclabel model='selinux' labelskip='yes'/> </source> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/usb-img/usb-1.img'/> <target dev='sda' bus='usb'/> <======== no USB bus related address or bus address assigned to usb disk. <alias name='usb-disk0'/> </disk> ... 5. Assign one <address> line to USB disk like scsi disk. [root@ibm-x3650m3-03 ~]# virsh dumpxml r7 ...(snipped) <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/usb-img/usb-1.img'/> <target dev='sda' bus='usb'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> =======> added </disk> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/usb-img/usb-2.img'/> <target dev='sdb' bus='usb'/> <address type='drive' controller='1' bus='0' target='0' unit='0'/> =======> added </disk> ...(snipped) 6. Check the usb controller,the controllers can not be generated automatically.(scsi controllers were generated automatically.) [root@ibm-x3650m3-03 ~]# virsh dumpxml r7 ...(snipped) <controller type='scsi' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </controller> <controller type='scsi' index='1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </controller> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> ...(snipped) Actual results: I found all USB disk had been attached to same USB controller(default) automatically, maybe this is default routine. However I want to assign some USB disks to another controller manually but I can't find the entry. qemu-kvm has provided command line to support it by using "bus" argument.(like: device_add usb-storage,id=my_usb_disk,drive=my_usb_disk,bus=usb.0 ) Expected results: Libvirt should provide entry to configure this feature, like scsi disk below: <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/iscsi_1.img'/> <target dev='sda' bus='scsi'/> <address type='drive' controller='1' bus='0' target='0' unit='0'/> <===here </disk>