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"
BOOTPROTO="none"
#HWADDR="00:0C:29:48:E3:01"
IPV6INIT="yes"
MTU="1500"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.100.202
NETMASK=255.255.255.0
TYPE="Bridge"
#UUID="8331e082-ba65-43bc-9e98-12dedf151d87"

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 
memory = 512
bootloader="/usr/bin/pygrub"
vcpus=1
on_reboot = 'restart'
on_crash = 'destroy'
name = "test1"
vif = [ 'bridge=br0' ]
disk = [ 'file:/data/xen/test1.img,xvda,w' ]
------------
disk = [ "phy:sdc,xvda,w",'file:/data/xen/test1.img,xvda,w' ]
phy表示物理磁盤

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

-----------------
xm create test1

當啓動虛擬機後會有一個虛擬網卡橋到本機
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
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame: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)
        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

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 
DEVICE="eth0"
BOOTPROTO="none"
IPV6INIT="no"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="br0"

[root@localhost network-scripts]# cat ifcfg-br0 
DEVICE="br0"
BOOTPROTO="none"
IPADDR="192.168.100.26"
IPV6INIT="no"
MTU="1500"
NETMASK="255.255.255.0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"

# 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 list
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"
vcpus=1
memory=128
disk=['file:/xen/vm2/dom2.img,xvda,w',]
bootloader="/usr/bin/pygrub"
#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"
vcpus=1
memory=128
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',]
bootloader="/usr/bin/pygrub"
#root="/dev/xvda2 ro"
#extra="selinux=0 init=/sbin/init"
#extra="ks=http://172.16.0.1/rhel6.x86_64.cfg"
vif=[ 'bridge=br0' ]
on_crash="destroy"
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 libvirt 
service libvirtd start
yum install virt-manager
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
virtual size: 20G (21474836480 bytes)
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

若是鍵盤不一致node

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



源碼安裝qemuvim

1,建立橋
後端

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

a) 靜態ip模式bash

auto lo網絡

iface lo inet loopback架構


auto eth0app

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模式

auto lo

iface lo inet loopback


auto eth0

iface eth0 inet manual


auto br0

iface br0 inet dhcp

bridge_ports eth0

bridge_stp off

bridge_fd 0

bridge_maxwait 0

4)重啓網絡

sudo /etc/init.d/networking restart


建立一個腳本

#!/bin/bash

#

switch=br0

if [ -n $1 ];then

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

 /sbin/ip link set $1 up 

       # ifconfig $1 up

        sleep 1

        brctl addif $switch $1

        exit 0

else

        echo "Error: No Specifed interface."

        exit 1

fi


編譯安裝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  &

相關文章
相關標籤/搜索