转自:https://blog.csdn.net/frank_zyp/article/details/96426334
一、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
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。