前言。
Linux系统启动流程。
(1)POST(Power-onSelf Test:开机自检)
(2)BIOS(BootSequence:指定启动的设备读取磁盘中操作系统内核文件)(3)MBR(BootLoader加载内核文件至内存)
(4)kernel(initramfs(centos6) :将内核解压缩为根目录,加载合适的驱动程序,最后退出虚拟文件系统)
(5)/sbin/init(实现系统的初始化,负责管理用户空间的进程)
(6)启动shell
由此可知,裁剪内核关键在于步骤(3)(4)(5)
环境
虚拟机VMwareWorks,centos6.5
新建一台1221,新添加一块磁盘命名为2 Hard Disk,默认是sdb
新建Mini Linx,选择磁盘必须为上述已存在的2.Hard Dis
步骤
(1)在1221新加的磁盘分区sdb1,sdb2。格式化(ext4格式),分别挂载至目录/mnt/boot,/mnt/sysroot。
相信难不到大家的哦,所用命令如下。
fdisk /dev/sdb ;
mke2fs -t ext4 /dev/sdb1;
mkdir-pv /mnt/{boot,sysroot}
结果如下
(2)在sdb上安装grub
注意此处的“--root-directory=/mnt”选项,sdb1是挂载在/mnt/boot上的,不要写成--root-directory=/mnt/boot 了。
sdb对应的硬盘是hd1,但是这个编号1仅仅对次主机有效,换到一个单独的主机上的时候就是hd0。
grub-install --root-directory=/mnt /dev/sdb
(3)复制内核vmlinuz和内核加载部分硬件所依赖的initramfs
cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz
cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img
(4)创建Linux需要的一些基本文件(在Mini Linux系统上需要的)
mkdir -pv /etc/rc.d root boot dev proc sys tmp var usr srv lib lib64 bin sbin home mnt media
(5)移植bash和一些相关的命令至目标主机的根文件系统(后面网卡的配置需要)
(6)切换到/mnt/sysroot/bin/目录下、给bash创建一个软链接,同时测试bash是否移植成功
ln -sv bash sh
(7)在目标机的/boot/grub目录中创建grub.conf,实现开机自检
(8)为了能够实现开机启动网卡,需要将宿主机上的网卡配置文件复制到目标机上,可以通过lsmod查看当前系统的所有模块,可以通过modinfo 模块名称来查看模块的详细信息,同时复制模块至目标主机lib/modules目录。
mkdir -p /mnt/sysroot/lib/modules
cp /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/
(9)为了使系统能够开机自动挂载一些文件系统和初始化一些服务,在目标机sbin/目录创建init文件
开启Mini Linux可以看到
网卡模块安装配置成功如下,
也可ping通
附:bincp.sh脚本(移植可执行程序的脚本、包括程序所依赖的库文件)