实验名称:

  通过grub程序引导本地磁盘内核启动系统(busybox)

实验环境:

  理论上,该实验只需要配置好xen环境即可,但是,我们的xen环境安装在centOS7上,但是我们又是使用的kernel 2.6版本的内核,所以需要安装在centOS6版本下的grub程序!

  所以,这里我们提供一个centos6的机器,用来准备为磁盘安装grub0版本;

  同时,提供一个安装好xen环境centOS7的系统;centOS7的xen环境如下:

实验需求:

  这里的实验需求就是通过给虚拟磁盘安装grub程序,然后准备好系统启动文件,以及根文件系统;

  然后再xen环境下制定“/usr/bin/pygrub”程序来引导启动系统,即可;

  *这里安装的grub程序我们使用的是第一个版本的grub程序,而不是centos7的新版本的grub程序,这点一定要清楚;

实验配置:

  /*在centos6上完成以下操作*/

  1、创建虚拟磁盘映像

yum install qemu-img  
#可以安装qemu-img工具,qemu-img和qemu-img-xen是同一个工具,他们是软连接关系 mkdir /images/xen/
qemu-img create -f raw -o size=2G busybox.img
ll -h busybox.img
du -h busybox.img

    此时我们就拥有了一个2G大小虚拟磁盘文件

  2、通过losetup命令,关联虚拟磁盘与虚拟设备,并进行格式化与挂载操作

    拥有了磁盘文件有,我们需要对磁盘关联到回环设备,通过losetup命令,在对回环设备进行分区,格式化以及挂载,才能使用这个磁盘

losetup /dev/loop0 /images/xen/busybox.img
kpartx -a /dev/loop0
losetup -a

    这样,busybox.img磁盘就关联到/dev/loop0设备上了,这样的话,再去对/dev/loop0设备进行操作,就是对busybox.img进行操作

fdisk /dev/loop0
n
p [回车]
+200M
n
p [回车]
+1024M
w
fdisk -l /dev/loop0
kpartx -a /dev/loop0
ll /dev/mapper/

   格式化磁盘分区,并创建挂载目录,并挂载磁盘分区

mke2fs -t ext2 /dev/mapper/loop0p1
mke2fs -t ext2 /dev/mapper/loop0p2 mkdir -pv /mnt/{boot,sysroot}
mount /dev/mapper/loop0p1 /mnt/boot/
mount /dev/mapper/loop0p2 /mnt/sysroot/
df -h  #查看挂载情况 #根据FHS规定,为我们的系统创建常见的目录文件
mkdir -pv /mnt/sysroot/{etc,home,var,root,tmp,lib/module,proc,sys}

  3、写入grub程序,并将xen-netfront.ko、内核文件、ramdisk文件复制到磁盘

grub-install --root-directory=/mnt /dev/loop0

    在安装的时候回报错,如下图:

    这里是因为我们是虚拟设备,没有BIOS驱动,但是grub程序一样被装载到/dev/loop0磁盘中去了,不影响;

    此时,我们可以看到,grub对应的文件都已经安装完成;

    安装完成grub程序以后,我们需要手动配置grub.conf文件来引导系统启动

vim /mnt/boot/grub/grub.conf
default=
timeout=
title MyTestSystem (busybox kernel-2.6)
root (hd0,)  #指定kernel和ramdisk文件存放的磁盘分区
kernel /vmlinuz root=/dev/xvda2 ro selinux= init=/bin/sh
initrd /initrd.img

    接下来,拷贝内核文件,ramdisk以及xen-netfront驱动到磁盘中来即可;

cp /boot/vmlinuz-2.6.-.el6.x86_64 /mnt/boot/vmlinuz
cp /boot/initramfs-2.6.-.el6.x86.img /mnt/boot/initrd.img
cp /lib/module/2.6.-.el6.x86/kernel/divers/net/xen-netfront.ko /mnt/sysroot/lib/module/

    自此,我们系统启动所需要的文件就准备齐了;

  4、将虚拟磁盘文件卸载下来,传送到centos7系统上来

    我们这里使用的是grub的第一个版本,所以再centos6上面来做,但是xen环境在centos7上,所以我们需要将虚拟磁盘传送到centos7上面去;

umount /mnt/boot/
umount /mnt/sysroot/ kpartx -d /dev/loop0
losetup -d /dev/loop0
losetup -a

    这样,我就将磁盘卸载下来了,下一步就将磁盘传输到centos7的系统上去;

ping 192.168.238.129
#如果没有scp工具,就 yum install openssh-clients 工具即可
scp /images/xen/busybox.img root@192.168.238.129:/root/
password:  #输入192.168.238.129主机的root用户的密码即

  /*在centos7上完成以下操作*/

  5、将虚拟磁盘挂载到centos7的系统之下

    此时,在/root/目录下就会有busybox.img的虚拟磁盘文件,我们将这个磁盘挂载在我们centos7下,即可

losetup /dev/loop0 /root/busybox.img
kpartx -a /dev/loop0
losetup -a
ll /dev/mapper/

    此时,在centos7上面就会有loop0p1和loop0p2这两个设备,挂载这两个设备的文件,查看里面的内容,就是我们之前在centos6上面所配置的内容;

mkdir -pv /mnt/{boot,sysroot}
mount /dev/mapper/loop0p1 /mnt/boot/
mount /dev/mapper/loop0p2 /mnt/sysroot/
ls /mnt/boot/
ls /mnt/sysroot/

  6、编译安装busybox,将busybox的根文件系统拷贝到虚拟磁盘的/sysroot/下

    编译安装busybox系统

    【这里在实验三中以及做过,这里不再赘述】

    将busybox的根文件系统拷贝到磁盘的第二个分区中,也就是目录/mnt/sysroot目录下,并切换根目录查看是否正常;

cp -a busybox-1.22./_install/* /mnt/sysroot/
chroot /mnt/sysroot/ /bin/sh

  7、配置虚拟机的启动文件,指定BootLoader参数

    创建xl的虚拟机启动文件,并进行相应的配置

cd /etc/xen/
cp xlexample.pvlinux busybox
vim busybox
name = "busybox-grub"
bootloader = "/usr/bin/pygrub"
memory =
vcpus =
disk = [ '/root/busybox.img,raw,xvda,rw' ]

    这里注意,我们指定bootloader参数来引导系统启动;

  8、启动虚拟机

xl create /etc/xen/busybox -c

  此时,就会通过xen环境下提供 pyGRUB 来引导系统;

    系统最后正常启动,及系统配置正确;

  9、网络配置

    在虚拟机中配置网卡

cd /lib/module/
insmod xen-netfront.ko
ip addr   #查看网卡配置

实验结果:

实验六:通过grub程序引导本地磁盘内核启动系统(busybox)的更多相关文章

  1. OD 实验(六) - 对一个程序的破解

    程序: 双击进行安装,安装过程默认就好了 安装完成 运行程序 输入 User 为 sch01ar,点击 Create 点击 Log In 这里显示为未注册版本 看看未注册版本有哪些功能被限制 这里会显 ...

  2. 如何配置Ubuntu 16.04 GRUB 2引导加载程序

    正如你所知,GRUB 2 是大多数 Linux 操作系统的默认引导加载程序.GRUB 是 GRand Unified Bootloader 的缩写,它是 Linux 启动时首先要加载的一个程序,此后它 ...

  3. GRUB&MBR引导

    (ubuntu下搜索gnome-disk可以打开磁盘管理) 简单开机过程 : ①按下电源后,计算机自检(POST),如果硬件设备(CPU.内存.硬盘.光驱.各种卡)都没有问题,BIOS会检查各个硬盘的 ...

  4. VMware vSphere服务器虚拟化实验六 vCenter Server 添加储存

                                                                          VMware vSphere服务器虚拟化实验六 vCente ...

  5. 实验六 CC2530平台上P2P通信的TinyOS编程

    实验六 CC2530平台上P2P通信的TinyOS编程 实验目的: 加深和巩固学生对于TinyOS编程方法的理解和掌握 让学生初步的掌握射频通信TinyOS编程方法 学生通过本实验应理解TinyOS中 ...

  6. windows 10 超级优化,同时解决本地磁盘100%的问题

    windows 10 超级优化,同时解决本地磁盘100%的问题 我的系统是笔记本I7处理器,配置了web服务器IIS 和一个数据库(mysql7),同时启用了虚拟机(表中已禁用),以及安装了offic ...

  7. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验六:数码管模块

    实验六:数码管模块 有关数码管的驱动,想必读者已经学烂了 ... 不过,作为学习的新仪式,再烂的东西也要温故知新,不然学习就会不健全.黑金开发板上的数码管资源,由始至终都没有改变过,笔者因此由身怀念. ...

  8. 实验 六:分析linux内核创建一个新进程的过程

    实验六:分析Linux内核创建一个新进程的过程 作者:王朝宪  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...

  9. Linux内核分析实验六

    Linux内核分析实验六 进程控制块PCB——task_struct(进程描述符) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_s ...

随机推荐

  1. Docker跨主机通信(九)--技术流ken

    容器网络 在前面的博客中已经详细讲解了几种网络方案: none, host, bridge,user-defined.但是他们只是解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信.本 ...

  2. IO通信模型(一)同步阻塞模式BIO(Blocking IO)

    几个概念 阻塞IO 和非阻塞IO 这两个概念是程序级别的.主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序该如何处理的问题:前者等待:后者继续执行(但是使用线程一直轮询,直到有 ...

  3. Angularjs进阶笔记(2)-自定义指令中的数据绑定

    有关自定义指令的scope参数,网上很多文章都在讲这3种绑定方式实现的效果是什么,但几乎没有人讲到底怎么使用,本篇希望聊聊到底怎么用这个话题. 一. 自定义指令 自定义指令,是Angularjs用来实 ...

  4. React-native搭建移动端ios开发环境实践笔记

    开发环境的搭建,按照 https://reactnative.cn/docs/getting-started/ 里面的步骤一步一步来,这里记录下需要注意的几点:1.初始化react-native项目的 ...

  5. 网页数据抓取工具,webscraper 最简单的数据抓取教程,人人都用得上

    Web Scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据.例如知乎回答列表.微博热门.微博评论.淘宝.天猫.亚马逊等电商 ...

  6. .Net中Log4Net的使用

    2018-08-23 .Net中Log4Net的使用 一.log4net 分类型记录日志存放多个日志文件 1.在webconfig里添加配置 1.1 在<configSections> 中 ...

  7. 【学习笔记】非监督学习-k-means

    目录 k-means k-means API k-means对Instacart Market用户聚类 Kmeans性能评估指标 Kmeans性能评估指标API Kmeans总结 无监督学习,顾名思义 ...

  8. Adapter刷新数据的坑

    adapter刷新数据的时候,要能够刷新成功,要保证每次刷新的时候都是改变数据源. 于是,我这样做了,在适配器的构造方法里面写到: private List<ListBean> listI ...

  9. C#字符串倒置函数的代码

    把内容过程比较常用的内容珍藏起来,下边内容内容是关于C#字符串倒置函数的内容. public static string Reverse(string ReverseString) { String ...

  10. Java新知识系列 四

    []URL的组成<协议>://<主机>:<端口>/<路径> . []线程的定义实例化和启动. []类的final变量初始化需要满足的条件. []管道通信 ...