Categories
Linux/Unix

KVM (Kernel-based Virtual Machine) 主机客户机互相访问方法总结

最近在做固态存储加速产品对 KVM 虚拟技术在云环境的测试,单节点时时常会遇到客户机需要访问主机资源的问题。最简单的方法是在主机 Linux 端建立网桥 Bridge,将真实网卡与虚拟客户端网卡进行桥接。这样客户端和主机可以平等的存在于网段中,相当于相互独立的不同主机。通过网络共享,SCP 等方法都可以相互访问。总结如下:

资源共享

  • 将虚拟机网卡与主机网卡进行桥接。推荐
    但这有个前提,就是主机所在网段需要有 DHCP 服务器为其分配 IP。如果没有的话,可以手动分配各自的 IP 地址进行访问。虚拟机与主机之间就可以平等的相互访问了。
auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
  • 使用 RDP (Remote Desktop Protocol) 进行共享。
    Linux 下,可以使用 rdesktop 来实现 RDP 访问,Windows 下可以使用图形化的 Remote Desktop Connection (mstsc.exe)。
rdesktop 10.83.108.150:3389 -r disk:share_folder=/mnt/share
  • 通过加载主机硬盘分区共享
    这个方法需要在主机上建立硬盘分区并使用文件系统对其进行格式化,然后客户机在启动时同时加载上格式化好的分区,这样客户机和主机就能同时访问这个分区系统了。有一点需要注意,所使用的文件系统需要主机与客户机同时支持。这个方法我只在客户端与主机都是 Linux 系统中尝试成果过。对于 Linux 与 Windows 使用 VFAT 尝试失败了。
fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mount /dev/sdb1 /mnt/share_lun
kvm -m 1024 -boot c -drive file=/image_lun/VM_HDDs/centos32_install_01.qcow2,if=ide,index=0,boot=on -drive file=/dev/sdb1,if=virtio,aio=native

 

 

图形界面访问

  • VNC 共享
-vnc :0  # 指定虚拟桌面
-vnc 192.168.1.5:0  # 指定 IP + 桌面
-vnc 0.0.0.0:5  # 指定其他桌面
-vnc 0.0.0.0:1 -k en-us  # 指定字符集
####  带密码验证的访问 ####
-vnc 0.0.0.0:1,password -k en-us

下边的启动代码将虚拟机桌面映射入 VNC 1 号端口。

kvm -vnc :1 -m 1024 -boot c -drive file=/image_lun/VM_HDDs/centos32_install_01.qcow2,if=ide,index=0,boot=on -drive file=/dev/sdb,if=virtio,aio=native -drive file=/dev/sdc,if=virtio,index=2
  • RDP 共享

-redir 参数可以将虚拟桌面使用 RDP 映射到 TCP 的不同端口上。如下:

kvm -redir tcp:3389::3389 -m 1024 -boot c -drive file=/image_lun/VM_HDDs/centos32_install_01.qcow2,if=ide,index=0,boot=on -drive file=/dev/sdb,if=virtio,aio=native -drive file=/dev/sdc,if=virtio,index=2

这样就可以在 Windows 和 Linux 中通过 RDP 客户端访问了。Windows:使用图形化的 Remote Desktop Connection;Linux:rdesktop <IP地址>:<端口>


 

以上只是我使用 KVM 实现客户虚拟机与主机资源共享的方法。还有其他方法,希望大家补充。