kvm入门笔记

来源:互联网 发布:短域名扫描 编辑:程序博客网 时间:2024/06/05 06:07

        公司的服务器管理的不是很好,几个人用常常出乱七八糟的问题。我觉得要是使用虚拟机的话会有很多好处,一方面可以做到彻底隔离,另一方面也不会影响到主机的环境,硬盘镜像还可以很方便的克隆。据说kvm可以达到主机70%到80%的效率,就想先在自己的电脑上试试,时机成熟了再和领导建议吧。
        Kernel-based Virtual Machine,听上去很牛逼的样子,是不是比virtualbox或vmware要更快更省资源呢?
在网上看了个教程,是用kvm XXX命令来做的。我的笔记本装的是fedora 15,没搜到kvm这个软件包……嗯,就把虚拟化的软件包组全装了吧……
        然后发现直接有图形化的虚拟机管理工具……功能还挺齐全的,试试。
        装xp,擦,那速度可不是一般的慢啊,deepin的精简xp要装差不多1个小时……
        好,上网查资料,原来kvm有自己的io驱动,virtio。于是按照前辈们的指点下载了virtio-win-0.1-mm34.iso和virtio-win-1.1.16.vfd。vfd是软盘镜像,iso是光盘镜像。可是要怎么用啊?我打开后里面没有可执行的文件啊?于是参考了下面的文章:
http://www.cnblogs.com/chinacloud/archive/2010/08/16/1800500.html
        原来要在装xp开始前按f6来安装scsi驱动……这让我想起了以前,有个同学说电脑的硬盘驱动装不上,我和其他人还狠狠地鄙视了他一下:硬盘有驱动么?汗颜……
        照前辈说的做,果然速度有极大提高,这回xp只要20分钟就装好了。很好,除了一进入桌面就会蓝屏……我也不知道怎么搞的啊,总是蓝,几次都是这样……唉,还是换个教程看看吧……
http://www.kvm123.com/linux-kvm-2003-guest-virtio.html#comment-113
        于是放弃图形管理工具,卸载整个虚拟化软件组,只安装个qemu-kvm就行了。仿照他的做法:
qemu-img create -f qcow2 winxp.qcow2 10g
        制作虚拟磁盘,格式用qcow2,写时拷贝(copy on write),这样虚拟盘就会根据需要扩展,而不是像raw那样直接把空间给吃了。大小指定为10g。启动命令如下:
qemu-kvm -m 512 -localtime -M pc -smp 2 -drive file=winxp.qcow2,cache=writeback,if=virtio -cdrom xp.iso -net nic,model=virtio -net user-usb -usbdevice tablet
        内存512m;使用主机时间;模拟为pc机;使用2个处理器;硬盘镜像为winxp.qcow2,cache按照教程写,接口使用virtio模块;光盘是xp.iso的xp安装盘;网络照着教程写,使用virtio模块;usb这样写可以让鼠标在虚拟机与主机间自由切换

        安装完成后进入系统,并安装网卡的驱动。然后用qemu-img create -b winxp.qcow2 -f qconw win.ovl 10g这个命令创建虚拟盘的快照,然后把启动命令指定硬盘的名字换成这个快照文件的名字。这样一来,就算装错东西也不怕了~ 

        然后加入两个设备,命令-device vmware-svga -soundhw ac97,一个是vmware的显卡,目的是使用他的显卡驱动,另一个是声卡,这样就能发出声音了。可用命令 qemu-kvm -device ?看能够加入哪些虚拟设备。嗯,如果英语没问题的话,直接看man qemu-kvm的说明,或上网查查qemu的命令吧,那个是最权威的。(当然搜索网页是最省力的~)

        加了声卡之后进入系统,会被要求安装virtio的scsi驱动。这个一开始装过了的啊?!既然它叫我装就装呗。

        好,重启之后蓝屏……

        反复试了好多次啊,原来声卡必须在装系统之前就安上去才行……

        搞定之后,进入系统,并安装vmwarevga32-kvm.iso里的显卡驱动。系统貌似快了一点(也许是心理作用)。

        如果要插入usb设备的话,-usbdevice host:设备号:设备号。这两个设备号的差别我忘了,是在主机用lsusb看到的,填进去就是了。

        然后看到了这篇经典的帖子:

http://forum.ubuntu.org.cn/viewtopic.php?t=154792

        基本上会遇到的问题,里面都提到了。既然他说用lvm分区速度会更快一点,那就试试吧,反正也可以学学lvm命令。

        由于装系统时沿用了装windows的习惯,lvm的几个分区把磁盘全部占满了,没办法,只能缩减lv_home了:

lvreduce -L 100g /dev/vg_bingbowan/lv_home

        这个命令一下去,home里的文件都不能用了有木有!!!重启直接进故障紧急修复的命令行界面了有木有!!

        我擦,网上那些不负责任的人,你的教程多写几个字会屎啊?这个命令不能直接用的啊……

        首先,应该收缩文件系统,然后再收缩lvm逻辑卷……

        于是找到了这个教程,还是老外写的东西比较严谨:

https://wiki.archlinux.org/index.php/LVM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

        还好,东西作了备份,恢复也很简单:重做lv_home,格式化,并在命令行下把里面的用户目录的归属者设为用户自己(不然会弹出个xx对话框让你不能登录)。

        继续搞虚拟机,制作一个逻辑卷lv_xp,启动命令修改为-drive file=/dev/vg_bingbowan/lv_xp,cache=none,if=virtio,boot=on,安装系统,制作磁盘快照(lvm的快照,这样以后就可以用lvconvert --merge 合并快照到原始镜像。合并结束后快照被删除。要先用lvchange -an把原始盘设为不活跃,再merge,再设为活跃lvchange -ay

        搞完之后没感觉到速度有啥提升……还是搞网络去吧……

        按照上面设置,虚拟机可以上外网,但是不能和主机通信。这怎么行!!前面链接的文章提到怎么做,但是,但是——无线网不能桥接啊!!比较新的内核已经不支持把wlan弄到网桥里了,可我现在只能上wlan……

        不过不要紧,可以让主机架个nat服务嘛~

        首先按照教程里的,内核编译要选上tun设备选项,然后tunctl创建一个tap0设备,然后虚拟机启动参数改为-net tap,ifname=tap0,script=no -net nic,model=virtio,然后ifconfig tap0 192.168.1.3 up,然后虚拟机的ip设为192.168.1.33,网关设为tap0的地址。

        然后参照这位前辈的做法:

http://felipec.wordpress.com/2009/12/27/setting-up-qemu-with-a-nat/

        输入命令:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -I FORWARD 1 -i tap0 -j ACCEPT
iptables -I FORWARD 1 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    于是虚拟机能够和主机及外网通信了(我自己搞了半天没成功,还得抄别人的,学艺不精啊……)。另外,nat服务还有一个很好的应用:共享无线网~

    我现在用的是某运营商的wlan,它计费的原理,大致是这样:

1.用户连上wlan路由器,浏览网页。wlan发现用户的ip未登记,于是把网页定向到登录界面

2.用户输入用户名密码注册

3.服务器核对用户名密码,成功后将这个ip登记为有效。同时,登录页面弹出一个独立窗口,告诉用户登录成功,而且不能关闭窗口才能正常上网

4.用户点击窗口里的下线按钮或关闭窗口,服务器注销用户的ip

    其实那个独立窗口没有想象的那么复杂,我电脑意外重启后没有它照样可以上网。监控了一下网络流量,平时它也没与服务器有什么交互。实际上,wlan是根据ip是否活跃来判断用户是否在线的,只有在按下下线按钮或关闭那个窗口时,它才会向后台发送下线请求。这就是所谓的浏览器认证。

    嗯,然后我用网线把自己的路由器与笔记本相连,把有线网卡设为nat的入口端,无线网卡设为出口端,路由器开放无线网。其他电脑连上我的路由器后,把网关设为我笔记本有线网卡的地址。只要我登录,他们就都可以上网了~

    nat是所谓的透明网关嘛,把内网主机ip包的源地址改成了服务器地址,内网机器对外网是透明的~

    继续搞kvm。为了传文件,就在主机搭了个ftp服务器。配置本身不是很复杂,但是怎么搞都不通……后来才发现防火墙默认不信任ftp接口,selinux默认不允许ftp访问,需要把allow_ftpd_full_access值设为1,以及匿名用户的根目录不可写……

   搞到这里,虚拟机可以用了,不过说实话有点失望啊,在里面解压个文件,速度远远不如vbox里的机器。当然,这可能是因为kvm的显示系统不够好,毕竟它的目的是企业级的虚拟服务,在服务器上应该还是很有优势的。虽然用libvirt工具可以进行管理,比如suspend功能,但是……我已经丧失兴趣了,个人用还是vbox吧,服务器应该是用不着suspend的。

最后,附上相关工具的下载地址:

http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/

http://www.linux-kvm.com/content/using-vmware-vga-kvm-windows-guests

以及最终的启动命令:

qemu-kvm \
-m 512 \
-localtime \
-M pc \
-smp 2 \
-drive file=/dev/vg_bingbowan/lv_xp,cache=none,if=virtio,boot=on \
-fda virtio-win-1.1.16.vfd \
-cdrom virtio-win-0.1-mm34.iso \
-net tap,ifname=tap0,script=no \
-net nic,model=virtio \
-usb -usbdevice tablet \
-soundhw ac97 \
-vga vmware


低版本的qemu有kqemu加速模块,用于没有kvm的系统,比如windows