Linux文件系统剪裁(几年前的毕业设计之二)

来源:互联网 发布:顺序表的就地逆置JAVA 编辑:程序博客网 时间:2024/04/29 06:37
第三章 Linux文件系统剪裁
31Linux文件系统剪裁平台
(1)在内核剪裁平台的基础上,再添加一块虚拟硬盘(1.5G,SCSI接口)。
(2) 在这块硬盘上安装一个RedHat9.0服务器版+perl语言环境
(3) 安装vmware-tools
将虚拟机的光驱指向VMware安装文件中的linux.iso镜像文件
进入虚拟系统的文件剪裁平台。

#mount /mnt/cdrom

#cd /usr/src/

#tar zxvf /mn t/cdrom/vmware-linux-tools.tar.gz

#cd vmwrae-tools-distrib

#./vmware-install.pl
然后一路回车即可。
(4) 升级module-init-tools
 
32Linux文件系统剪裁方法
在剪裁工作进行之前,先要做一些预备工作。首先要进行需求分析。分析嵌入式系统所要实现的功能,制定系统剪裁目标。然后要对Linux系统目录以及目录下各主要文件的功能进行分析,以在剪裁过程中保留嵌入式系统所需要的文件。最后,制定剪裁计划。
由于我是在虚拟机上进行剪裁的,根据虚拟机的特点,我将剪裁过程分为四个阶段:
第一个阶段是总体剪裁阶段。在该阶段对RedHat9中与实现的嵌入式系统完全无关的目录和文件进行剪裁。在剪裁过程中,首先要保证系统的网络功能和各项安全服务的正常运转;再次要保证虚拟机文件共享功能的正常运转,因为要利用虚拟机的文件共享功能与主机进行文件交互,更重要的是在剪裁过程中对系统做好备份。一方面可利用虚拟机的Snapshot对系统进行短期备份,即在系统剪裁过程中,定期检查系统所要保留功能是否正常运转,如正常运转,则用Snapshot进行断点镜像,如不能,则将系统Revert至上次正常运行的断点。另一方面是利用系统的tar备份工具对系统进行长期备份。
备份时用:

#tar cvzf /mnt/hgfs/windows/redhatbackup/redhat0420-200m.tar.gz bin/ boot/ dev/ etc/ initrd/ lib/ lost+found/ root/ sbin/ usr/ var/

将系统备份到主系统中redhatbackup文件夹中,命名为redhat0420-200m.tar.gz表示是4月20日备份,系统大小为200MB,应把备份系统的详细情况保存为一个说明文件,以备系统恢时使用。
系统恢复时用:
#cd /

#tar zxvf /mnt/hgfs/windows/redhatbackup/redhat0420-200m.tar.gz

在剪裁过程中可对系统进行几次tar备份。如果在剪裁过程中出现失误,要选择从适当的备份中恢复。在第一阶段中系统将剪裁至30MB左右。
第二个阶段为详细剪裁阶段。在该阶段中,将把升级并剪裁好的内核移至系统中,以使剪裁好的系统在Linux2.6内核下也能正常工作。该阶段中将不再保留虚拟机的文件共享功能,系统备份将由备份在虚拟系统的第一块硬盘中,并由第一块硬盘中的内核剪裁系统将备份文件拷至Windows主系统中进行备份。在该阶段一方面要详细分析剩余文件的功能,另一方面要在剪裁过程中不断地进行“剪裁-测试-备份”,有时甚至对个别文件进行剪裁。在剪裁中应记录下发现的错误以及个别文件的作用。在第二阶段中系统将剪裁至13MB左右。
第三个阶段将利用busybox和tinylogin对系统大小进一步压缩。
Busybox是实现嵌入式系统的利器。Busybox是一个提供了大多数常用命令的工具程序集合,很多命令可直接连接过去即可,它专为嵌入式系统调试使用。BusyBox把很多普通Unix实用程序的小版本结合到单个executable,为嵌入式系统提供一种相当完全的POSIX环境。它能实现linux大部分常用命令的功能,但只占用150k-300k空间(视你编入的命令的多少)。用busybox代替部分命令能减少不少空间。
编译busybox和编译内核很相似。我用的是busybox-1.00-pre7.tar.gz
#tar zxvf busybox-1.00-pre7.tar.gz
#cd busybox-1.00-pre7
#make menuconfig
配置busybox选项
#make dep
#make
#make PREFIX=/mnt/sdc1/ install
将busybox直接安装到U盘上,你可以先在系统测试平台演练几次。
Busybox的配置文件
注意:init,login,ismod,unmod,halt,shutdown,
poweroff,reboot,ifup,ifdown,ls,hwclock,umount,
bash等命令不能被busybox代替。因为busybox中的这些命令功能较弱,不能完成系统正常启动所需要的功能。
Tinylogin是busybox的姊妹项目,也是一个工具程序集合,提供了多用户环境的用户身分管理程序,。Tinylogin实现了登陆,用户认证,帐号管理等功能,和它的名字一样,它非常小,是busybox一个很好的补充。
系统中用tinylogin-1.4.tar.gz代替了   login,passwd,su,sulogin等命令,并删除了/lib/security/*,
/etc/pam.d/*,/lib/libpam*,/lib/libnsl*等文件。节省了不少空间。我在tinylogin的配置文件Config.h中去掉了不需要的adduser,deluser,addgroup,delgroup,getty,vlock选项。保留了login,passwd,su,sulogin等选项。因使用了tinylogin,应busybox的配置中去掉su,sulogin,pidof,并用系统原有的pidof代替busybox中的pidof。因为busybox中的pidof功能较弱,不支持tinylogin中的miti-call.在系统关闭anacron服务时,会出错。为节省空间,在编译时,没有使用GNU Libc's NSS库。即把Makefile中的“USE_SYSTEM_PWD_GRP=false” 在第三阶段中系统将剪裁至6MB左右。
第四个阶段将压缩文件系统以进一步减小系统大小。该阶段系统将采用“kernel+initrd”的形式。文件系统将被压缩,在系统启动时以initrd的形式加载到内存,以ramdisk(把内存模拟成硬盘)的方式工作。该方式有两个优点:一方面由于根文件系统的压缩使其减小50%,内核中不再需要USB模块使内核也减小,从而使系统体积大大减小(能减到3M以下);另一方面由于系统在内核中运行,其运行速度大为提高,而且也减少了系统对U盘的反复读写,提高了U盘的使用寿命。当然这样做也存在不足:一方面在启动时载入整个根文件系统,将使启动速度变慢,另一方面在运行时对系统所做的更改将无法保存,这将使一些日志文件无法保存。根据自己的需要,看看是否进行第四步剪裁。
因根文件系统超过4M,而系统默认的ramdisk大小为4M,故要修改正在运行系统的内核的RAM选项:
 <*>RAM disk supprot

 (5120)Default RAM disk size

重新编译内核。
然后在适当的目录下(自己保存文档的目录)创建initrd目录,在initrd目录下创建local和ramdisk目录,把第三步所得系统(除boot/目录外)拷入local目录,并在initrd目录中创建脚本文件mkinitrd.sh,其内容为:
 #!/bin/sh
 dd if=/dev/zero of=/dev/ram0 bs=1k count=5120
 mke2fs /dev/ram0
 mount -t ext2 /dev/ram0 ramdisk/
 
 cp -apdR local/* ramdisk/
 umount ramdisk
 
 dd if=/dev/ram0 bs=1k count=5120| gzip -v9 > initrd.gz
然后修改脚本属性并执行脚本:
#chmod a+x mkinitrd.sh
#./mkinitrd.sh
当执行完该脚本,并不能生成所需要的initrd.gz文件。
 要对其进行手动修改
 #gunzip initrd.gz                 //解压缩块文件

 #mke2fs -m 0 initrd        //重新格式化块文件   

 #mount -o loop initrd /mnt/initrd //挂载块文件

 #cp -apdR local/* /mnt/initrd/  //拷贝根文件系统

 #umount /mnt/initrd        //卸载块文件 

 #gzip -9 initrd          //重新压缩块文件

 注意根文件系统中的内核模块要和内核相对应。
 
33 Linux文件系统目录及保留文件说明(见附录2)
本章小结
本章分四个阶段详细介绍了Linux文件系统的剪裁过程,其中穿插着讲述了虚拟机在剪裁过程中的重要作用及其使用方法,最后详细说明了剪裁后保留文件的相关情况以及busybux所替换命令的情况。
 
原创粉丝点击