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

KVM(Kernel-basedVirtualMachine)虚拟机安装使用经验

我为什么要安装KVM?1.受制于VMWareWorkstation版本的8GB磁盘文件限制2.VMWare安装文件动则几百MB,更新麻烦3.被KVM虚拟机的性能吸引,可以看这个测试报告Phoronix-Ubuntu8.04KVMBenchmarksPhoronix-IntelCorei7VirtualizationPe
我为什么要安装KVM?

1. 受制于VMWare Workstation版本的8GB磁盘文件限制
2. VMWare安装文件动则几百MB,更新麻烦
3. 被KVM虚拟机的性能吸引,可以看这个测试报告
Phoronix - Ubuntu 8.04 KVM Benchmarks
Phoronix - Intel Core i7 Virtualization Performance
4. 命令行配置——灵活

我的系统环境

软件环境:
主机操作系统:Linux leo-laptop 2.6.28-15-generic #48-Ubuntu SMP Wed Jul 29 08:53:35 UTC 2009 x86_64 GNU/Linux
客户机操作系统:Enterprise Linux Release 5 Update 3 Media Pack for x86_64(64 bit)
kvmqemu版本
QEMU PC emulator version 0.9.1
kvm-84

硬件环境
T7300,4GB RAM, Ext4

安装步骤

1.检查本机的CPU是否支持硬件虚拟化
如果能够找到包含vmx,svm字样,则CPU支持虚拟化
Intel CPU
grep vmx /proc/cpuinfo
AMD CPU
grep svm /proc/cpuinfo
如果CPU支持,还需要在BIOS打开虚拟化支持。通常,主板默认关闭这个选项

2. 安装软件
sudo apt-get install kvm qemu bridge-utils uml-utilities

3. 装载模块
sudo modprobe kvm
装载Intel模块
sudo modprobe kvm-intel
装载AMD模块
sudo modprobe kvm-amd

4. 添加你当前的帐户到kvm
sudo addgroup 'leo' kvm

5. 创建磁盘镜像文件
kvm-img create -f qcow2 vm.img 10G

-f表示以什么格式创建磁盘镜像文件,推荐选择qcow2格式,在很多网上教程中都选择的是qcow格式。我在使用qcow格式的镜像文件安装REHL5U3的时候,写这个文件出奇的慢,换成qcow2就可以了。其他的格式还有raw,这种格式要求文件系统能够支持预分配空间,例如ext2,ext3,ext4,NTFS等等,所谓的预分配技术就是在创建文件的时候就把文件的空间全部分配好,和qcow2按需分配不同,这样能够提高虚拟机的磁盘性能。

6. 安装系统
使用ISO文件的时候
kvm -hda vm.img -cdrom cdrom.iso -m 256M -net nic -net user

直接从光驱安装
kvm -hda r5u3.img -cdrom /dev/dvd -m 256M -net nic -net user

-net nic -net user配置虚拟系统使用NAT方式访问网络,在这种方式下,虚拟系统和主机系统不在同一个网段内,互相访问及其不方便,后面会提供桥接网络的配置方法

iso文件创建的时侯很简单,看下面的命令
dd if=/dev/dvd of=rehl.iso

7. 启动系统
这块我们创建一个脚本,以后每次启动虚拟机的时候就不用再键入长长的命令了。

StartRHEL5U3.sh
#!/bin/bash
kvm -M pc -hda r5u3.img \
-m 1500M \
-smp 2 \
-net nic,macaddr=DE:AD:BE:EF:27:20 \
-net user \
-usb \
-localtime \
-usbdevice tablet \
-soundhw all

-hda 指明磁盘镜像的挂载方式
-m 1024 给虚拟机分配1G内存
-smp 2 指明使用的CPU数量
-localtime 使用主机系统时间设置虚拟系统时间
-usb 使USB设备可用
-usbdevice tablet 使坐标设备可用,例如触摸版,实验表明我的USB鼠标在没有增加这个选项的时候,出现跳动的现象,添加了之后就没有问题
-soundhw all 使声音设备可用,如果你知道设备类型,也可以指定,具体的可以参考man
其他,关于-vga选项,kvm默认使用cirrus显卡从Windows 95开始的所有版本都能正常使用这个卡,但是在这种模式下最高分辨率也只有800x600,如果要想有更高的分辨率,需要使用其他选项

8. 设置系统启动时自动加载模块
如果上面的都正常了之后,在/etc/modules中添加下面两行,使系统启动的时候自动读入kvm,kvm-intel模块
kvm
kvm-intel
或者
kvm
kvm-amd

10. 配置bridge网络模式(桥接网络模式),
配置bridge网络模式(桥接网络模式),bridge-utils目前仅仅支持有线网卡桥接网络模式,不支持无线网卡
默认安装完了之后,会在/etc/kvm/下存在一个kvm-ifup文件,但是kvm启动的时候并不读取这个文件。而是读取/etc/kvm-ifup和/etc/kvm-ifdown文件,所以我们在/etc目录下创建这两个文件

文件的权限:
ls -l /etc/kvm-if*
-rwxr-xr-x 1 root root 503 2009-08-17 22:32 /etc/kvm-ifdown
-rwxr-xr-x 1 root root 1063 2009-08-17 22:28 /etc/kvm-ifup

/etc/kvm-ifup文件内容:
#!/bin/bash
# NOTE: 这个脚本在虚拟系统启动的时候执行,设置主机网桥
# 虚拟系统启动后,还需要设置和网桥IP在同一个网段的IP才能实现虚拟系统
# 和主机所在网络其他系统之间的相互访问
# 获取主系统的IP和网关
# 关于`grep "inet 地址"`和`sed 's/地址://`根据系统语言的不同,填写中文或者英文,
# 详细的可以根据ifconfig eth0的结果来修改# 和主机所在网络其他系统之间的相互访问
# 获取主系统的IP和网关
# 关于`grep "inet 地址"`和`sed 's/地址://`根据系统语言的不同,填写中文或者英文,
# 详细的可以根据ifconfig eth0的结果来修改
IP=`ifconfig eth0|grep "inet 地址"|awk '{print $2}'|sed 's/地址://'`
GATEWAY=`route -n|grep ^0.0.0.0|awk '{print $2}'`
BRIDGE=br0
ETHDEV=eth0
# 删除eth0的IP地址
/sbin/ip addr del $IP dev $ETHDEV &> /dev/null
# 创建tap接口,并激活
/usr/sbin/tunctl -u leo -t $1 &> /dev/null
/sbin/ip link set $1 up
# 添加网桥接口,并将eth0加入到网桥
/usr/sbin/brctl addbr $BRIDGE
/usr/sbin/brctl addif $BRIDGE $ETHDEV
# 将tap0加入网桥
/usr/sbin/brctl addif $BRIDGE $1
# 设置IP地址,启动网桥
/sbin/ifconfig $BRIDGE $IP up
# 添加默认路由
/sbin/route add default gw $GATEWAY

/etc/kvm-ifdown文件内容:
#!/bin/sh
# NOTE: 这个脚本在虚拟机关闭的时候执行,删除网桥,恢复主机网卡IP地址
#
IP=`ifconfig br0|grep "inet 地址"|awk '{print $2}'|sed 's/地址://'`
GATEWAY=`route -n|grep ^0.0.0.0|awk '{print $2}'`
BRIDGE=br0
ETHDEV=eth0
# 删除br0的IP地址
/sbin/ip addr del $IP dev $BRIDGE &> /dev/null
# 禁用br0
/sbin/ip link set $BRIDGE down
# 删除网桥
/usr/sbin/brctl delbr $BRIDGE
/sbin/ifconfig $ETHDEV $IP up &> /dev/null
/sbin/route add default gw $GATEWAY

11. 修改启动脚本,使用sudo -s 切换到root shell,然后启动虚拟系统
kvm -M pc -hda r5u3.img \
-m 1500M \
-smp 2 \
-net nic,macaddr=DE:AD:BE:EF:27:20 \
-net tap \
-usb \
-localtime \
-usbdevice tablet \
-soundhw all
如果没有使用root权限启动虚拟机,则会提示
warning: could not configure /dev/net/tun: no virtual network emulation
Could not initialize device 'tap'

12. 系统启动之后,主机的网络情况:
br0 inet 地址:192.168.0.84 广播:192.168.0.255 掩码:255.255.255.0
eth0 无IP
tap1 无IP

13. 虚拟系统的网络情况:
eth0 inet 地址:192.168.0.10 广播:192.168.0.255 掩码:255.255.255.0
至此KVM的基本配置已经完成
常用快捷键
ctrl + alt + f 全屏模式,或者返回正常模式
ctrl + alt 虚拟系统锁定鼠标或者释放鼠标

参考:

https://wiki.ubuntu.com/kvm
http://www.linux-kvm.org/page/Networking
http://linux.chinaunix.net/bbs/viewthread.php?tid=788174

碰到过的问题:

1. 使用kvm启动虚拟系统的时候,如果使用了-net tap参数,则虚拟机不能正常启动,出现下面的错误
   Could not initialize device 'tap'
   使用root帐号启动虚拟机,该问题解决。

2. 使用qemu-system-x86_64启动虚拟系统时,出现
   MP-BIOS bug: 8254 timer not connected to IO-APIC
   在安装的时候键入下面的命令
   linux initrd=initrd.img BOOT_IMAGE=vmlinuz noapic
   安装好了之后在menu.lst里添加noapic参数即可

3. 在使用kvm命令正在运行虚拟系统时,如果在其他的终端里执行了kvm相关的命令,虚拟系统会异常终止,在使用exit命令退出root shell时,会再次启动虚拟系统,这时,关闭即可。异常中断虚拟系统,由于没有正常调用/etc/kvm-ifdown脚本,会导致主机网络不能正常使用,手动执行一下kvm-ifdown里面的命令即可,确保网桥已经删除,主机网卡正确获得ip地址,如果还是不能正常启动,用下面的命令重新激活一下网卡:
   sudo ip link set eth0 down
   sudo ip link set eth0 up

4. 使用qemu-system-x86_64启动虚拟系统,效率及其低下,换用kvm启动虚拟系统及OK。

未解决的问题:

1. 必须使用root身份启动kvm才能使用桥接网络模式
2. 使用bridge-utils提供的网络桥接目前不支持无线网卡,发现parprouted可以支持无线网卡桥接,等待试验
3. 目前的启动脚本中对网络的配置只能支持单个虚拟系统,计划改善脚本,实现多虚拟支持
4. 磁盘镜像文件扩大,删除虚拟系统中的文件之后,磁盘镜像文件并不会缩小。解决方法已经在http://cha.homeip.net/blog/archives/2009/02/kernelbased_vir.html找到,等待试验


推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 在Ubuntu 8.04中安装美观的Cairo-Dock桌面增强工具
    本文介绍如何在Ubuntu 8.04系统中安装和配置Cairo-Dock,这款桌面增强工具以其精美的界面和高效的功能备受用户青睐。文章将指导您通过简单的步骤完成安装,并提供一些实用的配置建议。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
author-avatar
mobiledu2502859427
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有