| |
| 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> |