天天看点

linux 虚拟化Xen初体验

Xen的虚拟化分为半虚拟化以及全虚拟化技术,其中半虚拟化主要是通过修改 Linux 核心来完成的虚拟化技术。Xen 的半虚拟化技术主要是用在相同发行版本的 Linux 上,如果你想要使用半虚拟化的方式启动多个虚拟机器,那么虚拟机器全部都必须是相同的操作系统,甚至要求相同版本与相同核心的 Linux 发行版本。如果你想要安装不同版本的 Linux 或者是其他的 OS ( Windows XP) 时,那就得要使用全虚拟化技术了。

全虚拟化技术必须满足以下条件:

硬件支持 Intel 的 VT 技术 (Virtualization Technology, Intel-VT);  

硬件支持 AMD 的 SVM 技术 (Secure Virtual Machine, AMD-SVM or, AMD-V)。  

下面来切实体验一下xen

 一、确定你的cpu是否支持虚拟化技术

# cat /proc/cpuinfo |grep flags |egrep -o 'pae|vmx|svm' 

pae 

svm 

显示了PAE以及SVM,说明我的CPU支持全虚拟化技术。

二、安装Xen

1.安装Xen的基本程序

# yum install -y xen* 

2.安装Xen的内核

# yum install -y kernel-xen* 

3.安装Xen的虚拟管理程序

# yum install -y virt-manager 

以上安装完毕,就来配置Xen的环境了

三、配置Xen环境

修改grub.conf文件,以Xen的内核来启动系统

# grub.conf generated by anaconda 

# Note that you do not have to rerun grub after making changes to this file 

# NOTICE:  You do not have a /boot partition.  This means that 

#          all kernel and initrd paths are relative to /, eg. 

#          root (hd0,0) 

#          kernel /boot/vmlinuz-version ro root=/dev/sda1 

#          initrd /boot/initrd-version.img 

#boot=/dev/sda 

default=0 

timeout=5 

splashimage=(hd0,0)/boot/grub/splash.xpm.gz 

hiddenmenu 

title CentOS (2.6.18-238.12.1.el5xen) 

        root (hd0,0) 

        kernel /boot/xen.gz-2.6.18-238.12.1.el5 

        module /boot/vmlinuz-2.6.18-238.12.1.el5xen ro root=LABEL=/ 

        module /boot/initrd-2.6.18-238.12.1.el5xen.img 

title CentOS (2.6.18-238.el5) 

        kernel /boot/vmlinuz-2.6.18-238.el5 ro root=LABEL=/ 

        initrd /boot/initrd-2.6.18-238.el5.img 

修改完毕,重启系统,shell界面就可以看到

# uname -a 

Linux Xen 2.6.18-238.12.1.el5xen #1 SMP Tue May 31 14:02:29 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux 

再看一下

# xm list 

Name                                      ID Mem(MiB) VCPUs State   Time(s) 

Domain-0                                   0     1228     2 r-----    444.8

Xen的log所在地

# ll /var/log/xen/ 

total 44 

drwx------ 2 root root  4096 May 10 05:30 console 

-rw-r--r-- 1 root root  9653 Jun 10 15:07 domain-builder-ng.log 

-rw-r--r-- 1 root root    36 Jun 10 14:53 xend-debug.log 

-rw-r--r-- 1 root root 17855 Jun 10 15:07 xend.log 

-rw-r--r-- 1 root root    36 Jun 10 15:07 xen-hotplug.log 

四、建立虚拟机

准备工作

这里我们安装虚拟机采用NFS的方式,如果你对你的网络比较自信,也可以采用网络安装的方式,视具体情况而定。

创建一个NFS Server并将光盘根目录下的文件copy 进去,同时分享出来并允许Xen宿主机访问,这个不是重点,就不写过程了

下面进入真正的虚拟机安装阶段

# virt-install -n centos -r 512 --vcpus=1 \ 

> --nographic -f /opt/vm/centos.img -s 20 -p \ 

> -l nfs:192.168.1.249:/home/netinstall 

解释一下各参数的意义:

-n           代表虚拟机的名字 

-r           分配给虚拟机的内存 

--vcpus      分配给虚拟机的CPU 

--nographic  不适用图形界面 

-f           虚拟机磁盘映像的所在地 

-s           虚拟机磁盘映像的大小,单位记得是GB 

-p           半虚拟化的方式 

-l           安装映像的路径 

PS:上面是采用NFS的方式,如果internet比较快,就换成internet上的源,门户网站sohu,163均有开源的镜像站点,另外中国科技大学的镜像站点也不错

# 开源镜像站点 

163  http://mirrors.163.com 

sohu http://mirrors.sohu.com 

科大  http://mirrors.ustc.edu.cn 

运行上面的安装虚拟机命令后,会提示以下的信息

Starting install... 

Retrieving file vmlinuz...                                                                 | 2.1 MB     00:00 

Retrieving file initrd.img...              85% [===========================     ] 5.6 MB/s | 6.7 MB     00:00 ETA 

Message from syslogd@ at Fri Jun 10 15:07:07 2011 ... 

Xen kernel: Disabling IRQ #16 

Retrieving file initrd.img...                                                              | 7.9 MB     00:00 

Creating storage file...                                                                   |  20 GB     00:00 

Creating domain...                                                                         |    0 B     00:00 

Connected to domain centos 

Escape character is ^] 

Bootdata ok (command line is  method=nfs:192.168.1.249:/home/netinstall) 

Linux version 2.6.18-238.el5xen ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Thu Jan 13 16:41:45 EST 2011 

BIOS-provided physical RAM map: 

 Xen: 0000000000000000 - 0000000020800000 (usable) 

No mptable found. 

Built 1 zonelists.  Total pages: 133120 

Kernel command line:  method=nfs:192.168.1.249:/home/netinstall 

Initializing CPU#0 

PID hash table entries: 4096 (order: 12, 32768 bytes) 

Xen reported: 2812.790 MHz processor. 

Console: colour dummy device 80x25 

Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes) 

Inode-cache hash table entries: 65536 (order: 7, 524288 bytes) 

Software IO TLB disabled 

Memory: 496384k/532480k available (2529k kernel code, 27260k reserved, 1736k data, 196k init) 

Calibrating delay using timer specific routine.. 7050.28 BogoMIPS (lpj=14100572) 

Security Framework v1.0.0 initialized 

SELinux:  Initializing. 

selinux_register_security:  Registering secondary module capability 

Capability LSM initialized as secondary 

Mount-cache hash table entries: 256 

CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line) 

CPU: L2 Cache: 1024K (64 bytes/line) 

CPU: Physical Processor ID: 0 

CPU: Processor Core ID: 1 

(SMP-)alternatives turned off 

Brought up 1 CPUs 

checking if image is initramfs... it is 

Grant table initialized 

NET: Registered protocol family 16 

PCI: setting up Xen PCI frontend stub 

ACPI: Interpreter disabled. 

Linux Plug and Play Support v0.97 (c) Adam Belay 

pnp: PnP ACPI: disabled 

xen_mem: Initialising balloon driver. 

usbcore: registered new driver usbfs 

usbcore: registered new driver hub 

PCI: System does not support PCI 

NetLabel: Initializing 

NetLabel:  domain hash size = 128 

NetLabel:  protocols = UNLABELED CIPSOv4 

NetLabel:  unlabeled traffic allowed by default 

NET: Registered protocol family 2 

IP route cache hash table entries: 32768 (order: 6, 262144 bytes) 

TCP established hash table entries: 131072 (order: 9, 2097152 bytes) 

TCP bind hash table entries: 65536 (order: 8, 1048576 bytes) 

TCP: Hash tables configured (established 131072 bind 65536) 

TCP reno registered 

audit: initializing netlink socket (disabled) 

type=2000 audit(1307689628.858:1): initialized 

VFS: Disk quotas dquot_6.5.1 

Dquot-cache hash table entries: 512 (order 0, 4096 bytes) 

Initializing Cryptographic API 

alg: No test for crc32c (crc32c-generic) 

ksign: Installing public key data 

Loading keyring 

- Added public key C099FB4D84A418B6 

- User ID: CentOS (Kernel Module GPG key) 

io scheduler noop registered 

io scheduler anticipatory registered 

io scheduler deadline registered 

io scheduler cfq registered (default) 

pci_hotplug: PCI Hot Plug PCI Core version: 0.5 

rtc: IRQ 8 is not free. 

Non-volatile memory driver v1.2 

Linux agpgart interface v0.101 (c) Dave Jones 

brd: module loaded 

Xen virtual console successfully installed as xvc0 

Event-channel device installed. 

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 

ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx 

ide-floppy driver 0.99.newide 

usbcore: registered new driver hiddev 

usbcore: registered new driver usbhid 

drivers/usb/input/hid-core.c: v2.6:USB HID core driver 

PNP: No PS/2 controller found. Probing ports directly. 

i8042.c: No controller found. 

mice: PS/2 mouse device common for all mice 

md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27 

md: bitmap version 4.39 

TCP bic registered 

Initializing IPsec netlink socket 

NET: Registered protocol family 1 

NET: Registered protocol family 17 

XENBUS: Device with no driver: device/vbd/51712 

XENBUS: Device with no driver: device/vif/0 

Initalizing network drop monitor service 

Write protecting the kernel read-only data: 498k 

Greetings. 

anaconda installer init version 11.1.2.224 starting 

mounting /proc filesystem... done 

creating /dev filesystem... done 

mounting /dev/pts (unix98 pty) filesystem... done 

mounting /sys filesystem... done 

anaconda installer init version 11.1.2.224 using /dev/xvc0 as console 

trying to remount root filesystem read write... done 

mounting /tmp as ramfs... done 

running install... 

running /sbin/loader 

接下来的安装就和平时的差不多了,顺便也贴一下图。

<a target="_blank" href="http://blog.51cto.com/attachment/201106/154856431.png"></a>

选择语言,english

<a target="_blank" href="http://blog.51cto.com/attachment/201106/154929602.png"></a>

网络的配置界面

<a target="_blank" href="http://blog.51cto.com/attachment/201106/154947827.png"></a>

具体的IP信息

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155010226.png"></a>

这里选择文本模式

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155054797.png"></a>

欢迎界面

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155112263.png"></a>

是否要初始化disk,当然要

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155144299.png"></a>

这步,不要啥操作,选择OK

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155221426.png"></a>

选YES,就不翻译了

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155257404.png"></a>

选择NO

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155424895.png"></a>

也是NO

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155440209.png"></a>

选择OK

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155455616.png"></a>

设置主机名

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155543328.png"></a>

时区的配置

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155557961.png"></a>

root口令设置

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155630341.png"></a>

自定义软件包

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155734914.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155648795.png"></a>

检查依赖关系

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155757774.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155817703.png"></a>

格式化文件系统

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155841420.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201106/155904776.png"></a>

安装完毕,最后重启。虚拟机完装好了,安装过程中可以通过ctrl+]回到宿主机。

五、虚拟机的一些管理命令

xm dm xen的dmesg信息 

xm create centos 启动虚拟机centos 

xm console centos 以文本方式连接至虚拟机 

xm reboot centos 重启虚拟机 

xm shutdown centos 关闭虚拟机 

xm pause centos 暂停虚拟机 

xm resume centos 恢复被暂停的虚拟机 

………

虚拟机的配置文件位于/etc/xen下以虚拟机的名字为名称

name = "centos" 

uuid = "5ec1488a-42ec-87a7-8001-49243f29497f" 

maxmem = 512 

memory = 512 

vcpus = 1 

bootloader = "/usr/bin/pygrub" 

on_poweroff = "destroy" 

on_reboot = "restart" 

on_crash = "restart" 

disk = [ "tap:aio:/opt/vm/centos.img,xvda,w" ] 

vif = [ "mac=00:16:36:45:e1:b1,bridge=xenbr0,script=vif-bridge" ] 

要想Xen虚拟机随开机自启动,要这样做

# ln -s /etc/xen/centos /etc/xen/auto/ 

# /etc/init.d/xendomains start 

Starting auto Xen domains: centosUsing &lt;class 'grub.GrubConf.GrubConfigFile'&gt; to parse /grub/menu.lst 

(skip)[done]                                               [  OK  ] 

本文转自dongfang_09859 51CTO博客,原文链接:http://blog.51cto.com/hellosa/585091,如需转载请自行联系原作者

继续阅读