您好,登錄后才能下訂單哦!
文件系統(tǒng)是一種存儲(chǔ)和組織計(jì)算機(jī)數(shù)據(jù)的方法,它使得對(duì)其訪問和查找變得容易,文件系統(tǒng)使用文件和樹形目錄的抽象邏輯概念代替了硬盤和光盤等物理設(shè)備使用數(shù)據(jù)塊的概念,用戶使用文件系統(tǒng)來保存數(shù)據(jù)不必關(guān)心數(shù)據(jù)實(shí)際保存在硬盤(或者光盤)的地址為多少的數(shù)據(jù)塊上,只需要記住這個(gè)文件的所屬目錄和文件名。在寫入新數(shù)據(jù)之前,用戶不必關(guān)心硬盤上的那個(gè)塊地址沒有被使用,硬盤上的存儲(chǔ)空間管理(分配和釋放)功能由文件系統(tǒng)自動(dòng)完成,用戶只需要記住數(shù)據(jù)被寫入到了哪個(gè)文件中。
文件系統(tǒng)通常使用硬盤和光盤這樣的存儲(chǔ)設(shè)備,并維護(hù)文件在設(shè)備中的物理位置。但是,實(shí)際上文件系統(tǒng)也可能僅僅是一種訪問數(shù)據(jù)的界面而已,實(shí)際的數(shù)據(jù)是通過網(wǎng)絡(luò)協(xié)議(如NFS、SMB、9P等)提供的或者內(nèi)存上,甚至可能根本沒有對(duì)應(yīng)的文件(如proc文件系統(tǒng))。
嚴(yán)格地說,文件系統(tǒng)是一套實(shí)現(xiàn)了數(shù)據(jù)的存儲(chǔ)、分級(jí)組織、訪問和獲取等操作的抽象數(shù)據(jù)類型(Abstract data type)。
在嵌入式系統(tǒng)中,與文件系統(tǒng)相關(guān)的存儲(chǔ)設(shè)備包括硬盤、Flash存儲(chǔ)器等。Flash存儲(chǔ)器又分為Flash芯片設(shè)備(Raw Flash device,也叫MTD設(shè)備)和帶Flash控制器的設(shè)備(Flash Translation Layer device, FTL設(shè)備),兩者的關(guān)鍵區(qū)別是是否帶有Flash控制器,這也直接決定了文件系統(tǒng)分為不同的兩類。
圖 2.1 MTD設(shè)備和FTL設(shè)備比較
其中MTD設(shè)備包括NOR Flash、NAND Flash等,FTL設(shè)備包括SD、eMMC、SSD、USB大容量存儲(chǔ)設(shè)備等。如圖 2.1和圖 2.2所示JFFS2、YAFFS2、UBIF、LogFS支持MTD設(shè)備,FAT、EXT3/4、XFS和Btrfs支持 FTL設(shè)備和硬盤(HDD)。MTD設(shè)備對(duì)應(yīng)的設(shè)備文件為/dev/mtd,FTL設(shè)備對(duì)應(yīng)的設(shè)備文件可為/dev/mtdblock。
圖 2.2 Linux文件系統(tǒng)軟件模塊圖
JFFS意為“Journaling Flash File System”,該文件系統(tǒng)是瑞典Axis通信公司開發(fā)的一種基于Flash存儲(chǔ)器的日志文件系統(tǒng)。該公司于1999年在GNU/Linux上發(fā)行了第一版JFFS文件系統(tǒng),后來經(jīng)過Redhat公司的發(fā)展,發(fā)行了第二個(gè)版本的JFFS2。JFFS2 是一個(gè)日志結(jié)構(gòu)(log-structured)的文件系統(tǒng),將文件系統(tǒng)的數(shù)據(jù)和原數(shù)據(jù)以節(jié)點(diǎn)的形式存儲(chǔ)在閃存上。主要用于NOR型閃存,基于MTD驅(qū)動(dòng)層,特點(diǎn)是:可讀寫的、支持?jǐn)?shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護(hù),提供“寫平衡”支持等。缺點(diǎn)主要是當(dāng)文件系統(tǒng)已滿或接近滿時(shí),因?yàn)槔占年P(guān)系而使JFFS2的運(yùn)行速度大大放慢。
JFFS2的缺點(diǎn)包括:掛載時(shí)間過長;對(duì)芯片存儲(chǔ)塊讀寫不均衡;擴(kuò)展性較差等。JFFS2不適合用于NAND閃存主要是因?yàn)?/span>NAND閃存的容量一般較大,這樣導(dǎo)致JFFS2為維護(hù)日志節(jié)點(diǎn)所占用的內(nèi)存空間迅速增大,另外,JFFS2文件系統(tǒng)在掛載時(shí)需要掃描整個(gè)FLASH的內(nèi)容,以找出所有的日志節(jié)點(diǎn),建立文件結(jié)構(gòu),對(duì)于大容量的NAND閃存會(huì)耗費(fèi)大量時(shí)間。擴(kuò)展資料https://www.ibm.com/developerworks/cn/linux/l-jffs2/。
YAFFS/YAFFS2是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng)。與JFFS2相比,它減少了一些功能(例如不支持?jǐn)?shù)據(jù)壓縮),所以速度更快,掛載時(shí)間很短,對(duì)內(nèi)存的占用較小。另外,它還是跨平臺(tái)的文件系統(tǒng)。
YAFFS/YAFFS2自帶NAND芯片的驅(qū)動(dòng),并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以不使用Linux中的MTD與VFS,直接對(duì)文件系統(tǒng)操作。當(dāng)然,YAFFS也可與MTD驅(qū)動(dòng)程序配合使用。這方便了其跨平臺(tái)移植。
YAFFS與YAFFS2的主要區(qū)別在于,前者僅支持小頁(512 Bytes)NAND閃存,后者則可支持大頁(2KB) NAND閃存。同時(shí),YAFFS2在內(nèi)存空間占用、垃圾回收速度、讀/寫速度等方面均有大幅提升。
UBIFS(Unsorted Block Image File System)最早在2006年由IBM與Nokia的工程師Thomas Gleixner,Artem Bityutskiy所設(shè)計(jì),專門為了解決MTD(Memory Technology Device)設(shè)備所遇到的瓶頸。由于NAND Flash容量的暴漲,YAFFS等皆無法再去控制NAND Flash的空間。UBIFS通過子系統(tǒng)UBI處理與MTD device之間的動(dòng)作。與JFFS2一樣,UBIFS 建構(gòu)于MTD device 之上,因而與一般的block device不兼容。
UBIFS在設(shè)計(jì)與性能上均較YAFFS2、JFFS2更適合NAND Flash,例如:UBIFS 支持 write-back, 其寫入的數(shù)據(jù)會(huì)被cache, 直到有必要寫入時(shí)才寫到Flash,大地降低分散小區(qū)塊數(shù)量并提高I/O效率。UBIFS文件系統(tǒng)目錄存儲(chǔ)在Flash上,UBIFS mount時(shí)不需要scan整個(gè)Flash的數(shù)據(jù)來重新創(chuàng)建文件目錄。支持on-the-flight壓縮文件數(shù)據(jù),而且可選擇性壓縮部份文件。另外UBIFS使用日志(journal),可減少對(duì)Flash index的更新頻率。擴(kuò)展閱讀https://blog.csdn.net/younger_china/article/details/12651909。
當(dāng)前主流的選擇是UBIFS和YAFFS2,如果是非Linux系統(tǒng)可以選用移植性較好的YAFFS2。具體的比較見圖 3.1和圖 3.2。擴(kuò)展閱讀資料https://elinux.org/images/7/7e/ELC2009-FlashFS-Toshiba.pdf。
圖 3.1 MTD設(shè)備文件系統(tǒng)比較
圖 3.2 MTD設(shè)備文件系統(tǒng)選用建議
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。