F2FS文件系统一 设计背景及框架结构
一、F2FS文件系統簡介
1、背景:
F2FS (Flash Friendly File System)?是專門為基于?NAND?的存儲設備設計的新型開源?flash?文件系統。
特別針對NAND?閃存存儲介質做了友好設計。F2FS?于2012年12月進入Linux 3.8?內核。目前,F2FS僅支
持Linux操作系統。
2、解決的問題:
(1)LFS(Log-strctured File System)
為管理磁盤上的大的連續的空間以便快速寫入數據,將?log?切分成?Segments,使用?Segment Cleaner?
從重度碎片化的?Segment?中轉移出有效的信息,然后將該?Segment?清理干凈用于后續寫入數據。
(2)wandering tree?的滾雪球效應
在?LFS?中,當文件的數據塊被更新的時候是寫到?log?的末尾,該數據塊的直接指針也因為數據位置的改
變而更改,然后間接指針塊也因為直接指針塊的更新而更新。按照這種方式,上層的索引結構,如inode、inode
map?以及?checkpoint block?也會遞歸地更新。這就是所謂的?wandering tree?問題。為了提高性能,數據塊更新
的時候應該盡可能地消除或減少wandering tree?的更新節點傳播。
二、F2FS layout:
F2FS?將整個卷切分成大量的?Segments,每個?Segment?的大小是固定的2 MB。連續的若干個Segments?
構成?Section,連續的若干個?Sections?構成?Zone。默認情況下一個?Zone?大的大小是一個?Section,而一個?
Section?的大小是一個?Segment。F2FS?將整個卷切分成6個區域,除了超級塊(Superblock,SB)外,其余每個
區域都包含多個Segments。其結構如下圖所示:
三、各個結構介紹(Block/Segments......):
可以參考kernel-4.9\Documentation\filesystems\f2fs.txt
1、Blocks:F2FS文件系統的所有塊大小都是4KB;
2、Segments:
連續的Blocks集合成Segments,一個Segment的大小是512個Blocks(2MB),每個Segment都有一個
Segment Summary Block元數據結構,描述了Segment?中的每個Block的所有者(該塊所屬的文件及塊
在文件內的偏移)。Segment Summary主要用于在執行Cleaning操作時識別哪些Blocks中的數據需要轉
移到新的位置,以及在轉移之后如何更新Blocks的索引信息。一個Block就可以完全存儲512個Blocks的
summary信息,每個blocks都有一個1 bit的額外空間用于其它目的。
3、Superblock (SB):
It is located at the beginning of the partition, and there exist two copiesto avoid file system crash. It contains basic partition information and somedefault parameters of f2fs與其他文件系統不同,F2FS?清晰地區分出傳統超級塊中的只讀部分(Superblock,SB)和可修改部分
(Checkpoint,CP),存放在兩個單獨的數據結構(BP?和?CP)中。
F2FS?的?f2fs_super_block?存儲在設備的第二個塊中,僅包含只讀數據,稱為超級塊?Superblock (SB)?。
一旦文件系統創建,SB?的信息就不會再改變,SB?描述了文件系統有多大、Segment?有多大、Section有多大、
Zone?有多大以及分配了多少空間給各個部分的“元數據”區域以及其他少量的細節信息。
SB?位于文件系統分區的開頭,有兩個備份以避免文件系統?crash?無法恢復的情況發生。它包含基本的分區
信息和默認的?F2FS?參數。
?
4、Checkpoint (CP):
It contains file system information, bitmaps for valid NAT/SIT sets, orphaninode lists, and summary entries of current active segments.文件系統超級塊中的可寫信息,如空閑空間總量、下一個將要寫入數據的Segment的地址以及其他可更改
信息存儲在?f2fs_checkpoint?中,稱為?Checkpoint (CP)。“Checkpoint”是一種元數據類型,允許使用兩個位置
(two-location)方法實現?copy-on-write——有兩個相鄰的?Segments,每個都存儲一個?Checkpoint,但僅有一個
是當前有效使用的。Checkpoint?包含一個版本號,因而當文件系統掛載的時候,兩個Checkpoint?都被讀取,但
是使用的是僅有較高的版本號的Checkpoint?作為有效使用的Checkpoint。
?
5、Segment Information Table (SIT):
It contains segment information such as valid block count and bitmap for thevalidity of all the blocks.SIT?為每個?Segment?存儲74字節的信息且與?Segment Summaries?分離,因為它修改的頻率更高。它主要
用來跟蹤哪些數據塊仍然是有效的(有效塊個數以及數據塊有效性?bitmap),因而當?Segment?中無有效塊時,就
可以回收該?Segment,或者當該?Segment?中有效數據塊很少的時候進行?clean?操作。
?
6、Node Address Table (NAT)
It contains summary entries which contains the owner information of all thedata and node blocks stored in Main area.?
7、Main Area
It contains file and directory data including their indices.8、At runtime, F2FS manages six active logs inside "Main" area: Hot/Warm/Cold node
and Hot/Warm/Cold data:
?
作者:frank_zyp
您的支持是對博主最大的鼓勵,感謝您的認真閱讀。
本文無所謂版權,歡迎轉載。
總結
以上是生活随笔為你收集整理的F2FS文件系统一 设计背景及框架结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python catia 接口_CATI
- 下一篇: 工程师应用计算机考试题型,IE工程师考试