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
显示了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)
- root (hd0,0)
- 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 (mockbuild@builder10.centos.org) (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 80×25
- 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
- Brought up 1 CPUs
- 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
- 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
- Bootdata ok (command line is method=nfs:192.168.1.249:/home/netinstall)
- Linux version 2.6.18-238.el5xen (mockbuild@builder10.centos.org) (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 80×25
- 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
- Brought up 1 CPUs
- 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
- 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
接下来的安装就和平时的差不多了,顺便也贴一下图。
650) this.width=650;” border=0>
选择语言,english
650) this.width=650;” border=0>
网络的配置界面
650) this.width=650;” border=0>
具体的IP信息
650) this.width=650;” border=0>
这里选择文本模式
650) this.width=650;” border=0>
欢迎界面
650) this.width=650;” border=0>
是否要初始化disk,当然要
650) this.width=650;” border=0>
这步,不要啥操作,选择OK
650) this.width=650;” border=0>
选YES,就不翻译了
650) this.width=650;” border=0>
选择NO
650) this.width=650;” border=0>
也是NO
650) this.width=650;” border=0>
选择OK
650) this.width=650;” border=0>
设置主机名
650) this.width=650;” border=0>
时区的配置
650) this.width=650;” border=0>
root口令设置
650) this.width=650;” border=0>
自定义软件包
650) this.width=650;” border=0>
650) this.width=650;” border=0>
检查依赖关系
650) this.width=650;” border=0>
650) this.width=650;” border=0>
格式化文件系统
650) this.width=650;” border=0>
安装过程
650) this.width=650;” border=0>
安装完毕,最后重启。虚拟机完装好了,安装过程中可以通过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下以虚拟机的名字为名称
要想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” ]
- # ln -s /etc/xen/centos /etc/xen/auto/
- # /etc/init.d/xendomains start
- Starting auto Xen domains: centosUsing <class ‘grub.GrubConf.GrubConfigFile’> to parse /grub/menu.lst
- (skip)[done] [ OK ]