文件系統(tǒng)概念
文件系統(tǒng)通常提供目錄或文件夾用于記錄文件,在很多系統(tǒng)中目錄本身也是文件,在這些系統(tǒng)中,目錄是管理文件系統(tǒng)結(jié)構(gòu)的系統(tǒng)文件。從文件組織結(jié)構(gòu)上來說,嵌入式Linux文件系統(tǒng)與普通PC/服務(wù)器上Linux的文件系統(tǒng)是一樣的,只是嵌入式Linux文件系統(tǒng)根據(jù)產(chǎn)品功能進(jìn)行過裁剪,在內(nèi)容多少和體積大小上不同。進(jìn)行嵌入式Linux產(chǎn)品開發(fā),構(gòu)建一個合適的文件系統(tǒng)是不可或缺的,可以基于已有文件系統(tǒng)進(jìn)行裁剪或者定制,也可以從頭開始構(gòu)建。
文件系統(tǒng)類型
簡單介紹一些常用的幾種linux系統(tǒng)類型:ramdisk、cramfs、jffs2、yaffs/yaffs2、ubifs、NFS、Ext2/3/4等,ELF?1開發(fā)板使用的是Ext3文件系統(tǒng),每種文件系統(tǒng)類型都有自己的特性,下面我們逐一介紹一下。
一、Ext2/3/4
Ext全稱Linux extended file system, extfs,即Linux擴(kuò)展文件系統(tǒng),Ext2代表第二代擴(kuò)展文件系統(tǒng),Ext3/Ext4是Ext2的升級版,減少一致性檢查的時間,增加了日志功能,一般將Ext2稱為索引式文件系統(tǒng),Ext3/Ext4稱為日志式文件系統(tǒng)。
二、NFS文件系統(tǒng)
網(wǎng)絡(luò)文件系統(tǒng)。用于系統(tǒng)間通過網(wǎng)絡(luò)進(jìn)行文件共享,NFS包括兩部分,服務(wù)端及客戶端。本地NFS客戶端可以讀寫位于遠(yuǎn)端NFS服務(wù)器上的文件,就像訪問本地文件一樣。
三、jffs2文件系統(tǒng)
Journalling Flash File System Version 2是一個可讀寫,壓縮,日志型文件系統(tǒng)。其功能是管理在MTD設(shè)備上實現(xiàn)的日志型文件系統(tǒng)。啟動時間依賴于文件系統(tǒng)大小,通常比較長,最初只支持NOR Flash,后來添加了NAND Flash的支持但不穩(wěn)定,不推薦在NAND Flash上使用。
四、ubifs文件系統(tǒng)
Unsorted Block Image File System UBIFS文件系統(tǒng)構(gòu)建于MTD設(shè)備之上,支持write-back,其寫入的數(shù)據(jù)會被cache,直到有必要寫入時才寫到NAND Flash,這樣大大地降低分散小區(qū)塊數(shù)量并提高I/O效率。UBIFS文件支持?jǐn)?shù)據(jù)壓縮。
五、YAFFS/YAFFS2文件系統(tǒng)
YAFFS/YAFFS2是一種和JFFSx類似的閃存文件系統(tǒng),它是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計的一種日志型文件系統(tǒng)。YAFFS是第一個在GPL協(xié)議下發(fā)布的適用于大容量存儲設(shè)備的日志型文件系統(tǒng)。和JFFS2相比它減少了一些功能,所以速度更快,而且對內(nèi)存的占用比較小。此外,YAFFS自帶NAND芯片的驅(qū)動,并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以直接對文件系統(tǒng)操作。YAFFS2支持大頁面的NAND設(shè)備,并且對大頁面的NAND設(shè)備做了優(yōu)化。Yaffs2更使用于NAND Flash上使用。
六、Cramfs文件系統(tǒng)
Cramfs文件系統(tǒng)以壓縮方式存儲,在運(yùn)行時解壓縮,所有的應(yīng)用程序要求被拷到RAM里去運(yùn)行,這并不代表會需求更大的RAM空間,因為Cramfs采用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子耗用過多的內(nèi)存空間,只針對目前實際讀取的部分分配內(nèi)存,尚沒有讀取的部分不分配內(nèi)存空間,當(dāng)我們讀取的檔案不在內(nèi)存時,Cramfs文件系統(tǒng)自動計算壓縮后的資料所存的位置,再即時解壓縮到RAM中。
cramfs文件系統(tǒng)速度快,效率高,其只讀的特點有利于保護(hù)文件系統(tǒng)免受破壞,提高了系統(tǒng)的可靠性。但只讀屬性同時又是它的一大缺陷,使得用戶無法對其內(nèi)容對進(jìn)擴(kuò)充。
七、RamDisk文件系統(tǒng)
RamDisk就是將內(nèi)存中的一塊區(qū)域作為物理磁盤來使用的一種技術(shù)。它并非一個實際的文件系統(tǒng),而是一種將實際的文件系統(tǒng)裝入內(nèi)存的機(jī)制,并且可以作為根文件系統(tǒng)。將一些經(jīng)常被訪問而又不會更改的文件(如只讀的根文件系統(tǒng))通過Ramdisk放在內(nèi)存中,可以明顯地提高系統(tǒng)的性能。在Linux的啟動階段,initrd提供了一套機(jī)制,可以將內(nèi)核映像和根文件系統(tǒng)一起載入內(nèi)存。
RamDisk是臨時性的,所以沒有帶日志的文件系統(tǒng)的必要。
文件系統(tǒng)目錄結(jié)構(gòu)
我們可以根據(jù)不同的應(yīng)用場景,對嵌入式文件系統(tǒng)目錄結(jié)構(gòu)進(jìn)行裁剪。下面對比較經(jīng)典的幾個文件目錄做一下介紹。
運(yùn)行cd/進(jìn)入文件系統(tǒng)根目錄,運(yùn)行l(wèi)s -l可以看到以下目錄:
目錄 | 內(nèi)容 |
/bin | 存放常用基本命令和工具,如ls、cp等 |
/dev | 存放系統(tǒng)的設(shè)備文件,包含了所有l(wèi)inux系統(tǒng)中使用的外部設(shè)備 |
/etc | 存放系統(tǒng)的配置文件,這里面的配置文件會影響系統(tǒng)所有用戶的系統(tǒng)環(huán)境 |
/home | 用戶的家目錄,在此目錄下,每個用戶都有自己的家目錄 |
/lib | 存放非常重要的系統(tǒng)運(yùn)行庫文件 |
/media | 作為外部設(shè)備的一個掛載點,比如硬盤或者可移動設(shè)備(U盤、DVD、CD)。 |
/mnt | 和/media一樣,也是一個掛載點,但是專用于掛載臨時的設(shè)備,例如網(wǎng)絡(luò)文件系統(tǒng) |
/proc | 一個虛擬文件系統(tǒng),為內(nèi)核提供向進(jìn)程發(fā)送信息的機(jī)制。操作系統(tǒng)運(yùn)行時,進(jìn)程以及內(nèi)核信息存放路徑 |
/sbin | 包含通常只應(yīng)由超級用戶使用的重要管理命令 |
/sys | 設(shè)備驅(qū)動模型中的總線、驅(qū)動、設(shè)備都可以在sysfs中找到對應(yīng)的節(jié)點 |
/tmp | 臨時文件的位置 |
/usr | 包含大多數(shù)用戶命令和工具或者庫文件,包括例如 /usr/bin/ 和 /usr/lib |
/var | 致力于可變數(shù)據(jù),例如日志,數(shù)據(jù)庫,網(wǎng)站和臨時脫機(jī)(電子郵件等)文件 |
/root | root 用戶的家目錄,不在/home/中,即使/home/不可用,也允許引導(dǎo)系統(tǒng) |