Linux启动流程知多少之迷你系统(2)

第四步:复制或修改并复制新硬盘引导所需文件

1.    cp /boot/grub/splash.xpm.gz /media/boot/grub/;cp /boot/vmlinuz-2.6.18-308.el5 /media/boot/    复制这俩,开机图片+内核

2.    mkdir -pv /opt/initrd  建个目录,专门折腾initrd-2.6.18-308.el5.img

2.1    修改并使用:initrd-2.6.18-308.el5.img 先介绍一下:

此文件存储方式为:cpio归档,gzip压缩。这个是个比kernel更大,驱动更全的内核,以只读的方式运行

完全可以理解成其本身就是一个迷你系统,负责使系统过度到真正的内核(vmlinuz-2.6.18-308.el5)等工作(个人理解)

2.2    cp /boot/initrd-2.6.18-308.el5.img /opt/initrd.gz    复制并改名,因为要使用gzip解压,以免出现不必要的麻烦

2.3    gzip -d /opt/initrd.gz

2.4    cd /opt/initrd

2.5 cpio -id < ../initrd    将文件解包

2.6    vim /opt/initrd/init

找到mkrootdev -t ext3 -o defaults,ro /dev/sda2  此行

修改其内容匹配你的新磁盘的第二个分区,修改使其和你的sdc2一致(本机我的是第三个盘sdc2,但是放到新系统里面,仍然是sda2)

2.6 find /opt/initrd/|cpio -o --quiet -H newc|gzip -9 > /media/boot/initrd.gz    修改完成后,归档,压缩,扔到新磁盘第一个分区下

第五步:我们还需要点文件(骚等,亲..)

1.    cd /media/sysroot/;mkdir -pv mkdir -pv etc/rc.d dev proc sys bin sbin lib root media mnt opt home var usr/{bin,sbin,lib} tmp

把根目录下该有的目录,都创建一个吧..

2.  vim /media/sysroot/etc/inittab  (完整内容参见/etc/inittab)

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

这两行足够了,第一个三默认进入第三级运行模式,第二个是其执行rc.sysinit脚本

3.    vim /media/sysroot/etc/rc.d/rc.sysinit    此脚本内定义了系统各种初始化任务,不再一一细说,(非常好的shell编程范例/etc/rc.d/rc.sysinit)

echo "Hello MOS"    输出Hello MOS

/bin/bash            并启动bash

4.    既然要启动bash,那么bash是个命令,位于/bin目录下,我们需要它,So..

cp /bin/bash /media/sysroot/bin/

4.1  单单有/bin/bash还是不行的,为什么呢??库文件,Yes!

[root@station69 etc]# ldd `which bash`

linux-gate.so.1 =&gt;  (0x00b0e000)

libtermcap.so.2 =&gt; /lib/libtermcap.so.2 (0x00c07000)

libdl.so.2 =&gt; /lib/libdl.so.2 (0x00bd5000)

libc.so.6 =&gt; /lib/libc.so.6 (0x00110000)

/lib/ld-linux.so.2 (0x00a5a000)

4.2  看到上面的库文件了么,亲?动手复制吧...

cp /lib/libtermcap.so.2 /media/sysroot/lib/

cp /lib/libdl.so.2    /media/sysroot/lib/

cp .........

4.3    仅仅有bash还不行,为什么??对了,还有/sbin/init...所以...你懂的...

[root@station69 sysroot]# ldd /sbin/init

linux-gate.so.1 =&gt;  (0x0068c000)

libsepol.so.1 =&gt; /lib/libsepol.so.1 (0x007e6000)

libselinux.so.1 =&gt; /lib/libselinux.so.1 (0x007cc000)

libc.so.6 =&gt; /lib/libc.so.6 (0x00a79000)

libdl.so.2 =&gt; /lib/libdl.so.2 (0x00bd5000)

/lib/ld-linux.so.2 (0x00a5a000)

cp ....;cp ....(亲,没疯吧???没事,笔者当时仅复制了两个,后来的一些命令,写了一个简单的脚本,凑合着用吧,文档末尾列出。)

到此,系统制作已经简单完成了...看..So easy(声明一下,这话不是我说的...)...

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20863.html