您的位置:首页 > 运维架构 > Linux

Linux Deepin 2014 kvm虚拟机使用与Openstack win7镜像

2014-10-21 15:20 585 查看
可以从深度商店安装qemu-kvm,命令kvm-ok查看kvm安装情况。注意:kvm命令=qemu-system-x86_64命令,kvm-img命令(没有)=qemu-img命令

用wget从alt.fedoraproject.org下载virtio驱动,我下载的是virtio-win-0.1-81.iso

创建qcow2/raw格式的磁盘镜像:

qemu-img create -f qcow2 win7lite.img 20G

qemu-img create -f raw win7lite.img 20G

启动带virtio驱动的光驱的kvm虚拟机:

sudo kvm -m 2048 -cdrom win7安装盘.iso -drive file=win7lite.img,if=virtio -drive file=virtio-win-0.1-81.iso,index=3,media=cdrom

(带选项 -nographic -vnc :5 可以不显示kvm虚拟机GUI,改为从vnc登录,:0对应5900端口,以此类推:5对应5905端口,可以用Deepin的远程桌面工具选VNC虚拟计算来登录)

在win7安装中,一开始是无法认到硬盘的,但带virtio驱动的光驱应该能认到,这时先从光驱安装virtio驱动,然后就可以识别硬盘了并安装系统了。(装UbuntuKylin 14.10反而没那么麻烦,因为不需要考虑virtio驱动)

带多个iso的例子:sudo kvm -m 2048 -cdrom win8_PE_x64_x86.iso -hda win7_x86_jsjxjf.qcow2 -boot d -drive file=virtio-win-0.1-81.iso,index=1,media=cdrom -drive file=win7-jsjxjf-wim.iso,index=3,media=cdrom -net nic -net user -nographic -vnc :5

经过上述步骤,win7系统可用,但网络无法连接。关闭kvm虚拟机,接着考虑将网卡桥接到宿主机eth0:

从深度商店安装桥接工具:bridge-utils(如果已经安装可忽略)

从深度商店安装TAP界面工具:uml-utilities

修改网络界面配置文件:sudo gedit /etc/network/interfaces ,加入以下内容

auto eth0

iface eth0 inet dhcp

auto tap0

iface tap0 inet manual

up ifconfig $IFACE 0.0.0.0 up

down ifconfig $IFACE down

tunctl_user hp

auto br0

iface br0 inet dhcp

bridge_ports eth0 tap0

激活tap0和br0(我试验不需要重新启动OS,用ifconfig进行查验):

sudo /sbin/ifup tap0

sudo /sbin/ifup br0

使用sudo kvm -m 2048 -hda /media/hp/win7-in-320G/win7lite.img -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-02 -net tap,vlan=0,ifname=tap0,script=no -boot c -smp 2 -clock rtc

重新启动kvm虚拟机,客户机内网卡已经桥接到外部宿主机pci网卡,获得了动态地址并可以ping通内网机器了

备注:上述配置中,客户机可以连接外网,但存在宿主机不能联通外网问题。经过试验,发现因为eth0和br0都采用了DHCP动态分配IP地址,结果route显示结果中默认路由(带UG标志)对应设备为eth0,而实际此时宿主机和客户机的网卡应该都是在br0逻辑网段的。使用以下命令可以手动修正:

sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 当前网段网关机器IP地址 metric 0 br0

(或者sudo route add default gw 网关ip地址 br0)

网络知识了解有限,没想到如何能够在配置文件中在开机时解决这一问题。为了方便在不同网段使用机器,没有进行静态配置,而是写了如下简单脚本(因为所有网段都是规律的):

#!/bin/bash

#

# mynetwork.sh: start my network for kvm bridge 0, just add default route as br0

if [ $# -gt 2 ] ; then

printf "%s\n" "Type $0 for office or $0 [mm=5] nn for mm nn network segment."

exit 33

fi

if [ $# -eq 0 ] ; then

route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.5.21.254 metric 0 br0

else

if [ $# -eq 2 ] ; then

route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.$1.$2.254 metric 0 br0

else

route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.5.$1.254 metric 0 br0

fi

fi

用sudo chmod +x ~/mynetwork.sh添加执行权限,每次使用时用sudo ~/mynetwork.sh修正。

通过试验发现,如果没有在配置中进行网桥设置,也可以通过下述命令一步步手动配置:

sudo brctl addbr br0

sudo tunctl -t tap0 -u hp 类似可以添加tap1等

sudo brctl addif br0 eth0

sudo brctl addif br0 tap0 类似处理tap1

sudo ifconfig br0 原eth0 IP

sudo ifconfig eth0 0.0.0.0 promisc

sudo ifconfig tap0 up 类似激活tap1等

sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 网关机器IP地址 metric 0 br0

经过试验,该windows 7 x86镜像可以用dashboard上传后使用。UbuntuKylin 14.10镜像也可以使用。和网上很多参考资料不同的是,我的windows 7镜像安装时默认总是有开头的100M主分区,使用没有问题。UbuntuKylin 14.10镜像中也包含了swap分区,也没有问题。而且,两个系统都不存在剥离开头的扇区数据的情况(实际试验,按网上的参考资料剥离UbuntuKylin 14.10镜像开头的2048个扇区,反而使镜像在openstack中不可用)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: