天天看點

KVM xen

1,檢視是否支援硬體虛拟化

egrep --color=auto '(vmx|xvm)' /proc/cpuinfo 

2,安裝xen

 yum -y install xen kernel-xen

3,title CentOS (3.7.4-1.el6xen.x86_64)

        root (hd0,0)

        kernel /xen.gz dom0_mem=512M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin

        module /vmlinuz-3.7.4-1.el6xen.x86_64 ro root=UUID=44a2a303-b91c-46cf-9fde-fd8119b9cb1c rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD LANG=zh_CN.UTF-8 rd_NO_LVM crashkernel=auto rhgb quiet rd_NO_DM rhgb quiet

        module /initramfs-3.7.4-1.el6xen.x86_64.img

 4,建立映像檔案

 dd if=/dev/zero of=/data/xen/test1.img bs=1M oflag=direct seek=102399 count=1

 5,建立橋裝置

 cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

[root@node202 network-scripts]# cat ifcfg-eth0 

DEVICE="eth0"

BOOTPROTO="none"

#HWADDR="00:0C:29:48:E3:01"

IPV6INIT="yes"

MTU="1500"

NM_CONTROLLED="no"

ONBOOT="yes"

TYPE="Ethernet"

#UUID="8331e082-ba65-43bc-9e98-12dedf151d87"

BRIDGE=br0

[root@node202 network-scripts]# cat ifcfg-br0 

DEVICE="br0"

NM_CONTROLLED="yes"

IPADDR=192.168.100.202

NETMASK=255.255.255.0

TYPE="Bridge"

6,建立一個配置檔案

#vim /etc/xen/test1

kernel = "/tmp/vmlinuz"

ramdisk = "/tmp/initrd.img"

memory = 512

name = "test1"

vcpus = 1

vif = [ 'bridge=br0' ]

disk = [ 'file:/data/xen/test1.img,xvda,w' ]

7,啟動虛拟機

xm create test1

安裝系統

8,改配置檔案重起系統

[root@node202 xen]# vim test1 

bootloader="/usr/bin/pygrub"

vcpus=1

on_reboot = 'restart'

on_crash = 'destroy'

------------

disk = [ "phy:sdc,xvda,w",'file:/data/xen/test1.img,xvda,w' ]

phy表示實體磁盤

vif = [ "mac=xxxxx,bridge=br0,script=vif-bridge" ]

-----------------

當啟動虛拟機後會有一個虛拟網卡橋到本機

vif6.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  

          inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:4 errors:0 dropped:0 overruns:0 frame:0

          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:32 

          RX bytes:272 (272.0 b)  TX bytes:1404 (1.3 KiB)

本機會有一個僅主機的虛拟網卡

virbr0    Link encap:Ethernet  HWaddr 52:54:00:95:6C:DE  

          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:272 (272.0 b)  TX bytes:0 (0.0 b)

可以拷貝以前的img檔案直接啟動另一個虛拟機

完成

~                                                   

io半虛拟化裝置分為前端和後端,前端在個domU上

後端在dom0上,domU有一個特殊驅動能識别前端的這個特殊的裝置

如:( /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/xen-netfront.ko ),

并且在處理資料的時候隻是簡單的處理,然後交給後端,這樣大大提高了性能

如果io是完全虛拟化,domU看到的是一個真正的裝置(虛拟的)

在發生資料時前端後端都要對資料進行處理,影響性能

區分虛拟和模拟的一個重要标準是,在模拟中虛拟機的任何cpu指令都是運作在vcpu

上的,而在虛拟中非特權指令是直接運作在實體cpu上的,隻有特權指令才交給vmm

翻譯執行

io的半虛拟化和cpu的半虛拟沒有關系,cpu半虛拟化,io可以完全虛拟化

但是明顯半虛拟化性能好

虛拟需要cpu支援硬體虛拟化,就是cpu在生産的時候有五個ring

主控端的kernel運作在ring -1 ,

完全虛拟化的兩種加速方式:BT HVM

xen的半虛拟化:

xen運作在硬體上直接管理cpu memory 另外運作一個特權域

管理io和其他的裝置 各虛拟機知道自己運作在虛拟的環境中(因為kernel經過修改)

對特權指令的調用會發起:hyper call,而不是直接運作 非特權還是直接在Cpu上運作

[root@localhost tmp]# yum -y install xen-4.1.2-20.el6.x86_64.rpm  xen-runtime-4.1.2-20.el6.x86_64.rpm xen-libs-4.1.2-20.el6.x86_64.rpm xen-licenses-4.1.2-20.el6.x86_64.rpm xen-hypervisor-4.1.2-20.el6.x86_64.rpm kernel-xen-3.7.4-1.el6xen.x86_64.rpm kernel-xen-release-6-4.noarch.rpm bridge-utils-1.5-2.el6.x86_64.rpm kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm

title CentOS (3.7.4-1.el6xen.x86_64)

service xend start

xm list

xl info

xl help

xen虛拟狀态:

    r: 

    b: 阻塞

    p: 暫停

    s: 停止

    c: 崩潰

    d: dying, 正在關閉的過程中     

dd if=/dev/zero of=centos.img bs=1M oflag=direct seek=1023 count=1

# mount -o loop centos.img /mnt

xm的配置檔案:

    kernel:核心

    ramdisk: initramfs或initrd

    name: 域名稱

    memory: 記憶體大小

    disk: 磁盤裝置檔案清單,格式disk=["disk1", "disk2",], 每個disk都由三個參數進行定義:“backend-dev”,“frontend-dev”,“mode”

        backend-dev: 有兩種類型,實體裝置,虛拟磁盤映像檔案,格式為分别為phy:device和file:/path/to/p_w_picpath_file; 

        front-dev: 定義其在DomU中裝置類型;虛拟磁盤映像檔案對應的裝置檔案名稱通常為xvd[a-z]

        mode: 通路權限模型,r, w

    vcpus: 虛拟CPU的個數;

    root: 根檔案系統所在的裝置;

    extra: 傳遞給核心的額外參數;selinux=0

    on_reboot: 執行xm reboot指令時的操作,有destroy和restart; 

    on_crash: 有destroy, restart, preserve(儲存崩潰時的資訊以用于調試)

    vif :vif = ['ip="172.16.100.11", bridge=br0']

        type: 裝置類型,預設為netfront

        mac: 指定mac位址;

        bridge: 指定橋接到的實體裝置

        ip: ip位址;

        script: 配置此接口的腳本檔案

        vifname: 後端裝置名稱

    bootloader: 引導器檔案的路徑,一般指的PyGrub的路徑;

xm console centos6

[root@localhost network-scripts]# cat ifcfg-eth0 

IPV6INIT="no"

BRIDGE="br0"

[root@localhost network-scripts]# cat ifcfg-br0 

IPADDR="192.168.100.26"

NETMASK="255.255.255.0"

# brctl stp br0 on

在配置檔案/etc/xen配置kernel initrd 為安裝引導的 定義好vcpu memory disk

vif = [ 'dridge=br0']

disk = [ 'file://xen/vm2/centos6.img,xvda,w']

然後

xm create -c centos6

xm destory centos6

安裝好後 修改/etc/xen kernel........

bootloader = "/usr/bin/pugrub"

隻要寫了bootloader後就不需要在寫kernel initrd root extra

因為bootloader會讀取虛拟磁盤上的啟動引導扇區,加載kernel

樣例配置檔案有兩種xm and xl

顯示采用c/s架構vfb幀緩沖,在虛拟機啟動一個圖形顯示請求,然後發送給dom0

在dom0安裝tigervnc-server

啟動vcn:  vncserver :1

qemu-img -f qcow2 -o size=120G,preallocation=metadata /xen/xm1/centos6.qcow2

qemu-img info /xen/xm1/centos6.qcow2

使用了bootloader, pygrup示例:

#ramdisk="/boot/initramfs-2.6.32-358.el6.x86_64.img"

#kernel="/boot/vmlinuz-2.6.32-358.el6.x86_64"

name="linux"

memory=128

disk=['file:/xen/vm2/dom2.img,xvda,w',]

#root="/dev/xvda2 ro"

#extra="selinux=0 init=/sbin/init"

vif=[ 'bridge=br0' ]

on_crash="destroy"

on_reboot="restart"

使用Dom0中的kernel和ramdisk引導的示例:

ramdisk="/boot/initramfs-2.6.32-358.el6.x86_64.img"

kernel="/boot/vmlinuz-2.6.32-358.el6.x86_64"

name="test"

disk=['file:/xen/vm1/test.img,xvda,w',]

root="/dev/xvda ro"

extra="selinux=0 init=/sbin/init"

自定義安裝,并啟用了vnc功能:

#ramdisk="/xen/isolinux/initrd.img"

#kernel="/xen/isolinux/vmlinuz"

name="rhel6"

vcpus=2

memory=512

disk=['file:/xen/vm3/rhel6.img,xvda,w',]

#extra="ks=http://172.16.0.1/rhel6.x86_64.cfg"

on_reboot="destroy"

vfb=[ 'vnc=1,vnclisten=0.0.0.0' ]

yum -y install libvirt 

service libvirtd start

yum install virt-manager

yum -y install virt-viewer

virt-install -n "centos6.4" -r 512 --vcpu=1 -l http://172.16.0.1/centos6.4/ --disk path=/xen/vm1/centos6.4.qcow --network bridge=br0 --force

----------------------------------------

kvm

# grep -Ei --color=auto "vmx|svm" /proc/cpuinfo

1,先配置好橋

2,安裝包,子產品

# modprobe kvm_intel

# modprobe kvm

# lsmod | grep kvm

kvm_intel              54285  0 

kvm                   333172  1 kvm_intel

yum -y install virt-viewer qemu-kvm qemu-kvm-tools virt-install

3,create disk img

# qemu-img create -f qcow2 -o preallocation=metadata /p_w_picpaths/vm2/test.qcow2 10G

# qemu-img resize /p_w_picpaths/vm2/test.qcow2 +10G    增到10G

Image resized.

# qemu-img info /p_w_picpaths/vm2/test.qcow2

p_w_picpath: /p_w_picpaths/vm2/test.qcow2

file format: qcow2

virtual size: 20G (21474836480 bytes)

disk size: 1.7M

cluster_size: 65536

轉換格式:

# qemu-img create -f vmdk -o ? test.vmdk        #模拟檢視相關的幫助資訊

Supported options:

size             Virtual disk size

adapter_type     Virtual adapter type, can be one of ide (default), lsilogic, buslogic or legacyESX

backing_file     File name of a base p_w_picpath

compat6          VMDK version 6 p_w_picpath

# qemu-img convert -O vmdk -o adapter_type=lsilogic /p_w_picpaths/vm2/test.qcow2 /p_w_picpaths/vm2/test.vmdk

轉換成VMware的vmdk格式

# qemu-img info /p_w_picpaths/vm2/test.vmdk

p_w_picpath: /p_w_picpaths/vm2/test.vmdk

file format: vmdk

disk size: 16K

建立快照

# qemu-img snapshot -l /p_w_picpaths/vm1/rhel6.qcow2       建立之前檢視是否有快照;建議不要同名

# qemu-img snapshot -c rhel6-1.snap /p_w_picpaths/vm1/rhel6.qcow2 

# qemu-img snapshot -l /p_w_picpaths/vm1/rhel6.qcow2

Snapshot list:

ID        TAG                 VM SIZE                DATE       VM CLOCK

1         rhel6-1.snap              0 2014-05-25 10:51:34   00:00:00.000

Parameters to snapshot subcommand:        #詳細幫助

  'snapshot' is the name of the snapshot to create, apply or delete

  '-a' applies a snapshot (revert disk to saved state)        應用快照

  '-c' creates a snapshot                                     建立快照

  '-d' deletes a snapshot                                     ***快照

  '-l' lists all snapshots in the given p_w_picpath                 檢視快照清單

4,安裝

為了顯示友善;需要安裝vnc軟體

# yum -y install tigervnc tigervnc-server

#ln -sv /usr/libexec/qemu-kvm /usr/bin

#qemu-img create -f qcow2 -o size=100G,preallocation=metadata /data/test3.img

qemu-kvm -name "redhat" -m 512 -smp 1 -drive file=/data/test3.img,\

> if=virtio,index=0,media=disk,format=qcow2 \

> -drive file=/root/rhel-server-6.4-i386-dvd.iso,media=cdrom,index=1 \

> -boot order=d

使用# vncviewer :5900連接配接檢視,如果打不開安裝下面的包

#yum install xorg-x11-server-Xorg

yum -y install xorg-x11-server-Xvfb

-------------

以pxe引導安裝

#需要網卡支援;是以需要寫一個配置網卡接口的腳本;預設在/etc/qemu-ifup

# vim /etc/qemu-ifup 

#!/bin/bash

#

switch=br0

if [ -n $1 ];then

        ifconfig $1 up

        sleep 1

        brctl addif $switch $1

        exit 0

else

        echo "Error: No Specifed interface."

        exit 1

fi

# chmod +x /etc/qemu-ifup

#腳本能自動調用指令中ifname=""網卡的名稱

# qemu-kvm -name "test1" -m 512 -smp 1 -drive file=/data/test1.qcow2,media=disk,if=virtio,index=0,format=qcow2 -net nic,model=virtio -net tap,ifname=vnet0,downscript=no -vnc :1 -boot order=c

#使用qemu-kvm安裝隻需要安裝qemu-kvm

-----pxe安裝virt-install

# virt-install --name "centos6" -r 512 --vcpus 2 --disk path=/p_w_picpaths/vm2/centos.img,size=120 --network bridge=br0,model=virtio --pxe --force

用virt-manager檢視,如果有亂碼安裝一下包

#yum install dejavu-lgc-sans-fonts

如果鍵盤不一緻

open-->deftails-->dispiay VNC-->keymap=en-us

源碼安裝qemu

1,建立橋

修改/etc/network/interfaces,直接用下面的替換。

a) 靜态ip模式

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet manual

auto br0

iface br0 inet static

address 192.168.0.10

network 192.168.0.0

netmask 255.255.255.0

broadcast 192.168.0.255

gateway 192.168.0.1

bridge_ports eth0

bridge_stp off

bridge_fd 0

bridge_maxwait 0

b) DHCP模式

iface br0 inet dhcp

4)重新開機網絡

sudo /etc/init.d/networking restart

建立一個腳本

/usr/sbin/tunctl -u `whoami` -t $1

 /sbin/ip link set $1 up 

       # ifconfig $1 up

        sleep 1

        brctl addif $switch $1

        exit 0

        echo "Error: No Specifed interface."

        exit 1

編譯安裝qemu

./configure 

apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers pkg-config libgnutls-dev libpci-dev

安裝虛拟機

qemu-system-x86_64  --enable-kvm  -hda /data/kvm/test.img -cdrom /data/iso/CentOS-6.5-x86_64-mini-auto.iso  -boot d -m 1024 -net nic,macaddr=66:66:66:66:66:00 -net tap,ifname=tap1,downscript=no -vnc 5900

啟動虛拟機

qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:00 -net tap,ifname=tap2,downscript=no -vnc 0.0.0.0:5900

啟動後重新開機一下虛拟機,不然網絡就是有問題,不知道為什麼。

qemu-system-x86_64  --enable-kvm  -hda /data/kvm/test.img   -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:00 -net tap,ifname=tap1,downscript=no -vnc 0.0.0.0:5900

qemu-system-x86_64 --enable-kvm  -hda /data/kvm/test.img   -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:00 -net tap,ifname=tap0,downscript=no -vnc 0.0.0.0:5905

qemu-img snapshot -c clean1 centos6-1.qcow2 

檢視快照

qemu-img snapshot -l centos6-1.qcow2

導出快照

qemu-img convert -f qcow2 -O qcow2 -s clean1 centos6-1.qcow2 centos6-1.qcow2.clean1 

通過快照啟動虛拟機

qemu-system-x86_64  --enable-kvm  -hda /data/kvm/centos6-1.qcow2.clean1   -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:00 -net tap,ifname=tap5,downscript=no -vnc 0.0.0.0:5910

删除快照

qemu-img snapshot -d clean1 centos6-1.qcow2

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/rhel7-1.qcow2 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:00 -net tap,ifname=tap0,downscript=no  &

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.141 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:01  -net tap,ifname=tap1,downscript=no   & 

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.142 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:02  -net tap,ifname=tap2,downscript=no   & 

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.143 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:03  -net tap,ifname=tap3,downscript=no   & 

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.144 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:04  -net tap,ifname=tap4,downscript=no  &

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.145 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:05  -net tap,ifname=tap5,downscript=no  & 

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.146 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:06  -net tap,ifname=tap6,downscript=no   &

/usr/local/bin/qemu-system-x86_64 --enable-kvm  -hda /data/kvm/centos6.qcow2.147 -boot c -m 1024 -net nic,macaddr=66:66:66:66:66:07  -net tap,ifname=tap7,downscript=no  &

KVM
上一篇: Dot Net 初探

繼續閱讀