实验名称:

  通过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 中的 nginx 日志

    Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...

  2. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  3. 易被忽略的Python内置类型

    Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们. 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些"不同寻常&quo ...

  4. WebClient下载文件

    public void DownDile(string url) { WebClient client = new WebClient(); string URLAddress = @"ht ...

  5. 《C#并发编程经典实例》学习笔记—2.4 等待一组任务完成

    问题 执行几个任务,等待它们全部完成. 使用场景 几个独立任务需要同时进行 UI界面加载多个模块,并发请求 解决方案 Task.WhenAll 传入若干任务,当所有任务完成时,返回一个完成的任务. 重 ...

  6. 基于C#程序设计语言的三种组合算法

    目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...

  7. .NET Core整理之配置EFCore

    1.新建ASP.NET Core Web应用程序 2.从NuGet下载安装以下工具包 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCo ...

  8. spark问题

    使用IDEA运行spark程序,除了需要导入spark的一些依赖包之外,还需要注意的是 当启动spark报找不到可执行的hadoop winutils.exe 可已下载相应版本的winutils.ex ...

  9. iptables配置管理

    iptables规则 内核netfilter的规则: iptables的规则: 基本操作 实践:往iptables中插入一条规则:禁止基于端口号为22的所有客户端访问(等于是禁止基于SSH的客户端连接 ...

  10. vue.js引入

    开始学习vue.js,引入vue.vue.js一定要在head里面引入,实际开发中我们可能在body中引入,但是可能存在抖屏现象. 为了避免出现抖屏现象,我们引入vue.js或者jquery.js 最 ...