快速业务通道

以一个宿主机手动制作一个精简的小linux

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-29

先了解一下开机启动流程

POST-MBR:bootloader-kernel(initrd)-(rootfs|/sbin/init(/etc/rc.d/rc.sysinit(bash))

具体可以描述为:
加电自检-逐一查看启动序列中的启动设备,找到MRB加载启动引导程序-加载内核-initrd(提供可以驱动根分区的驱动程序给内核)-启动init进程(读取/etc/inittab)-执

行/etc/rc.local-mingetty 登录

具体的启动流程还是这样的不能更改,我们能做的就是精简文件系统.

我们在虚拟机上面加一块磁盘,制作好之后把这块磁盘移植到其他的linux主机上面让他启动就可以了.

我们新加一块磁盘/dev/sdb,划分两个分区一个100M(/dev/sdb1)用来挂载在boot目录上面,一个给他1G(/dev/sdb2),来装文件系统.

我们在/mnt目录下面建两个目录一个/mnt/boot,一个/mnt/sysroot

1.我们先在/mnt/boot上面装一个GRUB,把内核放进去.
1)grub-install --root-directory=/mnt /dev/sdb 这里指定为boot的父目录这里为/mnt就可以了,这时候这个硬盘就可以做来引导系统了
cp /boot/vmlinuz-2.6.18-164.el5 /mnt/boot
cp /boot/initrd-2.6.18-164.el5.img /tmp/linux

2)我们把initrd-2.6.18-164.el5.img展开,里面修改一下,先来看一个这个文件的类型
file initrd-2.6.18-164.el5.img
initrd-2.6.18-164.el5.img: gzip compressed data
这里显示是一个gzip的压缩文件,那我们就用gzip来解压缩一下
gzip -d initrd-2.6.18-164.el5.img
gzip: initrd-2.6.18-164.el5.img: unknown suffix -- ignored

报错了,这个文件不是以.gz结尾的,那这好办,我们给他加一个.gz就好了嘛
mv initrd-2.6.18-164.el5.img initrd-2.6.18-164.el5.img.gz

再解压缩
gzip -d initrd-2.6.18-164.el5.img.gz
好了,这是一个cpio的归档文件,我们把它释放出来
cpio -id <initrd-2.6.18-164.el5.img
这时候原文件就没用了,删了
rm -rf initrd-2.6.18-164.el5.img

这里面init是一个脚本我们打开修改一些东西
把这个mkrootdev -t ext3 -o defaults,ro /dev/vol0/root
修改为:
mkrootdev -t ext3 -o defaults,ro /dev/sda2 这里是我们的根的位置,等下我们这块磁盘要挂载在一个新的linux虚拟机上面,到时候就是sda了,这里指定为sda2,
好了再把文件还原了
find .|cpio -H newc -o --quiet |gzip -9 >/mnt/boot/initrd.gz
3)然后我们创建一个grub的配置文件
vi grub.conf
default=0
timeout=10
title Little Linux
root (hd0,0)
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/sda2
initrd /initrd.gz
2.在/mnt/sysroot下面创建我们的文件系统
1)mkdir boot proc sys dev home root etc/{rc.d,sysconfig/network,init.d} bin sbin lib usr/{bin,sbin,lib,include} var/{log,run} tmp mnt opt media -pv
作为系统我们当然需要一些命令了,这时候我们把响应的命令复制过来
2)which ls
cp /bin/ls /mnt/sysroot/bin复制到对应的目录下面来
ldd /bin/ls
linux-gate.so.1 => (0x00f40000)
librt.so.1 => /lib/librt.so.1 (0x00746000)
libacl.so.1 => /lib/libacl.so.1 (0x00751000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00c4e000)
libc.so.6 => /lib/libc.so.6 (0x005b6000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0072d000)
/lib/ld-linux.so.2 (0x00593000)
libattr.so.1 => /lib/libattr.so.1 (0x00d03000)
libdl.so.2 => /lib/libdl.so.2 (0x006fe000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00c68000)
ls这个命令的执行依赖这些个库文件,我们把库文件复制过来,第一个linux-gate是库的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号