Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们后来人提供了一个良好的学习和研究环境。

本文主要通过裁剪现有Linux系统,根据自己的需要,打造一个属于自己的Linux小系统,让其能够具备Linux的一些常用小功能。

二、原理


启动流程介绍:

制作Linux小系统之前,我们有必要再了解一下Linux的启动流程:

1、首先Linux要通过POST自检,检查硬件设备有没有故障

2、如果有多块启动盘的话,需要在BIOS中选择启动磁盘

3、启动MBR中的bootloader引导程序

4、加载内核文件

5、执行所有进程的父进程、老祖宗init

6、打印欢迎界面

在Linux的启动流程中,加载内核文件时还需要借助别外两个文件:

1)initrd,是CentOS5上用内存模拟的磁盘设备

2)initramfs,是CentOS6上用内存模拟的文件系统

在启程的流程中,init主要是用来做哪些操作的呢?

init通过调用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本

好啦,原理我们已经知道了,接下来我们来看看具体的思路吧(〃'▽'〃)

三、思路


1、我们要在一个现有的Linux系统上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。当然,我们需要明确的概念是,我们现在加的这个硬盘在现有的Linux系统中是/dev/sdb,但是,当我们把东西全部设置好时,我们就需要把这个硬盘拔除,放在我们的新系统上,此时,他就是/dev/sda啦。

2、在/dev/sdb这个硬盘上,我们要将其打造成一个独立的Linux系统,里面的所有文件是需要我们一个一个拷贝进去的。而且,作为一个将来要当/dev/sda的硬盘,里面一定要有grub文件诺~所以我们要安装grub文件。

3、同时,作为一个能独立运行的Linux系统,内核是一定不能少的!所以,我们要把内核文件和initramfs文件也一起拷到我们的/dev/sdb上。

4、现在我们系统已经初具规模了,接下来就是需要程序了0.0关于程序的拷贝我们可以通过一个脚本来实现。具体的脚本在下文中会给大家说到。

以上步骤完成,我们的自制Linux就完成啦~我们的思路就是这么回事,接下来,我们就开始吧( ̄▽ ̄)~*

四、操作步骤


本次实验我们以centos6.9为例~

1、目标磁盘分区

首先,我们在宿主机上添加一块大小为20G的硬盘:


v2-6fcea18ee143904fa3cd57bd8b3f814e_hd.jpgv2-9a8828d603e561df687a76b545bcb344_hd.jpg




v2-51956e971dfac2b8a7c8ae81b8a94a94_hd.jpg



v2-131ad1c98d4c8c64592af8e064cc663c_hd.jpg



v2-68ccb3e7c85dd8d93e0fb4a3240dabdd_hd.jpg


v2-f46c814fb82d20f5034de97d5926877b_hd.jpg



v2-fdfd307aaa579bc6df5f2e2f93a119ec_hd.jpg



v2-7a6eeced388fd02a367315d462f362c6_hd.jpg


添加完成后,点击确定,然后我们打开宿主机。 通过fdisk来给我们的/dev/sdb进行分区:


v2-b41a0897c28326da8cb5120e5c4a31db_hd.jpg


接下来,我们对/dev/sdb的分区进行格式化:


v2-f3e19cbc9ba562620a1e31dd1d5b7cd3_hd.jpg


格式化完成后,我们创建一个文件夹。进行挂载:


v2-bac5e7820bfd842fe09e7fd861d0f9b8_hd.jpg


注意:新建的文件夹必须是/mnt/boot

2、安装grub至目标磁盘

我们直接用grub-install –root-directory=/mnt命令来安装。用这个命令会安装grub引导第二阶段的文件。


v2-7584de40b3b02b330ab0148b1bcfec3f_hd.jpg


我们可以来看一下二进制确认我们是否安装成功:


v2-23d585339aa84bdae6f6294a0b8f8fc8_hd.jpg


安装成功。

3、复制内核文件和initrd文件

将内核文件和initrd文件复制到/dev/sdb下的boot目录中:


v2-a833945779be75d9f511153a07e43b10_hd.jpg


4、建立grub.conf文件

上面我们已经移植了内核和initrd文件,我们可以根据其版本来编写grub.conf文件:


v2-43d5d56ee42b445bed92d7a57e7baab5_hd.jpg


注意,我们要把selinux给关掉,同时设定一下init,告诉内核不要再去找这个程序了,不然开机的时候会出现错误的~

5、创建一级目录并复制文件

至此,我们就缺目录和文件了~

创建开机后的一级目录,同时把/dev/sdb2挂载至/mnt/sysroot,使该目录作为根目录:

v2-648e538c44ae66719207cc445e204e1f_hd.jpg


复制文件,复制文件我们通过脚本执行,复制我们平时常用的命令即可,小编这里复制了ls,ifconfig,bash,reboot,rm,modprobe,mount,ip,mkdir,touch,cat,vi,less,shutdown,insmod。我们可以用tree查看一下这些命令的复制情况:


v2-5907b50ca5c9c194d5f9aa007078bc82_hd.jpg


很明显我们都复制成功了~

附:复制命令的脚本源代码


v2-0b9a50798b9dd30c05d8c4645f4e5db7_hd.jpg


6、复制网卡驱动

我们基本工作已经完成了,如果想使这个虚拟机带有网卡功能,我们就必须把网卡驱动拷过来,具体操作如下:

1)查询网卡详细信息:


v2-bab85410c1b1ab2ee83d573db793417e_hd.jpg


2)把网卡模块的路径复制到/mnt/sysroot的库文件下:

v2-4b26cbaa98a687c288e3857132770da8_hd.jpg


以上,我们的操作全部完成。现在我们就可以关机,然后把/dev/sdb这个硬盘拆下来,放到新的虚拟机上运行了~

五、测试开机


我们创建一个新的虚拟机,启动的时候会带一个硬盘,我们不用它的,删掉再把我们自己定义的硬盘加进去:


v2-a1b94f45255dce08169629887ee21676_hd.jpg



v2-52b15d7e81055477ed293e873a79d5e2_hd.jpg



v2-9964545e4ddfffa5f162899e194283aa_hd.jpg



v2-9edef6024983e68f5e826dd56bd39728_hd.jpg



v2-7911155826d3c98516d48cca6ddf0bd8_hd.jpg



v2-35447ee33dcb11c04dc4a2530649db87_hd.jpg


此时,我们做好的硬盘已经加进去了。我们可以试试能不能启动了,如果虚拟机可以正常开启,就说明我们的实验成功~


v2-018ef216d76c0c762ba6a67967447a37_hd.jpg



v2-d11fed3f0d8a061ee0f14a1fb8769a1f_hd.jpg


六、实现网络功能



v2-d35361712f87022486bb9bec258c6383_hd.jpg


由于图片可能会看不清楚,现把代码标出如下:

v2-e65e2c6ea813a7879a625f32460391cb_hd.jpg


由于复制命令的时候忘记复制ping了……所以我们用另一台机器来ping一下这个ip地址:


v2-b667e633bfad858dd375e1fd82d3a4cb_hd.jpg


可以ping通~

至此,我们已经完成了私人订制Linux的全部操作,同时我们的自制Linux也可以联网啦~

所有实验圆满成功!撒花✿✿ヽ(°▽°)ノ✿

作者:珂儿吖
来源: cnblogs.com/keerya/p/75