linux檔案系統介紹

2021-09-25 00:06:44 字數 3420 閱讀 9722

linux支援多種檔案系統型別,包括ext2,ext3,vfat,jffs,ramfs,nfs等,為了對各類檔案系統進行統一管理,linux引入了虛擬檔案系統vfs(virtual file system),為各類檔案系統提供乙個統一的應用程式設計介面。

檔案系統型別主要有如下:

根據儲存裝置的硬體特性,系統需求,不同的檔案系統型別有不同的應用場合。在嵌入式linux應用中,主要的儲存裝置為ram和flash,常用的基於儲存裝置的檔案系統型別包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。

基於flash的檔案系統

flash(快閃儲存器)作為嵌入式系統的主要儲存媒介,主要有nor和nand兩種技術。flash儲存器的擦寫次數是有限的,nand快閃儲存器還有特殊的硬體介面和讀寫時序。因此,必須針對flash的硬體特性設計符合應用要求的檔案系統。

jffs2:主要用於nor型flash,特點是可讀寫,支援資料壓縮的日誌型檔案系統。

yaffs/yaffs2:主要用於nand型flash,支援跨平台。

ramdisk:基於ram的檔案系統。是將一部分固定大小的記憶體當做塊裝置來用。它並非是乙個實際的檔案系統,而是一種將實際的檔案系統裝入記憶體的機制。ramdisk是系統啟動後將檔案系統映像從flash讀取並解壓到記憶體中執行,所以,裝置執行中對檔案系統所做的改變,在裝置重啟後都會恢復。可以防止嵌入式裝置在執行過程中由於外界不良的條件造成的檔案系統損壞而導致系統無法啟動。將一些經常訪問而又無需更改的檔案通過ramdisk放在記憶體中,可以明顯的提高系統的效能。

initrd:

linux初始ram disk,是在系統引導過程中掛載的乙個臨時根檔案系統,用來支援兩階段的引導過程。initrd檔案中包含了各種可執行程式和驅動程式,它們可以用來掛載實際的根檔案系統,然後再將這個 initrd ramdisk解除安裝,並釋放記憶體。在很多嵌入式linux系統中,initrd 就是最終的根檔案系統。

可以把initrd當做臨時根檔案系統,核心掛載initrd,執行/linuxrc,在這個指令碼裡載入realfs的的驅動,掛載realfs。

也可以不掛載realfs,把initrd當做真正的根檔案系統使用,只是把系統當作都在 ramdisk 上運作。

initramfs:

在linux2.5**現了initramfs,它的作用和initrd類似,只是和核心編譯成乙個檔案(該initramfs是經過gzip壓縮後的cpio格式的資料檔案),該cpio格式的檔案被鏈結進了核心中特殊的資料段.init.ramfs上,其中全域性變數__initramfs_start和__initramfs_end分別指向這個資料段的起始位址和結束位址。核心啟動時會對.init.ramfs段中的資料進行解壓,然後使用它作為臨時的根檔案系統。

基於ram的檔案系統。它類似於tmpfs,是一種基於記憶體的檔案系統,它的使用不需要建立記憶體塊裝置。增加檔案到ramfs會自動配置更多的記憶體,並刪除或截去檔案以釋放記憶體。(若ramdisk沒有滿,已被占用的額外的記憶體也不能用來做其它事情,若ramdisk滿了,但其它仍有閒置的記憶體,也必須重新格式化以後才能擴充套件使用)

cramfs:

1.唯讀的壓縮檔案系統。基於mtd驅動,可用於兩種flash。唯讀的特點有利於保護檔案系統免受破壞,提高了系統的可靠性。

2.在cramfs檔案系統中,每一頁(4kb)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統節省大量的flash儲存空間,使系統可通過更低容量的flash儲存相同的檔案,從而降低系統成本。

3.cramfs是採用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子就耗用過多的記憶體空間,只針對目前實際讀取的部分分配記憶體,尚沒有讀取的部分不分配記憶體空間,當我們讀取的檔案不在記憶體時,cramfs檔案系統自動計算壓縮後的資料所存的位置,再即時解壓縮到 ram中,對於嵌入式裝置來說,是很節省記憶體的。由於在執行時解壓縮,所以不支援應用程式以xip方式執行,所有的應用程式要求被拷到ram裡去執行。

nfs:是由sun開發的一種在不同機器之間通過網路共享檔案的技術。在嵌入式linux系統的開發除錯階段,可以利用該技術在主機上建立基於nfs的根檔案系統,掛載到嵌入式裝置,可以很方便的修改根檔案系統的內容。

cramfs的特點:

在嵌入式的環境之下,記憶體和外存資源都需要節約使用。如果使用ramdisk方式來使用檔案系統,那麼在系 統執行之後,首先要把外存(flash)上的映像檔案解壓縮到記憶體中,構造起ramdisk環境,才可以開始執行程式。但是它也有很致命的弱點。在正常情 況下,同樣的**不僅在外存中佔據了空間(以壓縮後的形式存在),而且還在記憶體中占用了更大的空間(以解壓縮之後的形式存在),這違背了嵌入式環境下盡量 節省資源的要求。

使用cramfs就是一種解決這個問題的方式。cramfs是乙個壓縮式的檔案系統,它並不需要一次性地將檔案系統中的所有內容都解壓縮到記憶體之中,而只是在系統需要訪問某個位置的資料的時侯,馬上計算出該資料在cramfs中的位置,將其實時地解壓縮到記憶體之中,然後通 過對記憶體的訪問來獲取檔案系統中需要讀取的資料。cramfs中的解壓縮以及解壓縮之後的記憶體中資料存放位置都是由cramfs檔案系統本身進行維護的, 使用者並不需要了解具體的實現過程,因此這種方式增強了透明度,對開發人員來說,既方便,又節省了儲存空間。

cramfs擁有以下一些特性:

採用實時解壓縮方式,但解壓縮的時侯有延遲。

cramfs的資料都是經過處理、打包的,對其進先寫操作有一定困難。所以cramfs不支援寫操作,這個特性剛好適合嵌入式應用中使用flash儲存檔案系統的場合。

在cramfs中,檔案最大不能超過16mb。

支援組標識(gid),但是mkcramfs只將gid的低8位儲存下來,因此只有這8位是有效的。

支援硬鏈結。但是cramfs並沒有完全處理好,硬鏈結的檔案屬性中,鏈結數仍然為1.

cramfs的目錄中,沒有「.」和「..」這兩項。因此,cramfs中的目錄的鏈結數通常也僅有乙個。

cramfs中,不會儲存檔案的時間戳(timestamps)資訊。當然,正在使用的檔案由於inode儲存在記憶體中,因此其時間可以暫時地變更為最新時間,但是不會儲存到cramfs檔案系統中去。

當前版本的cramfs只支援page_cache_size為4096的核心。因此,如果發現cramfs不能正常讀寫的時侯,可以檢查一下核心的引數設定。

initramfs和initrd的異同:

cramfs檔案系統建立和移植:

製作ramdisk檔案系統:

核心與ramdisk到底是什麼關係:

initramfs檔案系統的製作:

關於嵌入式linux系統flash分割槽設計及檔案系統格式選擇的一些淺見:

Linux檔案系統介紹

linux檔案系統 以單根的方式 組織檔案 rootfs根檔案系統 media 掛載點目錄,dev下是裝置檔案而不是目錄 只是裝置上資料的訪問入口 要訪問必須建立關聯關係,這個過程叫掛載。移動裝置的掛載 mnt 掛載點目錄,額外的臨時檔案系統 misc 雜項 opt 可選目錄,第三方程式的安裝目錄 ...

Linux檔案系統介紹

根節點,主層次機構 bin 所有使用者在單使用者模式下必備的可執行的二進位制檔案 dev 系統的裝置檔案 ect 系統的被指檔案 honme 普通使用者家目錄 lib 是 庫檔案目錄 包含了所有對系統有用的庫檔案。簡單來說,它是應用程式 命令或程序正確執行所需要的檔案 media 熱插拔裝置的臨時掛...

Linux 檔案系統的介紹

bin是binary的縮寫,存放著可執行檔案或可執行檔案的鏈結 類似快捷方式 cp,chmod,cat等常用命令都在這裡。注意不要被圖示上的 txt 字樣誤導了,linux 不按字尾識別檔案型別,bin目錄中的檔案都是可執行的二進位制檔案,而不是文字檔案。與 bin類似的是 sbin目錄,syste...