将usb设备挂载到虚拟机中

                                                              如何将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两个文件

你可能感兴趣的:(虚拟机,server,File,服务器,Path,Descriptor)