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所替換命令的情況。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章