如何将USB设备挂载到远程的虚拟机
如何将一个USB设备挂载到远程的虚拟机上,使得此虚拟机能够正常使用usb设备(usb存储、usb打印机、u盾等usb设备)呢?
我们公司虚拟机平台的实现底层运用的技术有QEMU、KVM、SPICE,上层的管理平台是用java开发的,搭载在ubuntu10.04server上的。
下面具体介绍一下USB的使用方法:
1.要下载usb所需的资源包,资源包我会上传上来。资源包解压后会有32位和64位的,您要确定您的客户端和服务端需要安装哪一个。
2.确定好要安装多少位后进入相应的目录进行安装,i386指的是32位的,x86_64指的是64位的。
3.要明白一点,在客户端安装usb的服务器端,在服务端(跑虚拟机的服务器上)要安装usb的客户端。
(1):把一台瘦客户机看做一个客户端,则在此上面要安装usb服务端,安装步骤如下:
客户端也是一个linux系统(xubuntu)系统,cd到/usb_source/i386/usb-redirector-linux-i386后运行
./installer_release.sh install-server
(2):我们在客户端安装的是32位的,在服务端安装的是64位的。
cd到/usb_source/x86_64/usb-redirector-linux-x86_64后运行
./installer.sh install-client
(3):安装成功后下面讲一下如何挂载。
1):户机上插上usb设备,运行usbsrv -l,查看结果,确定要挂载的usb设备。如下显示的id为24的u盘
# usbsrv -l
=============== USB SERVER OPERATION SUCCESSFUL ===============
list of USB devices:
24: DataTraveler 2.0 Kingston USB Mass Storage Device
Vid: 0951 Pid: 1603 Port: 2-2
Status: plugged
===================== ======================= ================2):将此usb设备共享,运行命令 usbsrv -s USB设备ID,如下例:
# usbsrv -s 24
====================== OPERATION SUCCESSFUL =====================
USB device has been shared
===================== ======================= ===================
3):ssh登陆至服务端,先运行命令usbclnt -l看一下,看瘦客户机是否已为服务端的一个usb server.如果不是,运行命令添加,如下例:
# usbclnt -a 10.20.65.18:32032
====================== OPERATION SUCCESSFUL =====================
USB server has been added
===================== ======================= ===================
4):usb server添加成功之后,运行命令usbclnt -l查看结果,usb server下会列出这个server上共享的usb设备的信息,注意括号后面有个s/n号。
# usbclnt -l
================= USB CLIENT OPERATION SUCCESSFUL ===============
List of USB servers and devices:
1: USB server at 10.20.65.18:32032
Mode: manual-connect Status: connected
|
`- 24: DataTraveler 2.0 Kingston (s/n: 89980116200801151425ABC9)
Vid: 0951 Pid: 1603 Port: 2-2
Mode: manual-connect Status: available for connection
===================== ======================= ===================5):上面结果中显示,这个usb设备状态为可连接,执行命令进行连接: usbclnt -c 1-24,命令执行完成之后,再执行usbclnt -l,可以看到
这个usb设备的状态为connect,表明usb设备已从瘦客户机挂载到了服务器上。
6):接下来,需要将这个usb设备挂载至虚机,从第4)的结果中,可以看到它的sn为89980116200801151425ABC9,将它复制一下备用
7):执行命令lsusb -v > usbinfo.txt,然后执行vim usbinfo.txt,按esc后输入/89980116200801151425ABC9(即usb的序列号),回车执行查找,可以
找到一段usb设备的描述。如:
Bus 003 Device 002: ID 0951:1624 Kingston Technology
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0951 Kingston Technology
idProduct 0x1624
bcdDevice 1.00
iManufacturer 1 Kingston
iProduct 2 DataTraveler G2
iSerial 3 001D0F164607F96123C20AA1
bNumConfigurations 1
Configuration Descriptor:
上面结果中文字颜色是我为了说明加上的。红色代表匹配的sn,橙色是我们需要的信息。找出Bus和Device,如上面的003和002,十进制
即为3和2.8):执行ps -ef|grep qemu|grep 虚机的名字,如ps -ef|grep qemu|grep jwang,取到虚机的启动命令,如
# ps -ef|grep qemu|grep jwang
root 4469 1470 27 13:32 ? 00:03:04 /usr/local/bin/qemu-system-x86_64 -enable-kvm -M pc -nodefconfig -nodefaults -rtc base=localtime,clock=host -chardev socket,id=monitor,path=/opt/keqi/monitors/7918bcf7-7e69-49f1-bde7-baace774661895,server,nowait -mon chardev=monitor,mode=readline -smp 1 -m 2048 -name jwang -boot order=cdn -drive media=disk,file=/mnt/sdc/datastore/xp-8/.VM-7918bcf7-7e69-49f1-bde7-baace774661895/xp-8_1.qcow2,if=none,id=drive-ide0-0-1,format=qcow2,cache=writethrough -device ide-drive,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 -drive media=disk,file=/mnt/sdc/datastore/xp-8/.VM-7918bcf7-7e69-49f1-bde7-baace774661895/xp-8.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=writethrough -device ide-drive,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 -drive if=none,id=drive-fdc0-0-0,readonly=on,format=raw -global isa-fdc.driveA=drive-fdc0-0-0 -drive file=/opt/keqi/.source/KEQI_Utils.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -net nic,model=rtl8139,macaddr=00:e0:4c:9c:2b:c2,vlan=0 -net tap,script=/opt/keqi/.network/if-up,downscript=/opt/keqi/.network/if-down,ifname=tap-s1-36,vlan=0 -net nic,model=rtl8139,macaddr=00:e0:4c:be:0c:f7,vlan=1 -net tap,script=/opt/keqi/.network/if-up,downscript=/opt/keqi/.network/if-down,ifname=tap-s0-17,vlan=1 -vga std -soundhw ac97 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic -spice addr=0.0.0.0,port=5917,password=11111111 -usb -usbdevice tablet
手工查找其中的monitor path的部分,取到path后面的那一段虚机monitor文件的路径。如下标示为红色的部分,复制这部分
九。连接monitor。将csl.jar复制至当前目录,然后执行:java -jar csl.jar /opt/keqi/monitors/7918bcf7-7e69-49f1-bde7-baace774661895,连接至虚机的monitor控制台后执行命令 usb_add host:bus.device,如用上面的数据,即执行 usb_add host:3.2
或者执行命令usb_addhost:pid:vid。注意pid和vid之面用冒号分开,而上面命令中的bus和device是用点来分开的。使用这两种方式都可以将usb设备挂载至虚机中。
所需文件我放到上传到本站点资源中了,名称为usb_source.tar.gz和csl.jar两个文件