嵌入式文件系統簡介(一) —— Linux MTD設備文件系統

1. 文件系統簡介

文件系統是一種存儲和組織計算機數據的方法,它使得對其訪問和查找變得容易,文件系統使用文件和樹形目錄的抽象邏輯概念代替了硬盤和光盤等物理設備使用數據塊的概念,用戶使用文件系統來保存數據沒必要關心數據實際保存在硬盤(或者光盤)的地址爲多少的數據塊上,只須要記住這個文件的所屬目錄和文件名。在寫入新數據以前,用戶沒必要關心硬盤上的那個塊地址沒有被使用,硬盤上的存儲空間管理(分配和釋放)功能由文件系統自動完成,用戶只須要記住數據被寫入到了哪一個文件中。linux

文件系統一般使用硬盤和光盤這樣的存儲設備,並維護文件在設備中的物理位置。可是,實際上文件系統也可能僅僅是一種訪問數據的界面而已,實際的數據是經過網絡協議(如NFS、SMB、9P等)提供的或者內存上,甚至可能根本沒有對應的文件(如proc文件系統)。安全

嚴格地說,文件系統是一套實現了數據的存儲、分級組織、訪問和獲取等操做的抽象數據類型(Abstract data type)。網絡

2. 存儲設備和文件系統的關係

在嵌入式系統中,與文件系統相關的存儲設備包括硬盤、Flash存儲器等。Flash存儲器又分爲Flash芯片設備(Raw Flash device,也叫MTD設備)和帶Flash控制器的設備(Flash Translation Layer device, FTL設備),二者的關鍵區別是是否帶有Flash控制器,這也直接決定了文件系統分爲不一樣的兩類。性能

  image.png

圖 2.1 MTD設備和FTL設備比較spa

其中MTD設備包括NOR Flash、NAND Flash等,FTL設備包括SD、eMMC、SSD、USB大容量存儲設備等。如圖 2.1和圖 2.2所示JFFS二、YAFFS二、UBIF、LogFS支持MTD設備,FAT、EXT3/四、XFS和Btrfs支持 FTL設備和硬盤(HDD)。MTD設備對應的設備文件爲/dev/mtd,FTL設備對應的設備文件可爲/dev/mtdblock。.net

image.png

圖 2.2 Linux文件系統軟件模塊圖設計

3. MTD設備文件系統

3.1.1   JFFS2

JFFS意爲「Journaling Flash File System」,該文件系統是瑞典Axis通訊公司開發的一種基於Flash存儲器的日誌文件系統。該公司於1999年在GNU/Linux上發行了初版JFFS文件系統,後來通過Redhat公司的發展,發行了第二個版本的JFFS2。JFFS2 是一個日誌結構(log-structured)的文件系統,將文件系統的數據和原數據以節點的形式存儲在閃存上。主要用於NOR型閃存,基於MTD驅動層,特色是:可讀寫的、支持數據壓縮的、基於哈希表的日誌型文件系統,並提供了崩潰/掉電安全保護,提供「寫平衡」支持等。缺點主要是當文件系統已滿或接近滿時,由於垃圾收集的關係而使JFFS2的運行速度大大放慢。日誌

JFFS2的缺點包括:掛載時間過長;對芯片存儲塊讀寫不均衡;擴展性較差等。JFFS2不適合用於NAND閃存主要是由於NAND閃存的容量通常較大,這樣致使JFFS2爲維護日誌節點所佔用的內存空間迅速增大,另外,JFFS2文件系統在掛載時須要掃描整個FLASH的內容,以找出全部的日誌節點,創建文件結構,對於大容量的NAND閃存會耗費大量時間。擴展資料https://www.ibm.com/developerworks/cn/linux/l-jffs2/blog

3.1.2   YAFFS2

YAFFS/YAFFS2是專爲嵌入式系統使用NAND型閃存而設計的一種日誌型文件系統。與JFFS2相比,它減小了一些功能(例如不支持數據壓縮),因此速度更快,掛載時間很短,對內存的佔用較小。另外,它仍是跨平臺的文件系統。內存

    YAFFS/YAFFS2自帶NAND芯片的驅動,而且爲嵌入式系統提供了直接訪問文件系統的API,用戶能夠不使用Linux中的MTD與VFS,直接對文件系統操做。固然,YAFFS也可與MTD驅動程序配合使用。這方便了其跨平臺移植。

YAFFS與YAFFS2的主要區別在於,前者僅支持小頁(512 Bytes)NAND閃存,後者則可支持大頁(2KB) NAND閃存。同時,YAFFS2在內存空間佔用、垃圾回收速度、讀/寫速度等方面均有大幅提高。

3.1.3   UBIFS

UBIFS(Unsorted Block Image File System)最先在2006年由IBM與Nokia的工程師Thomas Gleixner,Artem Bityutskiy所設計,專門爲了解決MTD(Memory Technology Device)設備所遇到的瓶頸。因爲NAND Flash容量的暴漲,YAFFS等皆沒法再去控制NAND Flash的空間。UBIFS經過子系統UBI處理與MTD device之間的動做。與JFFS2同樣,UBIFS 建構於MTD device 之上,於是與通常的block device不兼容。

UBIFS在設計與性能上均較YAFFS二、JFFS2更適合NAND Flash,例如:UBIFS 支持 write-back, 其寫入的數據會被cache, 直到有必要寫入時才寫到Flash,大地下降分散小區塊數量並提升I/O效率。UBIFS文件系統目錄存儲在Flash上,UBIFS mount時不須要scan整個Flash的數據來從新建立文件目錄。支持on-the-flight壓縮文件數據,並且可選擇性壓縮部份文件。另外UBIFS使用日誌(journal),可減小對Flash index的更新頻率。擴展閱讀https://blog.csdn.net/younger_china/article/details/12651909

3.1.4   總結

當前主流的選擇是UBIFS和YAFFS2,若是是非Linux系統能夠選用移植性較好的YAFFS2。具體的比較見圖 3.1和圖 3.2。擴展閱讀資料https://elinux.org/images/7/7e/ELC2009-FlashFS-Toshiba.pdf

image.png

圖 3.1 MTD設備文件系統比較

image.png

圖 3.2 MTD設備文件系統選用建議

相關文章
相關標籤/搜索