第三章 linux檔案系統剪裁
3
.1linux
檔案系統剪裁平台
(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
3
.2linux
檔案系統剪裁方法
在剪裁工作進行之前,先要做一些預備工作。首先要進行需求分析。分析嵌入式系統所要實現的功能,制定系統剪裁目標。然後要對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,i**od,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
//重新壓縮塊檔案
注意根檔案系統中的核心模組要和核心相對應。
3
.3 linux檔案系統目錄及保留檔案說明(見附錄2)
本章小結
本章分四個階段詳細介紹了linux檔案系統的剪裁過程,其中穿插著講述了虛擬機器在剪裁過程中的重要作用及其使用方法,最後詳細說明了剪裁後保留檔案的相關情況以及busybux所替換命令的情況。
幾年前做家教寫的C教程(之二)
c語言學習寶典 2 認識c語言中的運算子 1 算術運算子 2 關係運算子 3 邏輯運算子 4 位運算子 5 賦值運算子 以及它的擴充套件運算子 6 條件運算子 7 逗號運算子 8 指標運算子 和 9 求位元組數運算子 sizeof 10 強制型別轉換運算子 型別 11 分量運算子 12 下標運算子 ...
幾年前做家教寫的C教程(之一)
c語言學習寶典 首先讓我們認識什麼是c語言。c語言是一種計算機開發語言,是一種非常基礎的開發語言。能夠用c語言做很多事情。c語言是順序執行的程式。程式應該包括資料描述,資料操作。c語言的資料型別 整型 int 基本型別 字元型 char 浮點型 分單精度 float 多精度 double 資料型別 ...
時間函式 當前日期時間 當前時間 幾年前的年 月
時間函式 當前日期時間 當前時間 幾年前的年 月 當前日期時間 select getdate 當前時間 select convert varchar 20 getdate 8 當前日期 select convert varchar 10 getdate 120 幾年 月 select datepar...