由于工作需要,需要需要虚拟出一个PowerPc64的系统,在介绍之前,先Qemu、Kvm、vmWare。之前对这三者虚拟化特点并没有特别关注。
|
是否基于硬件平台 |
是否全虚拟化 |
与宿主主机CPU一致 |
性能 |
Kvm |
是 |
是 |
是 |
高 |
VmWare |
是 |
否(半虚拟化) |
是 |
高 |
Qemu |
否,纯软件模拟 |
是 |
否(在x86上可以模拟powerpc) |
差 |
各个虚拟化对比表
Kvm与QEMU关系:
Kvm是基于linux kernel的,它已经成为linux的一部分,但是只有内核部分是不行的,必有用户层软件支持才可以管理虚拟机,因此kvm选择了比较成熟Qemu作为用户层管理工具,它对Qemu进行部分修改(具体修改啥我也不知道)。
从QEMU角度来看,它是完全独立的虚拟化方案,和kvm没有半毛钱关系。
VmWare就不介绍了,这个比较封闭(商业软件),很多技术表层知识,网上一大箩筐。。。
【环境部署】
Host主机系统是Centos7.1,X86-64架构。需要下载qemu源码、编译、安装三个步骤:
[root@localhost ~]# wget https://download.qemu.org/qemu-2.11.1.tar.xz
[root@localhost ~]# tar xvJf qemu-2.11.1.tar.xz
[root@localhost ~]# cd qemu-2.11.1
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
【系统安装】
1、温馨提示,安装虚拟机系统时,Host主机最好有图形界面,网上也有说开启vnc,但是vnc有时候会有分辨率问题,导致界面显示不全。
2、创建磁盘
qemu-img create -f qcow2 CentOS-ppc64.qcow2 20G
创建一个qcow2类型的磁盘,名称是Centos-ppc64,大小是20G
3、安装系统
qemu-system-ppc64 -hda /home/qemu-ppc/CentOS-ppc64.qcow2 -cdrom /home/qemu-ppc/CentOS-7-AltArch-ppc64-Minimal-1708.iso -boot d -m 4096 -smp 16,sockets=2,cores=8,threads=1
参数 |
含义 |
-boot |
启动方式 d:cd方式启动 c:磁盘方式启动 |
-m |
内存大小。图形界面方式方式内存至少要4096 |
-hda |
指定系统磁盘 |
-smp (多处理器) |
sockets 槽数 cores cpu核心数 thread一个cpu可运行多少线程 Sockets*cores*threads = smp后面的数字 |
-cdrom |
设置镜像径路 |
-cpu |
指定cpu类型。这个地方最好指定一下,否则会出现非法指令错误。支持的类型可以通过 -cpu help查看支持的所有cpu类型。 |
说明:
1)第二张界面,会耗费一定的时间,请耐心等待
2)由于是QEMU纯软件虚拟化,因此安装过程非常慢(系统安装后运型也很慢),大概花了一个晚上的时间才安装完毕。
4、安装完成,启动系统
启动的命令行与安装系统的命令行,类型去掉cdrom且将boot改成c,具体如下:
qemu-system-ppc64 -hda /home/qemu-ppc/CentOS-ppc64.qcow2 -cdrom /home/qemu-ppc/CentOS-7-AltArch-ppc64-Minimal-1708.iso -boot d -m 4096 -smp 16,sockets=2,cores=8,threads=1
【进阶】
虚拟创建完成之后,接下来的重要问题就是网络问题。这样启动虚拟机,我们进入系统之后,只有lo(环回网卡),因此需要接入网络,最起码是局域网。接下介绍一些,通过dhcp方式接入局域网(私有网络),不能访问外网。
1、创建网卡配置文件
文件内容:/etc/sysconfig/network-scripts/qemu-ifup
#!/bin/bash
# qemu-ifup script for QEMU/KVM with NAT netowrk mode
# set your bridge name
BRIDGE=virbr0 //默认虚拟网卡
IFNAME=eno2 //物理网卡,如果主机有多个物理,可以选则一个不用的。
# Network information
NETWORK=192.168.122.0
NETMASK=255.255.255.0
# GATEWAY for internal guests is the bridge in host
GATEWAY=192.168.122.1
DHCPRANGE=192.168.122.2,192.168.122.254
# Optionally parameters to enable PXE support
TFTPROOT=
BOOTP=
function check_bridge()
{
if brctl show | grep "^$BRIDGE" &> /dev/null; then
return 1
else
return 0
fi
}
function create_bridge()
{
brctl addbr "$BRIDGE"
brctl stp "$BRIDGE" on
brctl setfd "$BRIDGE" 0
ifconfig "$BRIDGE" "$GATEWAY" netmask "$NETMASK" up
}
function enable_ip_forward()
{
echo 1 > /proc/sys/net/ipv4/ip_forward
}
function add_filter_rules()
{
iptables -t nat -A POSTROUTING -s "$NETWORK"/"$NETMASK" \
! -d "$NETWORK"/"$NETMASK" -j MASQUERADE -o $IFNAME
}
function start_dnsmasq()
{
# don't run dnsmasq repeatedly
ps -ef | grep "dnsmasq" | grep -v "grep" &> /dev/null
if [ $? -eq 0 ]; then
echo "Warning:dnsmasq is already running. No need to run it again."
return 1
fi
dnsmasq \
--strict-order \
--except-interface=lo \
--interface=$BRIDGE \
--listen-address=$GATEWAY \
--bind-interfaces \
--dhcp-range=$DHCPRANGE \
--conf-file="" \
--pid-file=/var/run/qemu-dnsmasq-$BRIDGE.pid \
--dhcp-leasefile=/var/run/qemu-dnsmasq-$BRIDGE.leases \
--dhcp-no-override \
${TFTPROOT:+"--enable-tftp"} \
${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
${BOOTP:+"--dhcp-boot=$BOOTP"}
}
function setup_bridge_nat()
{
check_bridge "$BRIDGE"
if [ $? -eq 0 ]; then
create_bridge
fi
enable_ip_forward
add_filter_rules "$BRIDGE"
start_dnsmasq "$BRIDGE"
}
# need to check $1 arg before setup
if [ -n "$1" ]; then
setup_bridge_nat
ifconfig "$1" 0.0.0.0 up
brctl addif "$BRIDGE" "$1"
exit 0
else
echo "Error: no interface specified."
exit 1
fi
文件内容/etc/sysconfig/network-scripts/qemu-ifdown
!/bin/bash
# qemu-ifdown script for QEMU/KVM with NAT network mode
# set your bridge name
BRIDGE="virbr0"
if [ -n "$1" ]; then
echo "Tearing down network bridge for $1" > /tmp/temp-nat.log
ip link set $1 down
brctl delif "$BRIDGE" $1
ip link set "$BRIDGE" down
brctl delbr "$BRIDGE"
iptables -t nat -F
exit 0
else
echo "Error: no interface specified" > /tmp/temp-nat.log
exit 1
fi
注:
1) ifup需要指定虚拟网桥以及物理网卡,如上注释内容。
2) 指定DHCP范围。
2、启动虚拟机
qemu-system-ppc64 -hda /home/qemu-ppc/CentOS-ppc64.qcow2 -boot c -m 4096 -smp 16,sockets=2,cores=8,threads=1 \
-device e1000,netdev=mytap,mac=52:54:00:12:34:22 \
-netdev type=tap,id=mytap,ifname=tap0,script=/etc/sysconfig/network-scripts/qemu-ifup,downscript=/etc/sysconfig/network-scripts/qemu-ifdown
参数 |
含义 |
-device |
1、网卡类型e1000,是因特尔一种网卡类型。可以指定其他类型 2、mac地址,设置虚拟机网卡的mac地址 3、netdev指定网络id |
-netdev |
1、type是tap类型,可以指定其他类型,如bridge。 2、id,唯一标识,必须参数。 3、ifname,host主机中生成的接口名称,与虚拟中网卡,互相成为peer端口。该端口并没有ip地址。 4、Script指定虚拟机网络激活/去激活网卡的脚本,如果没有可以指定no |
3、验证,需要手动启动一下dhcp client,是网卡重新获取ip地址