您现在的位置:首页 > >

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.9Documentationfilesystemsf2fs.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 copies
to avoid file system crash. It contains basic partition information and some
default 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, orphan
inode 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 the
validity 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 the
data 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:


- Hot node contains direct node blocks of directories.
- Warm node contains direct node blocks except hot node blocks.
- Cold node contains indirect node blocks
- Hot data contains dentry blocks
- Warm data contains data blocks except hot and cold data blocks
- Cold data contains multimedia data or migrated data blocks

?


作者:frank_zyp
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。


热文推荐
猜你喜欢
友情链接: