创建磁盘映像文件:
# qemu-img create -f raw -o size=2G /srv/xen/busybox3.img
Formatting ‘/srv/xen/busybox3.img’, fmt=raw size=2147483648
验证:
# ll /srv/xen/
total 55812
-rw-r–r– 1 root root 2148073472 Dec 18 12:27 busybox1.img
-rw-r–r– 1 root root 2147483648 Dec 18 13:15 busybox3.img
-rw-r–r– 1 root root 2147483648 Dec 17 11:55 busybox.img
-rw-r–r– 1 root root 128868941824 Dec 16 09:20 centos6.9.img
# du -sh /srv/xen/busybox3.img
0 /srv/xen/busybox3.img
losetup 设置并控制本地回环设备
-a 显示出所有已用的loop设备
-f 显示第一个空闲的loop设备文件
找出一个空闲的loop设备:
# losetup -a
# losetup -f
/dev/loop0
把img挂在loop0上
# losetup /dev/loop0 /srv/xen/busybox3.img
# losetup -a
/dev/loop0: [fd00]:6159 (/srv/xen/busybox3.img)
创建分区:
# fdisk /dev/loop0
# fdisk -l /dev/loop0
Disk /dev/loop0: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdb38ee90
Device Boot Start End Blocks Id System
/dev/loop0p1 1 132 1060258+ 83 Linux
/dev/loop0p2 133 261 1036192+ 83 Linux
通知内核读取新的分区:
# ls /dev/mapper
control vg_xen-lv_root vg_xen-lv_swap
# kpartx -av /dev/loop0
add map loop0p1 (253:2): 0 2120517 linear /dev/loop0 63
add map loop0p2 (253:3): 0 2072385 linear /dev/loop0 2120580
# ls /dev/mapper
control loop0p1 loop0p2 vg_xen-lv_root vg_xen-lv_swap
格式化新分区:
# mkfs -t ext4 /dev/mapper/loop0p1
# mkfs -t ext4 /dev/mapper/loop0p2
挂载:
# mount /dev/mapper/loop0p1 /mnt/boot/
# mount /dev/mapper/loop0p2 /mnt/sysroot/
提供内核:
# cp -a /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/boot/vmlinuz
# cp -a /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/boot/initramfs
创建grub:
# grub-install –root-directory=/mnt /dev/loop0
Probing devices to guess BIOS drives. This may take a long time.
/dev/loop0 does not have any corresponding BIOS drive.
验证grub创建:
# ll /mnt/boot/
grub/ initramfs lost+found/ vmlinuz
# ll /mnt/boot/grub/
total 272
-rw-r–r– 1 root root 30 Dec 18 13:32 device.map
-rw-r–r– 1 root root 13428 Dec 18 13:32 e2fs_stage1_5
-rw-r–r– 1 root root 12636 Dec 18 13:32 fat_stage1_5
-rw-r–r– 1 root root 11780 Dec 18 13:32 ffs_stage1_5
-rw-r–r– 1 root root 11772 Dec 18 13:32 iso9660_stage1_5
-rw-r–r– 1 root root 13284 Dec 18 13:32 jfs_stage1_5
-rw-r–r– 1 root root 11972 Dec 18 13:32 minix_stage1_5
-rw-r–r– 1 root root 14428 Dec 18 13:32 reiserfs_stage1_5
-rw-r–r– 1 root root 512 Dec 18 13:32 stage1
-rw-r–r– 1 root root 126148 Dec 18 13:32 stage2
-rw-r–r– 1 root root 12040 Dec 18 13:32 ufs2_stage1_5
-rw-r–r– 1 root root 11380 Dec 18 13:32 vstafs_stage1_5
-rw-r–r– 1 root root 13980 Dec 18 13:32 xfs_stage1_5
编辑引导菜单:
# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title BusyBox(kernel-2.6.32)
root (hd0,0)
kernel /vmlinuz root=/dev/xvda1 ro selinux=0 init=/bin/sh
initrd /initramfs
创建根文件系统:
# cp -a /root/busybox-1.22.1/_install/* /mnt/sysroot/
# cd /mnt/sysroot/
# mkdir lib/modules dev proc sys etc var tmp -pv
创建网卡驱动:
# modinfo xen-netfront
filename: /lib/modules/4.9.69-2.el6xen.x86_64/kernel/drivers/net/xen-netfront.ko.gz
alias: xennet
alias: xen:vif
license: GPL
description: Xen virtual network device frontend
srcversion: 420EBC716BF26607F95CA26
depends:
intree: Y
vermagic: 4.9.69-2.el6xen.x86_64 SMP mod_unload modversions
parm: max_queues:Maximum number of queues per virtual interface (uint)
# cp -a /lib/modules/4.9.69-2.el6xen.x86_64/kernel/drivers/net/xen-netfront.ko.gz /mnt/sysroot/lib/modules/
取消挂载:
# umount /mnt/boot/
# umount /mnt/sysroot/
从内核中清除
# ls /dev/mapper
control loop0p1 loop0p2 vg_xen-lv_root vg_xen-lv_swap
# kpartx -d /dev/loop0
验证:
# ls /dev/mapper
control vg_xen-lv_root vg_xen-lv_swap
# losetup -d /dev/loop0
# losetup -f
/dev/loop0
创建配置文件:
# cp -a /etc/xen/busybox /etc/xen/busyboxnew
# which pygrub
/usr/bin/pygrub
虚拟机配置文件如下:
# cat /etc/xen/busyboxnew | grep -v ‘#’ | grep -v “^$”
name = “busybox-002”
memory = 256
vcpus = 2
vif = [ ‘birdge=xenbro’ ]
disk = [ ‘/srv/xen/busybox3.img,raw,w’ ]
bootloader = ‘pygrub’