Qemu虚拟化PowerPc

    由于工作需要,需要需要虚拟出一个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

启动方式 dcd方式启动 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、typetap类型,可以指定其他类型,如bridge

2、id,唯一标识,必须参数。

3、ifnamehost主机中生成的接口名称,与虚拟中网卡,互相成为peer端口。该端口并没有ip地址。

4、Script指定虚拟机网络激活/去激活网卡的脚本,如果没有可以指定no

3、验证,需要手动启动一下dhcp client,是网卡重新获取ip地址


猜你喜欢

转载自blog.csdn.net/xxb249/article/details/79608909