實驗名稱:
通過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 1 [回車] +200M n p 2 [回車] +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=0 timeout=10 title MyTestSystem (busybox kernel-2.6) root (hd0,0) #指定kernel和ramdisk文件存放的磁盤分區 kernel /vmlinuz root=/dev/xvda2 ro selinux=0 init=/bin/sh initrd /initrd.img
接下來,拷貝內核文件,ramdisk以及xen-netfront驅動到磁盤中來即可;
cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz cp /boot/initramfs-2.6.32-504.el6.x86.img /mnt/boot/initrd.img cp /lib/module/2.6.32-504.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.1/_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 = 256 vcpus = 2 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 #查看網卡配置