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

可以从深度商店安装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

(2017.3.27 注:也可以 sudo apt-get install  qemu-kvm 安装。virtio windows驱动 查 http://fedoraproject.org/wiki/Windows_Virtio_Drivers 下载,分iso格式和软盘镜像格式)


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

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

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

(qemu-img create -f  qcow2  ubuntuServer16.04.img 10G)


启动带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驱动)

(安装Linux类似 sudo kvm -m  4096 -cdrom /media/x201/DATA/soft/ubuntu-16.04.1-server-amd64.iso -drive file=UbuntuServer16.04.img)

带多个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中不可用)。

你可能感兴趣的:(Linux Deepin 2014 kvm虚拟机使用与Openstack win7镜像)