qemu usb storage emulation -------------------------- QEMU has three devices for usb storage emulation. Number one emulates the classic bulk-only transport protocol which is used by 99% of the usb sticks on the market today and is called "usb-storage". Usage (hooking up to xhci, other host controllers work too): qemu ${other_vm_args} \ -drive if=none,id=stick,file=/path/to/file.img \ -device nec-usb-xhci,id=xhci \ -device usb-storage,bus=xhci.0,drive=stick Number two is the newer usb attached scsi transport. This one doesn't automagically create a scsi disk, so you have to explicitly attach one manually. Multiple logical units are supported. Here is an example with tree logical units: qemu ${other_vm_args} \ -drive if=none,id=uas-disk1,file=/path/to/file1.img \ -drive if=none,id=uas-disk2,file=/path/to/file2.img \ -drive if=none,id=uas-cdrom,media=cdrom,file=/path/to/image.iso \ -device nec-usb-xhci,id=xhci \ -device usb-uas,id=uas,bus=xhci.0 \ -device scsi-hd,bus=uas.0,scsi-id=0,lun=0,drive=uas-disk1 \ -device scsi-hd,bus=uas.0,scsi-id=0,lun=1,drive=uas-disk2 \ -device scsi-cd,bus=uas.0,scsi-id=0,lun=5,drive=uas-cdrom Number three emulates the classic bulk-only transport protocol too. It's called "usb-bot". It shares most code with "usb-storage", and the guest will not be able to see the difference. The qemu command line interface is similar to usb-uas though, i.e. no automatic scsi disk creation. It also features support for up to 16 LUNs. The LUN numbers must be continuous, i.e. for three devices you must use 0+1+2. The 0+1+5 numbering from the "usb-uas" example isn't going to work with "usb-bot". Starting with qemu version 2.7 usb-bot and usb-uas devices can be hotplugged. In the hotplug case they are added with "attached = false" so the guest will not see the device until the "attached" property is explicitly set to true. That allows to attach one or more scsi devices before making the device visible to the guest, i.e. the workflow looks like this: (1) device-add usb-bot,id=foo (2) device-add scsi-{hd,cd},bus=foo.0,lun=0 (2b) optionally add more devices (luns 1 ... 15). (3) scripts/qmp/qom-set foo.attached = true enjoy, Gerd -- Gerd Hoffmann <kraxel@redhat.com>