以CentOS 6为基础制作小Linux过程:

首先我们需要知道CentOS 6系统的启动流程为POST(加电自检)-->BIOS(系统选择启动设备的先后顺序,默认顺序为光盘、U盘、硬盘)-->Bootloader(系统引导程序,使用grub加载器)-->kernel(初始化内核)-->/sbin/init(运行init程序)。

首先需要一块全新的硬盘来装配制作一个启动Linux系统最基本的启动程序以及其配置文件:包括grub程序及其库文件、复制内核文件以及ramdisk文件、将/bin/bash以及库文件。

接下来详细说明各个步骤具体实现:

在一个可使用的CentOS 6系统中创建一块新硬盘,不需要太大,20GB即可,建议在虚拟机关机时添加硬盘以便省去热插拔过程中echo '- - -' > /sys/class/scsi_host/host2/scan命令的操作。之后为新添加的硬盘分区(sd[a-z]{1,2,3})并创建文件系统第一个分区挂载/boot以引导系统启动,第二个分区作交换分区使用,第三个分区做根,因此挂载第一第三分区于/mnt/boot和/mnt/sysroot上。

之后安装ygrub程序,使用grub-install --root-directory=/mnt(注意这里位置为/mnt因为需要在boot的父目录上) /dev/sd*。

接下来将内核文件以及ramdisk文件复制到目标系统的启动分区/mnt/boot中,然后创建目录层级机构于/mnt/sysroot中{bin,root,dev,lib,lib64,var,sur,proc,sys,mnt,tmp,etc,sbin}。再然后将/bin/bash及其共享库文件复制到/mnt/sysroot下对应的目录中(此处查看共享库可用命令ldd查看,总共四个库文件)。最后执行几次sync命令,以保证内存中缓存或缓冲的数据被保存到磁盘上。这时我们自制的linux系统已经准备好了。

接下来新建一个虚拟机,将刚刚操作的硬盘作为新虚拟机的硬盘使用(目的是在系统选择启动设备时选择到硬盘启动),准备好新建的虚拟机之后,将宿主系统挂起(如果不挂起,在启动新建虚拟机时,会显示硬件资源冲突,不能启动。),启动新建虚拟机,将进入grub命令行界面,键入命令:

root (hd0,0):指定磁盘,指定分区作为grub程序的根设备

kernel /vmlinz ro root=/dev/sda3 selinux=0 init=/bin/bash single:设定内核文件的绝对路径以及内核参数

initrd /initramfs.img:ramdisk文件路径

boot:启动

此时我们制作的小liunx已经跑起来了,只是最基本的linux系统,很多命令都没有需要自行安装。