admin 发表于 2019-11-8 16:07:37

基于xen和busybox创建虚拟机

相关链接:xen虚拟化部署centos6.7系统

xen的简介Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达128个有完全功能的操作系统。在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。
Xen的架构如图:
Xen虚拟机的组成:Xen Hypervisor:虚拟化技术通过在现有平台(机器)上添加一层薄的虚拟机监控程序(Virtual Machine Monitor,简称 VMM)软件而实现对系统的虚拟化,如虚拟处理器,虚拟内存管理器(MMU)和虚拟 I/O 系统等。虚拟机监控程序又被称之为监管程序(Hypervisor)。
Domain(Dom0,DomU):特权虚拟机:Dom0;特权域为Xen提供控制工具的;直接驱动IO硬件设备;与DomU交互;Linux-2.6.37内核开始直接运行在Dom0上;其他普通虚拟机:DomU;非特权域Linux-2.6.24+内核开始支持
Xen的虚拟化实现方式:Type-I型:二级虚拟化技术;直接在硬件上安装hypervisor,直接接管硬件资源,运行在其上的系统都是虚拟机;管理方面更彻底;必须让hypervisor驱动硬件,
出现的问题是必须开发驱动程序?解决方案:Xen只是驱动CPU和内存,不驱动IO设备当系统启动时,硬件设备加载后加载hypervisor,hypervisor拥有访问硬件权限,hypervisor加载完成后启动一个虚拟机,虚拟机有自己的内核和用户空间,这个虚拟机是 特权虚拟机,为底层hypervisor提供管理程序,能功能是为hypervisor提供IO设备硬件驱动 程序的;我们新建的虚拟机调用IO设备硬件时,是通过特权虚拟机驱动程序连接硬件实现;
xen虚拟化实现在CentOS 6.7上安装所需要的条件:1).需要在物理机上安装CentOS 6.7操作系统2).安装Xen软件包3).安装4.9.188的内核,可以使Xen运行在Dom0上4).配置好grub,然后启动Xen5).在用户空间上安装虚拟机Guest OS即可;注意:最新版本的xen在CentOS 6.7平台上是只有DomU可以使用,Dom0是不能通过CentOS 6.6的原有内核实现,我这里是安装的xen-4.2.5版本的xen,还有将内核版本更新到了4.9.188;
简单介绍一些XEN和KVM:  Xen:CentOS4-CentOS5是支持的;后续就是xen了,但是在内核版本Linux 2.6.37将xen收录进内核,CentOS7收录进内核;可以实现内核直接运行在Dom0上;KVM:2006才出现;CentOS5.8开始支持;但是不稳定,红帽的收购造成了KVM的发展; CentOS6.6的内核为2.6.32,不直接支持内核运行Xen的Dom0特权域;可以支持直接运行在DomU红帽为了支持KVM这个亲儿子的发展,将xen给赶出家门了。 -_-!后来意识到XEN的使用率还是很高,所以又在后来收录进内核。

[*]xen的安装及Dom0的配置
[*]安装xen-4.2.5版本的软件,更新内核版本到3.7.10
[*]配置grub.conf配置文件
[*]将xen设置为内核启动,而将CentOS的内核设置为Xen虚拟化平台的一个模块;
[*]配置完成后重新启动Linux系统,启动完成后自动进入了Xen的Dom0环境

以上5个步骤参考最上面的相关链接部署


xen虚拟机的安装和配置上面安装好Dom0D虚拟机后,下面我们就可以在其之上配置安装DomU虚拟机了。
DomU虚拟机的安装问题思考:1).DomU虚拟机的内核文件存放位置。我们是在Dom0上构建DomU虚拟机,所以我们的内核文件存放在Dom0上;第二种方式就是我们将内核文件存放在DomU虚拟机的虚拟磁盘中;
2).DomU虚拟机的创建:内核kernel,ramdisk都由Dom0提供,而DomU只提供用户空间;由于Dom0虚拟机有完整的用户空间,我们可以将其复制进DomU虚拟机上使用;1.简单DomU虚拟机构建内核kernel和ramdisk都由Dom0提供,使用busybox为DomU虚拟机提供简单的用户空间;
1).模拟创建虚拟机磁盘设备,构建本地环回文件:

2).格式化虚拟磁盘设备


3).编译安装busybox为DomU虚拟机提供用户空间
编译环境需要开发包组支持:
# yum groupinstall -y Development tools  
# yum install -y ncurses-devel glibc-static

获取busybox软件:
wget https://busybox.net/downloads/busybox-1.29.3.tar.bz2

编译配置busybox:

# make menuconfig

配置如下图所示:选择“Busybox settings”:



选择“Build options”选项,以静态二进制创建busybox,不共享库文件:


配置完成后点击exit,退出后点击yes保存:


执行安装
make

此处会有报错,诸如:
nsenter.c:(.text.nsenter_main+0x1be): undefined reference to `setns'
sync.c:(.text.sync_main+0x74): undefined reference to `syncfs'

重新执行make menuconfig
取消以下几项即可,看截图








再次执行make操作,成功编译


最后执行安装
make install



编译安装busybox完成后在这个目录会生成安装好的文件_install目录,我们将_install目录拷贝到挂载的虚拟磁盘中:


如果希望busybox这个用户空间能够设置网卡,我们还需要加载xen-netfront.ko进入虚拟机磁盘的指定目录,我们将Dom0中的xen-netfront.ko模块复制进虚拟机磁盘的lib/modules/目录中,并需要查看模块依赖关系,右下图可知,可以发现无依赖关系,我们可以直接使用:


复制完成后卸载虚拟机磁盘:# umount /mnt
至此,虚拟磁盘就构建完成了。

4).构建DomU虚拟机
复制虚拟机配置文件并编辑配置文件:




启动创建busybox这个虚拟机:
xl create busybox -c

查看虚拟机DomU中的ip地址,发现只存在lo环回设备,我们还未加载xen-netfront模块,我们加入网卡模块


设置IP地址


我们来进行ping测试



至此,一个简单的虚拟机的创建就完成了。


以上我们是用Guest0的vmlinuz和initramfs文件,这里我们也可以把文件放入到DomU的虚拟磁盘目录中,即使用DomU自有kernel来运行DomU,操作如下:
首先创建虚拟磁盘文件,以及拷贝xen的配置文件


首先我们需要对该虚拟磁盘进行分区格式化,分两个区,其中一个分区存放boot和kernel,以及initrd文件,另一个分区存放根文件系统

对虚拟磁盘进行分区,这里我们可以把其关联到本地回环设备上来,用losetup来实现
查看当前空闲的loop设备,使用losetup -f,这里显示的是/dev/loop1


由于上面我们已经有一个虚拟机busybox了,所以/dev/loop0正在使用当中,可使用losetup -a查看


开始实现关联本地回环设备


开始对/dev/loop1进行分区


查看/dev/loop1磁盘设备下的区分


我们在/dev/下并没有看到这两个分区设备,我们需执行下面这个步骤,来添加分区到map(/dev/mapper)中


接着对分区进行格式化


创建对应的挂载目录,并挂载分区至该目录上


拷贝kernel和initrd文件至/mnt/boot目录下,并且再安装grub,在/mnt/boot下多出来grub目录


在/mnt/boot/grub下创建编辑配置文件grub.conf


之前我们已经编译安装好busybox了,我们直接拷贝相关的根系统文件至/mnt/sysroot目录下,并创建其它相关的根系统文件,还要拷贝网卡设备xen-netfront.ko文件至/mnt/sysroot/lib/modules目录下


下面我们就可以拆除本地关联回环设备了,首先使用把映射文件删除,用kpartx -d /dev/loop1,再进行拆除,用losetup -d /dev/loop1,拆除之前,我们要卸载


编辑/etc/xen/busybox2配置文件


创建虚拟机,却报错,无法创建


错误原因:在宿主机上使用losetup对loop设备(qcow2格式的)进行关联、分区,格式化等,在GuestU中无法识别此类分区,反之,亦然。

这里我们还是使用raw格式的吧,重新创建虚拟磁盘文件


剩下的其它操作和上面一样,参考以上操作,诸如:拷贝kernel和initrd等文件,这里我就不重复操作了

修改配置文件里面的虚拟磁盘格式为raw,其它不需要动


创建启动虚拟机,有报错了


后来我把/mnt/boot/grub/grub.conf里面的xvda1改为了xvda2,才成功创建,不明白此处为什么xvda1不可以


针对上面的错误,网上查询给的原因:busybox不支持虚拟终端,需要真实存在的,到这里我也不知道怎么解决了,有知道的,回帖留言哈,万分感谢

页: [1]
查看完整版本: 基于xen和busybox创建虚拟机