Linux檔案系統剪裁(幾年前的畢業設計之二)

2021-04-16 07:38:54 字數 4607 閱讀 5066

第三章 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...