热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Debian6系统下安装配置KVM虚拟机的方法

折腾了整整一个星期了,终于把KVM装上了,在KVM下装了个XP试试。虽然还有点小问题,但基本功能都可以实现。先记录下来,免得以后忘记了。首先介绍以下软硬件的配置:硬件:CPU:Inteli3-2120RAM:4GDDR3HD:SATA500G软件:Debian6.0.5amd64neti
折腾了整整一个星期了,终于把KVM装上了,在KVM下装了个XP试试。虽然还有点小问题,但基本功能都可以实现。先记录下来,免得以后忘记了。
    首先介绍以下软硬件的配置:
硬件:
CPU:Intel i3-2120
RAM:4G DDR3
HD: SATA 500G
软件:
Debian 6.0.5 amd64 netinst
GMONE 2.30.2 (装GUI是为了直接在这台电脑上面测试安装XP,有两台电脑测试的就不要装GUI了)

1.检查系统能否支持KVM
    首先要确定CPU要支持虚拟化,不然白费功夫。

[root@kvm-server ~]# egrep '^flags.*(vmx|svm)' /proc/cpuinfo

    要看到有vmx或svm的标示才行
2.安装KVM

[root@kvm-server ~]# apt-get install qemu-kvm qemu uml-utilities libvirt-bin libvirt-dev

据说现在的版本都是自动加载内核模块,如果实在不行,试下手动加载:

[root@kvm-server ~]# modprobe kvm_intel #or kvm_amd

KVM就这样装完了,困难的还在后头

    如果你安装了图形界面,可以安装virt-manage,其它操作基本都可以在里面完成了。不过感觉比vmware workstation的功能还要少。

在后面都是以命令行方式完成。

3.建立虚拟磁盘(建立和运行虚拟机都可以在非root用户下进行)

[test@kvm-server ~]$ kvm-img create -f qcow2 xp.img 30G
 #-f 指定虚拟磁盘的格式。

#qcow2是不立即分配空间,随着使用而动态增长空间的格式。这里还可以使用vmware的vmdk格式啊。

4.启动虚拟机

kvm -m 2048 -smp 2 -drive file=~/vm-images/xp.img -cdrom ~/ghost-xp.iso -boot d
#-m 指定内存大小,单位Mb
#-smp 指定CPU个数
#-driver 虚拟磁盘路径,这里可用-hda,-hdb,。。。等代替,表示第一个第二个硬盘
#-cdrom 光驱路径,可指定/dev/cdrom使用物理光驱
#-boot 指定默认启动驱动器

用上面的命令很容易就可以启动虚拟机了,但实际上如果只使用上面的参数启动并安装XP,你会觉得非常痛苦!因为实在是太慢了。GHOST的速度只有45Mb/min,单GHOST就花了几个小时。开始我还以为kvm不支持ghost,换直接安装,还是很慢。查了一下资料发现kvm还可以用虚拟驱动(virtio)提高磁盘和网络的速度。虚拟驱动(virtio)的说明就不在这里班门弄斧了,baidu google一下就一大堆。下面的命令使用了virtio驱动和writeback模式,速度比什么都不用快10倍以上。

kvm -localtime -m 2048 -smp 2 -vga std -drive file=~/vm-images/xp.img,cache=writeback,if=virtio,boot=on -cdrom ~/iso/GHOST_winxpsp3.iso -boot d -fda ~/Downloads/viostor-31-03-2010-floppy.img -enable-kvm -net nic,model=virtio -net user -usbdevice tablet -daemonize -vnc 127.0.0.1:0 -redir tcp:3389::3389
#cache=writeback必须放在if=virtio前面,我没试过反过来放会怎样,是看网上资料说的,有时间试一试
#if=virtio,boot=on好像要一起用的
#-fda 这是指定一个软盘文件,这是virtio for win的驱动,在安装或ghost时会用到
#-enable-kvm 还没查到什么意思,后补吧
#-net nic,model=virtio -net user 设置网卡,这里比较复杂,资料是有,但还不明白,有经验的大大请传授一下
#-usbdevice tablet 鼠标整合,自动捕获鼠标
#-usb 设置usb
#-daemonize 后台运行,不出现图形界面
#-vnc 127.0.0.1:0 设置vnc端口
#-redir 这个是可以用win的远程桌面连接的参数(我还没测试过)
#使用了-daemonize 或 -vnc 后都不会出现图形界面的,初学的如果安装了图形界面还是暂时不要用这两个选项,可控性比vnc好一点,速度稍慢一点

说一下我用virtio和writeback的感受,刚开始什么参数都不用,Ghost速度是45Mb/min,使用了virtio,没有用writeback时,速度居然还是只有45Mb/min,同时用virtio和writeback时,初始速度可以达到1000Mb/min,然后慢慢降下来,稳定在750~850Mb/min左右。这是ISO文件在网络服务器上,我的台式机和服务器之间跑100Mb局域网。还没测试过单用writeback时的速度。
使用virtio设备,就必须安装virtio驱动,不然一定蓝屏的。上面的-fda就是把驱动挂到软驱上。如果是进入winpe再ghost的话就在winpe启动的时候按F6->按S->选择系统版本->按回车
如果是安装版的,按以下链接做吧
http://www.linux-kvm.org/page/WindowsGuestDrivers/viostor/installation
Ghost完xp后第一次启动,如果你不关了虚拟机改变设置,多半会蓝屏的,呵呵。因为刚才装的virtio驱动是为winpe安装的,你ghost出来的xp还没加载这个驱动。所以Ghost完后第一次启动,先关了虚拟机,把上面的if=virtio,boot=on去掉,完成第一次启动,安装结束再说。

5. 安装virtio驱动
完成xp的安装后,再用非virtio的驱动当然不爽啦,要在xp中安装了virtio驱动,再把硬盘改成virtio模式才行。先用

kvm-img create -f qcow2 temp.img 1G

创建一个临时硬盘文件,大小随意,反正是临时的。启动xp时把原来的硬盘和这个临时硬盘都挂上(xp.img用普通模式,temp.img用virtio模式),还继续挂载那个virtio驱动到软驱上。这样当启动xp后,就会自动找到有新硬件,再用软驱中的驱动安装好就可以了。具体命令如下:

kvm -localtime -m 2048 -smp 2 -vga std -drive file=~/vm-images/xp.img,cache=writeback,boot=on -drive file=~/vm-images/temp.img,if=virtio -cdrom ~/iso/NetKVM_and_viostor.iso -boot c -fda ~/Downloads/viostor-31-03-2010-floppy.img -enable-kvm -net nic,model=virtio -net user -usbdevice tablet -daemonize -vnc :0
#留意这里换成-boot c,由C盘启动了

#光盘文件也改成了virtio网卡驱动

启动xp后就在光盘上找驱动就可以了。光盘中包含了网卡和virtio硬盘的驱动。但没包含显卡驱动。虽说kvm对图形显示不太好,装了驱动也比不上vmware,但总看着个黄色的叹号就是不爽。去下载了vbempg.zip,里面就包含了显卡的驱动程序。
(在写这篇文章的时候重装了一次xp,发现原来光盘iso文件里就包含了软驱文件里的驱动,那就不需要加载软驱了)
装完所有驱动后,关机,把上面挂载软驱和temp.img的参数去掉,再启动,个人觉得启动速度飞快啊,哈哈!
6.配置桥接网络
(1)$apt-get install bridge-utils

sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512 -hda /home/lm/kvm/winxp.img -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tap0,script=no -boot d -cdrom /home/lm/iso/winxp.iso -smp 2 -clock rtc -soundhw es1370
(2) 如果在本机上,则sudo invoke-rc.d networking stop
如果是远程登录,则一定要跳过本步
(3) 创建网桥:
$ sudo vim /etc/network/interfaces
(i)如果主机是指定IP的,修改配置文件为:(以192.168.1.10为IP的)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.1.10
network 192.168.0.0
netmask 255.255.0.0
broadcast 192.168.255.255
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

(ii)如果主机是dhcp的,则修改为类似于这种:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

(4) 启动网络并检查:
$sudo /etc/init.d/networking restart

检查:
$sudo brctl show
(有br0出现)
或者检查:
ifconfig
(有br0使用正常IP)

至此KVM基本上已经测试可以工作了,XP也装好了,要再深入管理,命令行好像用virsh,我再学习学习,以后有机会再写写吧。
7.还存在的问题
1)到现在还没查到虚拟机启动后怎么换光驱里挂载的iso(可能启动后按ctrl+alt+2切换到qemu控制台再用命令去做,但如果用vnc连接的话应该没这东东吧?)
2)用了-vnc或-daemonize后,只能用vnc连接,qemu不知道还能管理不?这样要是进不了系统,我就不会关机了。尝试kill了进程,再开虚拟机就每次都蓝屏了,感觉有点脆弱。也不知道是xp的脆弱还是kvm的问题。


推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 如何查看电脑系统版本_腾讯云服务器系统版本怎么看?Windows和Centos版本怎么选?...
    腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux环境变量$PATH的作用及使用方法
    本文介绍了Linux环境变量$PATH的作用及使用方法。$PATH是一个由多个目录组成的变量,用冒号分隔。当执行一个指令时,系统会按照$PATH定义的目录顺序搜索同名的可执行文件,如果有多个同名指令,则先找到的会被执行。通过设置$PATH变量,可以在任何地方执行指令,无需输入绝对路径。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • vb6集成ad登录共享文件_SCSP实验2单点登录
    01—实验目的掌握单点登陆相关原理和深信服配置02—实验环境1.AC版本v12.0.42AC1地址:https:172.172.1.1AC2地址:htt ... [详细]
  • 7.4 基本输入源
    一、文件流1.在spark-shell中创建文件流进入spark-shell创建文件流。另外打开一个终端窗口,启动进入spark-shell上面在spark-shell中执行的程序 ... [详细]
  • Linux 中使用 clone 函数来创建线程
    2019独角兽企业重金招聘Python工程师标准Linux上创建线程一般使用的是pthread库实际上libc也给我们提供了创建线程的函数那就是cloneintclone(i ... [详细]
author-avatar
全程解密_785
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有