截止目前为止Xen4CentOS只有Centos6版本可以用,所以Centos7只能编译源码的方式安装。
安装需要的软件包
yum update
yum groupinstall "Development Tools"
yum install -y gcc gcc-c++ git patch texinfo python-devel acpica-tools libuuid-devel ncurses-devel glib2 glib2-devel libaio-devel openssl-devel yajl-devel glibc-devel glibc-devel.i686 pixman-devel bc
rpm -ivh http://mirror.centos.org/centos/6/os/x86_64/Packages/dev86-0.16.17-15.1.el6.x86_64.rpm
安装 Xen
git clone git://xenbits.xen.org/xen.git
cd xen/
./configure
make dist
make install
安装 dom0 内核
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.18.tar.gz
tar zxf linux-3.18.18.tar.gz
cd linux-3.18.18
make menuconfig
vim .config
#修改如下参数
CONFIG_X86_IO_APIC=y
CONFIG_ACPI=y
CONFIG_ACPI_PROCFS=y (optional)
CONFIG_XEN_DOM0=y
CONFIG_PCI_XEN=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
make
make modules
make modules_install
make install
配置 GRUB
grub2-mkconfig -o /etc/grub2.cfg
#查看grub2.cfg相关配置
cat /etc/grub2.cfg
#静态文件系统信息,定义了存储设备和分区整合到整个系统的方式
cat /etc/fstab
#复制grub2.cfg里第一个引导配置到下面的文件,添加一行 multiboot /xen.gz,linux16、initrd16修改为module
vi /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'CentOS Linux 7 (Core), with Linux 3.18.18 Xen' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.18.18-advanced-dfad9c15-962d-492d-b83a-31d22a5f0eec' {
load_video
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 8089210c-1bb3-4589-b18d-cc5b2b97774e
else
search --no-floppy --fs-uuid --set=root 8089210c-1bb3-4589-b18d-cc5b2b97774e
fi
multiboot /xen.gz
module /vmlinuz-3.18.18 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet
module /initramfs-3.18.18.img
}
#重新生成菜单
grub2-mkconfig -o /etc/grub2.cfg
可能出现的错误和解决办法
重启后,选择 CentOS Linux, with Linux 3.15.4 Xen 进入 Xen 系统,使用 xl info 命令发现有错,这是因为 Xen 相关的软件库被安装到了 /usr/local/lib 目录,系统找不到。所以做一些链接就可以了:
xl info
xl: error while loading shared libraries: libxlutil.so.4.3: cannot open shared object file: No such file or directory
cd /usr/lib/
ln -s /usr/local/lib/libxlutil.so.4.3.0 libxlutil.so.4.3
ln -s /usr/local/lib/libxlutil.so.4.3.0 libxlutil.so
ln -s /usr/local/lib/libxenlight.so.4.5.0 libxenlight.so.4.5
ln -s /usr/local/lib/libxenlight.so.4.5.0 libxenlight.so
ln -s /usr/local/lib/libxenctrl.so.4.5.0 libxenctrl.so.4.5
ln -s /usr/local/lib/libxenguest.so.4.5.0 libxenguest.so.4.5
ln -s /usr/local/lib/libxenguest.so.4.5.0 libxenguest.so
ln -s /usr/local/lib/libxenstat.so.0.0 libxenstat.so.0
ln -s /usr/local/lib/libxenstat.so.0.0 libxenstat.so
ln -s /usr/local/lib/libxenstore.so.3.0.3 libxenstore.so.3.0
ln -s /usr/local/lib/libxenstore.so.3.0.3 libxenstore.so
ln -s /usr/local/lib/libxenvchan.so.1.0.0 libxenvchan.so.1.0
ln -s /usr/local/lib/libxenvchan.so.1.0.0 libxenvchan.so
ln -s /usr/local/lib/libblktapctl.so.1.0.0 libblktapctl.so.1.0
ln -s /usr/local/lib/libblktapctl.so.1.0.0 libblktapctl.so
ldconfig
再次运行 xl info 发现如下问题:
xl info
xc: error: Could not obtain handle on privileged command interface (2 = No such file or directory): Internal error
libxl: error: libxl.c:99:libxl_ctx_alloc: cannot open libxc handle: No such file or directory
cannot init xl context
是因为没有挂载 xenfs 的缘故,挂载一下就可以了:
modprobe xenfs
mount -t xenfs xenfs /proc/xen
ls /proc/xen/
capabilities privcmd xenbus xsd_kva xsd_port
# 一劳永逸的办法修改fstab文件
vim /etc/fstab
#追加如下一行
none /proc/xen xenfs defaults 0 0
xl info
host : localhost.localdomain
release : 3.18.18
version : #1 SMP Thu Jul 16 17:43:05 CST 2015
machine : x86_64
nr_cpus : 2
max_cpu_id : 7
nr_nodes : 1
cores_per_socket : 2
threads_per_core : 1
cpu_mhz : 3192
hw_caps : bfebfbff:20100800:00000000:00000900:0400e3bd:00000000:00000001:00000000
virt_caps : hvm
total_memory : 8091
free_memory : 127
sharing_freed_memory : 0
sharing_used_memory : 0
outstanding_claims : 0
free_cpus : 0
xen_major : 4
xen_minor : 6
xen_extra : -unstable
xen_version : 4.6-unstable
xen_caps : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler : credit
xen_pagesize : 4096
platform_params : virt_start=0xffff800000000000
xen_changeset : Fri Jun 26 18:24:22 2015 +0100 git:c40317f
xen_commandline :
cc_compiler : gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)
cc_compile_by : root
cc_compile_domain :
cc_compile_date : Thu Jul 16 13:03:35 CST 2015
xend_config_format : 4
记得启动 xencommons,以前旧版本的 xend 已经被 xencommons 替代了:
/etc/init.d/xencommons start
#开机启动xencommons
/sbin/chkconfig --add xencommons
/sbin/chkconfig --add xendomains
/sbin/chkconfig xendomains on
/sbin/chkconfig xencommons on
xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 7870 2 r----- 213.0
Xen 从 4.1 版本开始引入了新版工具集 xl/libxl,并在后续的版本中逐步替代旧的 xm/xend,在 4.5 版本中已经完全删除了 xm/xend.
每次启动菜单有很多选项,进去把除当前版本以外的删除掉
# !!! 保留vmlinuz-3.18.18、initramfs-3.18.18.img
cd /boot/
rm -fr
vmlinuz-*
initramfs-*.img
#重新生成菜单
grub2-mkconfig -o /etc/grub2.cfg
创建虚拟机
创建映像
#创建一个 20G 的镜像文件
# 你希望在文件增长时才配置数据块,可以用迟缓的方式来配置
dd if=/dev/zero of=/ROOT/xen/web_1.img oflag=direct bs=1M seek=20479 count=1
# 如果你想立即配置所有数据块,你亦可以这样做:
dd if=/dev/zero of=/ROOT/xen/web_1.img oflag=direct bs=1M count=20480
Xen配置文件
#可以到这里选一个配置文件
https://github.com/frederickding/xenserver-kickstart
关闭虚拟机:
/usr/sbin/xl shutdown vm01
给虚拟机镜像文件(.img)追加 4GB 空间:
dd if=/dev/zero bs=1024k count=4096 >> /vm/vm01.img
扫描检查镜像文件:
/sbin/e2fsck -f /vm/vm01.img
这个时候只是增加了镜像文件(硬盘)的大小,这个镜像文件不是普通的文件,里面包含可 mount/umount 的 loop 文件系统,所以需要调整文件系统大小,不然的话进入虚拟机后 df 会发现硬盘大小没变:
/sbin/resize2fs /vm/vm01.img
重新启动 Xen 虚拟机:
/usr/sbin/xm create vm01
进入虚拟机后查看硬盘大小:
/usr/sbin/xm console vm01
df -h