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