一、 UBI/UBIFS產(chǎn)生背景
FLASH具有的“先擦除再寫入”、壞塊、“有限的讀寫次數(shù)”等特性,目前管理FLASH的方法主要有:
1、 采用MTD+FTL/NFTL(flash 轉(zhuǎn)換層/nand flash轉(zhuǎn)換層)+ 傳統(tǒng)文件系統(tǒng),如:FAT、ext2等。FTL/NFTL的使用就是針對FLASH的特有屬性,通過軟件的方式來實現(xiàn)日志管理、壞塊管理、損益均衡等技 術(shù)。但實踐證明,由于知識產(chǎn)權(quán)、效率等各方面因素導(dǎo)致本方案有一定的局限性。
2、采用硬件翻譯層+傳統(tǒng)文件系統(tǒng)的方案。這種方法被很多存儲卡產(chǎn)品采用,如:SD卡、U盤等。這種方案對于一些產(chǎn)品來說,成本較高。
3、采用MTD+ FLASH專用文件系統(tǒng),如JFFS1/2,YAFFS1/2等。它們大大提高了FLASH的管理能力,并被廣泛應(yīng)用。
JFFS2、YAFFS2等專用文件系統(tǒng)也存在著一些技術(shù)瓶頸,如:內(nèi)存消耗大,對FLASH容量、文件系統(tǒng)大小、內(nèi)容、訪問模式等的線性依賴,損益均衡能力差或過渡損益等。在此背景下內(nèi)核加入了UBI文件系統(tǒng)的支持。
二、UBI/UBIFS簡單介紹
由于超大容量Nand?Flash的普及,YAFFS等皆無法再去控制Nand?Flash的空間,于是在2006年由IBM與Nokia的工程師Thomas?Gleixner,Artem?Bityutskiy設(shè)計開發(fā)了UBI及其UBIFS文件系統(tǒng),專門為了解決MTD(Memory?Technology?Device)設(shè)備所遇到的瓶頸。UBIFS通過子系統(tǒng)UBI處理與MTD?device之間的動作。與JFFS2一樣,UBIFS?建構(gòu)于MTD?device?之上,因而與一般的block?device不兼容。
其中,UBI是一種類似于LVM的邏輯卷管理層。主要實現(xiàn)損益均衡,邏輯擦除塊、卷管理,壞塊管理等。而UBIFS是一種基于UBI的FLASH日志文件系統(tǒng)。
一句話解讀就是,UBIFS及其使用的UBI子系統(tǒng),是一種用在大容量flash上的文件系統(tǒng)。
三、UBI/UBIFS的特點
1. 可擴展性
UBIFS對flash?尺寸有著很好的擴展性;也就是說mount時間、內(nèi)存消耗以及I/O速度都不依賴于flash?尺寸(對于內(nèi)存消耗并不是完全準(zhǔn)確的,但是依賴性非常的低);?UBIFS可以很好的適應(yīng)GB以上大小的大容量flash; 當(dāng)然UBI本身還有擴展性的問題,無論如何, UBI/UBIFS都比JFFS2的可擴展性好,此外如果UBI成為瓶頸,還可以通過升級UBI而不需改變UBIFS。
2. 快速mount
不像JFFS2,UBIFS在mount階段不需要掃描整個文件系統(tǒng),UBIFS?mount介質(zhì)的時間只是毫秒級,時間不依賴與flash的尺寸;然而UBI的初始化時間是依賴flash的尺寸的,因此必須把這個時間考慮在內(nèi)。
3. write-back?支持
UBIFS的回寫(延遲寫)同JFFS2的write-through(立即寫入內(nèi)存)相比可以顯著地提高文件系統(tǒng)的吞吐量。
4. 異常unmount適應(yīng)度
UBIFS是一個日志文件系統(tǒng),可以容忍突然掉電以及unclean重啟;?UBIFS?通過replay?日志來恢復(fù)unclean?unmount,在這種情況下replay會消耗一些時間,因此mount時間會稍微增加,但是replay過程并不會掃描整個flash介質(zhì),所以UBIFS的mount時間大概在幾分之一秒。
5. 快速I/O
即使我們disable?write-back(可以在unmount時使用-o?sync?mount選項),?UBIFS的性能仍然接近JFFS2。記住,JFFS2的同步I/O是非常驚人的,因為JFFS2不需要在flash上維護(hù)indexing?data結(jié)構(gòu),?所以就沒有因此而帶來的負(fù)擔(dān);?而UBIFS恰恰是有index數(shù)據(jù)的。?UBIFS之所以夠快是因為UBIFS提交日志的方式:不是把數(shù)據(jù)從一個地方移動到另外一個位置,而只是把數(shù)據(jù)的地址加到文件系統(tǒng)的index,然后選擇不同的eraseblock作為新的日志塊,此外還有multi-headed日志方式等技巧。
6. on-the_flight?compression
存儲在flash介質(zhì)上的數(shù)據(jù)是壓縮的;同時也可以靈活的針對單個文件來打開關(guān)閉壓縮;?例如,可能需要針對某個特定的文件打開壓縮,或者可能缺省方式下支持壓縮,但是對多媒體文件則關(guān)閉壓縮。
7. 可恢復(fù)性
UBIFS可以從index破壞后恢復(fù);?UBIFS中的每一片信息都有一個header來描述,因此可以通過掃描這個flash介質(zhì)來重構(gòu)文件系統(tǒng),這點和JFFS2非常類似;想像一下,如果你擦出了FAT文件系統(tǒng)的FAT表,那么對于FAT?FS是致命的錯誤,但是如果擦除UBIFS的index,你人然可以重構(gòu)文件系統(tǒng),當(dāng)然這需要一個特定的用戶空間程序來做這個恢復(fù)。
8. 完整性
UBIFS通過寫checksum到flash?介質(zhì)上來保證數(shù)據(jù)的完整性,UBIFS不會無視損壞文件數(shù)據(jù)或meta-data;?缺省的情況,UBIFS僅僅檢查meta-data的CRC,但是你可以通過mount選項,強制進(jìn)行data?CRC的檢查。
三、UBI/UBIFS的層次結(jié)構(gòu)
UBI和UBIFS在linux上的層次結(jié)構(gòu)如下圖所示。
?從上圖可以清楚看到:
UBIFS是工作在UBI子系統(tǒng)之上的。
UBI沒有FLASH轉(zhuǎn)換成(FTL,F(xiàn)lash Translation Layer)。
因為沒有FTL,所以UBI只能工作在裸的flash,因此,它不能用于消費類FLASH,如MMC, RS-MMC, eMMC, SD, mini-SD, micro-SD, CompactFlash, MemoryStick等,UBI在嵌入式設(shè)備如智能手機中被廣泛使用。
?
評論
查看更多