# Flash Memory File System ###### tags: `lesson` `rteslab` --- 架構: FMFS出現原因 NAND.NOR特性 FMFS架構 MTD 各FS特點(比較表) JFFS2 UBIFS YAFFS 補充 exFAT --- >待補清單 >UBIFS 找檔流程 >YASSF 垃圾收集 週期 >exFAT boundary alignment能有助於flash file system原因: >跟flash硬體有關 >若沒對齊造成跨頁,會浪費兩個區塊的壽命 >有對齊則可優化 > --- 書面報告 >https://hackmd.io/AoyMuVsoT7qWzOJmDbEiEg --- >電腦上通行的大部份檔案系統,都是針對碟盤儲存裝置設計的,應用到快閃記憶體上並不適合。一般的檔案系統,可以透過快閃記憶體轉換層(Flash Translation Layer,FTL)寫入快閃記憶體,但是它的缺點是寫入的效率較差。因此,設計快閃記憶體檔案系統仍然是有必要的。 >儘管磁碟檔案系統也能在快閃記憶體上使用,但快閃記憶體檔案系統是快閃記憶體裝置的首選,理由如下: - 擦除區塊:快閃記憶體的區塊在重新寫入前必須先進行擦除。擦除區塊會占用相當可觀的時間。因此,在裝置空閒的時候擦除未使用的區塊有助於提高速度,而寫入資料時也可以優先使用已經擦除的區塊。 - 隨機存取:由於在磁碟上尋址有很大的延遲,磁碟檔案系統有針對尋址的最佳化,以儘量避免尋址。但快閃記憶體沒有尋址延遲。 - 寫入平衡(Wear levelling):快閃記憶體中經常寫入的區塊往往容易損壞。快閃記憶體檔案系統的設計可以使資料均勻地寫到整個裝置。 >老FileSystem對flash較好原因: >寫入次數較少 [MTD](https://zh.wikipedia.org/wiki/MTD) http://mark-shih.blogspot.com/2012/10/mtd-devmtddevmtdblok.html MTD 是一個subsystem,用來簡化底層的flash device (ROM/NAND/OneNAND/NOR)的driver。在MTD下,driver只需提供read/write/erase的功能,而不需知道其上是使用FTL (Flash Translation Layer),還是FFS (Flash File System)。 為了讓既有的filesystem(fat/ext/xfs...)能用在flash device上,就需要FTL這個software layer。mtdblock就是其中一種FTL。要注意的是使用FTL時,如果改了其中一個sector,就必須讀一整個eraseblock到 memory,然後erase,最後再把整個eraseblock寫回,顯然cost很高。 具有 eraseblocks 的特微,而不是像硬碟一樣使用叢集。 eraseblocks (32KiB ~ 128KiB) 跟硬碟的 sector size(512 到 1024 bytes)比起來要大很多。 操作上主要分作三個動作: 從 eraseblock 讀取、寫入 eraseblock 、還有就是清除 eraseblock 。 壞掉的 eraseblocks 無法隱藏,需要軟體加以處理。 eraseblocks 的壽命大約會在 104 到 105 的清除動作之後結束。 像USB隨身碟、多媒體記憶卡(MMC)、SD卡、CF卡等其他流行的可移動儲存器要和MTD區分開來,雖然它們也叫「flash」,但它們不是使用MTD技術的儲存器 http://www.linux-mtd.infradead.org/faq/general.html#L_mtd_what |Block device|MTD device| |-|-| |Consists of sectors|Consists of eraseblocks| |Sectors are small (512, 1024 bytes)|Eraseblocks are larger (typically 128KiB)| |Maintains 2 main operations: read sector and write sector|Maintains 3 main operations: read from eraseblock, write to eraseblock, and erase eraseblock| |Bad sectors are re-mapped and hidden by hardware (at least in modern LBA hard drives); in case of FTL devices it is the responsibility of FTL to provide this|Bad eraseblocks are not hidden and should be dealt with in software| |Sectors are devoid of the wear-out property (in FTL devices it is the responsibility of FTL to provide this)|Eraseblocks wear-out and become bad and unusable after about 103 (for MLC NAND) - 105 (NOR, SLC NAND) erase cycles| SSD特性 https://kknews.cc/zh-tw/tech/k8xgvy8.html ### 物理特性 | | NOR | NAND | |-| -------- | -------- | || 可原地執行 | | |寫入速度| 慢 | 快 | |寫入單位| 1擦除區 | 1page | |擦除速度| 慢 | 快 | |擦除單位| 1擦除區 | 1擦除區 | |適合容量| 小 | 大 | |位元線|每個位元都有|多個位元一個| |隨機存取(位元)|有|無,只能連續存取| (1擦除區約為16~128kBytes) (1page可能為512,2048,4096,8192Bytes) NOR可原地執行 NAND容易有壞塊而使程式碼不連續 NOR每次寫入擦除都是以一擦除塊為單位 NOR常用在不需經常更新的程式 例如BIOS與韌體 快閃記憶體可分為頁(Page)、帶外區(OOB)、擦除塊(Block)。 - 頁就是快閃記憶體讀取及寫入的最小單位,依顆粒製成不同有512,2048,4096,8192位元組。 - 帶外區是每一個頁在實體的結構中實際數據位元組之外的使用空間,若以2048位元組為一頁為例,每一個頁在實體的結構中除了2048位元組的使用空間,還會有64位元組額外的容量,供硬體以及軟體儲存一些額外的資訊,通常會用來儲存糾錯碼的數據,來校正快閃記憶體使用久後會有位元不能使用的問題。 - 擦除塊為快閃記憶體擦除的最小單位, 每64或128頁即為一個擦除塊,因為頁大小會有不同,擦除塊也就不同。一顆晶片裡有多少擦除塊,是依快閃記憶體的大小而定,但通常是2的冪次方。 NAND結構: 2D SLC 1單元1bit2狀態 MLC 1單元2bit4狀態 TLC 1單元3bit8狀態 3D還沒好 |製成結構|單層單元(SLC)|多層單元(MLC)|三層單元(TLC)|四層儲存單元(QLC) |-|-|-|-|-| |每晶體儲存單位|1 位元|2 位元|3 位元|4位元 |寫入速度|200–300微秒每頁|600 - 900微秒|每頁|900–1350微秒每頁 |讀取速度|25微秒每頁|50微秒每頁|75微秒每頁 |擦除速度|1.5~2微秒每擦除塊|3微秒每擦除塊|4.5微秒每擦除塊 |使用壽命|5萬到10萬次寫入|3千到1萬次寫入|五百到1千次寫入 ## FFS2 最早 ## JFFS2 JFFS2是專為小型快閃記憶體設計的快閃記憶體檔案系統。可以使用在NOR或NAND快閃記憶體上,僅在SLC架構中使用,含有多種壓縮模式可以選用。此設計的檔案系統基本結構之儲存最小單位為一節點,每個節點都包含檔案資訊;屬於同一檔案的節點,則可以指向同一檔案的節點位置,也增加意外斷電時,可找回數據資料的可能性。在JFFS2寫入操作時,會立即寫入快閃記憶體,藉由主記憶體結構更新節點位置,加快讀取速度。因為並無目錄紀錄檔案位置,在掛載時需要掃描整個快閃記憶體,隨著儲存空間的增大,掛載時間也隨之增加。 [原始論文](https://www.kernel.org/doc/mirror/ols2001/jffs2.pdf) ISO690 WOODHOUSE, David. JFFS: The journalling flash file system. In: Ottawa linux symposium. 2001. https://baike.baidu.com/item/jffs2 ![](https://i.imgur.com/0W9401e.png) 下一代是UBIFS與LogFS ### UBIFS ![](https://i.imgur.com/SLvd5Az.png) ## YAFFS Yet Another Flash File System 屬於Log-structured file systems 有YAFFS與YAFFS2 YAFFS2可支援到2K per page, 遠高於YAFFS的512 bytes, 因此對大容量NAND Flash更具優勢 Yaffs1 is a simpler mode of operation that uses deletion markers to track state. ● Yaffs2 is a more complex mode of operating that was developed to support larger flash types that cannot used deletion markers. ● Yaffs means operations common to both. YAFFS採用Tree Node Structure, 由多個Tree Node(Tnode)所組成, Tnode又分成Internal Tnode與Lowest-Level Tnode, 其中Internal Tnode由8個Pointers所組成, Lowest-Level Tnode由16個Entries所組成, 其時間複雜度(Time Complexity)相當於O(log N), 故位址轉換時間較迅速。 官網介紹 https://archive.is/1WjyJ https://web.archive.org/web/20071006090305/http://www.yaffs.net/ 配合NAND記憶體特性開發的檔案系統 從MTD(記憶體裝置)得到的NAND頁大小而分配chunk大小,每chunk就是一頁 16~20頁 >學長的論文有JFFS2跟YAFFS2跟UBIFS的比較 Yaffs1 uses deletion markers, which breaks the sequential write rule. Yaffs2 does not use deletion markers 識別符號為YAFFS2判別檔案型別如目錄、文件等等。 父節點編號為記錄上層節點編號,通常是目錄節點;若是根目錄則為0 名字為檔案名稱可存放255位元組。 重規劃檔案大小是由於配合快閃記憶體檔案系統運作出現的,由於一份檔案的元資料只會出現在Chunk為0的節點,所以若是有檔案原來為10M的資料改變其中5M的資料只寫入3M時,會有2M的資料空洞產生。此時就需要加以記錄改變後的大小與記錄符號連接,而不使檔案資料遺失。 檔案識別符號為虛擬檔案系統辨別檔案的型別、創建時間、修改時間等等。 檔案大小則為此檔案的資料量,由於只有一個元資料,這也表示提取多少Chunk有此元資料決定。 最後是硬連接與符號連接 ### UBIFS https://zh.wikipedia.org/wiki/UBIFS UBI相當於UBIFS的FTL 作用是實現垃圾回收 ## exFAT 由FAT32演變 https://zh.wikipedia.org/wiki/ExFAT https://blog.gtwang.org/windows/ntfs-vs-fat-exfat-file-system/ https://baike.baidu.com/item/exFAT 为了解决FAT32等不支持4G及其更大的文件而推出。对于闪存,NTFS文件系统不适合使用,exFAT更为适用。对于磁盘则不太适用 與其他FS比較表 https://www.eassos.cn/jiao-cheng/ying-pan/file-system.php FAT兩大限制: 1、FAT分区中的单个文件不能大于4G;2、通常FAT分区的容量不能大于32G,否则效率会很低 https://en.wikipedia.org/wiki/ExFAT#Flash_optimizations exFAT contains a few features that, according to Microsoft, makes it flash-friendly: - Boundary alignment for filesystem structures. The offsets for the FAT and the cluster heap is adjustable at format-time, so that writes to these areas will happen in as few flash blocks as possible. - An "OEM Parameters" field can be used to record features such as block size of the underlying storage.[37] - The lack of a journal, so that less data are written http://jay-fva.blogspot.com/2011/11/exfat.html exFAT原本設計的目的是在FAT32與NTFS之 間取得一個折衷,有FAT32的輕便、不需要耗損太多的效能及記憶體來處理檔案運作,又有類似NTFS的CAL存取控制機制(很可惜在SP1下找不到 exFAT對於CAL的支援),以及類似HPFS系統可快速整理可用叢集空間的Free Space Bitmap,來將檔案破碎的情況盡量減少。 >exFAT用大cluster >大cluster浪費空間 | 1|JFFS2|YAFFS2|UBIFS |-|-|-|-| |壓縮功能|支持|不支持|支持| |快閃記憶體類別|NOR、NAND|NAND|NOR、NAND |快閃記憶體結構|2D-SLC|2D-SLC、2D-MLC|2D-SLC、2D-MLC |檔案大小|最大4 GByte|最大512GByte|最大2048GByte |最大檔名|254 Byte|255 Byte|255 Byte |寫入動作|同步|同步|同步、回寫 ||JFFS2| YAFFS2| UBIFS| |-|-|-|-| |掛載時間|每512MiB增加1.8秒|每512MiB增加0.2秒|3秒 |卸載時間|最慢不超過0.01秒|0.0003秒|0.05秒 |寫入|2.7MiB/s|2.8MiB/s|3.1MiB/s |讀取|1.8MiB/s|3.5MiB/s|2.4MiB/s |垃圾回收|空間有效利用|時間不會增加|實際不由檔案系統控制 2010年1月15日,Google宣布將他們公司使用的檔案系統,由ext2,升級為ext4。在同年12月14日,Google也宣布他們將在Android 2.3版中,使用ext4來取代之前的YAFFS。 --- 網頁list zh.wikipedia.org/wiki/闪存#快閃記憶體檔案系統 zh.wikipedia.org/wiki/快閃記憶體檔案系統 en.wikipedia.org/wiki/Flash_file_system https://zh.wikipedia.org/wiki/MTD www.linux-mtd.infradead.org/faq/general.html#L_ext2_mtd mark-shih.blogspot.com/2012/10/mtd-devmtddevmtdblok.html en.wikipedia.org/wiki/Flash_file_system zh.wikipedia.org/wiki/Ext4 en.wikipedia.org/wiki/ExFAT#Flash_optimizations zh.wikipedia.org/wiki/F2FS zh.wikipedia.org/wiki/UBIFS baike.baidu.com/item/exFAT eassos.cn/jiao-cheng/ying-pan/file-system.php zh.wikipedia.org/wiki/YAFFS#YAFFS2 archive.is/rpCEN yaffs.net/yaffs-overview yaffs.net/yaffs-2-specification https://yaffs.net/sites/yaffs.net/files/HowYaffsWorks.pdf ethesis.nitrkl.ac.in/6534/2/E-3.pdf