F2FS

✍ dations ◷ 2025-06-08 07:27:37 #快闪存储器档案系统,嵌入式Linux,Linux档案系统

F2FS(英语:Flash-Friendly File System)是一种闪存文件系统,主要由金载极(韩语:김재극)在三星集团研发,适合Linux内核使用。

此文件系统起初是为了NAND闪存的存储设备设计(诸如固态硬盘、eMMC和SD卡),这些设备广泛存在于自移动设备至服务器领域。

三星应用了日志结构文件系统的概念,使它更适合用于存储设备。

F2FS将整个卷分成多个段(segment),每个段固定为2 MB。一个节(section)由连续的段组成,一个区(zone)由一组节组成。默认情况下,节与区被设置为相同的大小,但用户可以用mkfs轻松修改大小。

F2FS将整个卷划分为六个区域,除了超级块(superblock)以外的所有区都由多个段组成,如下所述。

为了避免文件系统与闪存之间的对齐错误,F2FS将CP的起始块地址与段大小对齐。它还通过在SSA区域中预留一些段来将“主区”起始块地址与区的大小对齐。

F2FS使用检查点方案来维护文件系统的完整性。在挂载时,F2FS首先尝试扫描CP区域来查找最后的有效检查点数据。为了缩短扫描时间,F2FS只使用CP的两个副本。其中一个总是指示最后的有效数据,这被称为影子副本机制。除了CP之外,NAT和SIT也使用影子副本机制。为了保证文件系统的一致性,每个CP指向的NAT和SIT副本都是有效的。

关键的数据结构是“节点”。与传统的文件结构类似,F2FS有三种类型的节点:inode,直接节点,间接节点。F2FS将4 KB分配给一个inode块,其中包含923个数据块索引(data block indices),两个直接节点指针,两个间接节点指针,以及一个double间接节点指针,如下所述。一个直接节点块包含1018个数据块索引,而间接节点块包含1018个节点块索引。因此,一个inode块(即一个文件)涵盖:

4 KB × (923 + 2×1018 + 2×10182 + 10183) = 3.94 TB

注意,所有节点块都经NAT映射,因此每个节点的位置都经NAT转换。为了缓解漫游树问题,F2FS能够切断叶数据写入引起的节点更新传播。

一个目录条目(dentry)占用11个字节,由以下属性组成。

一个目录条目块由214个目录条目槽及文件名组成。有一个位图用于记录每个目录条目是否有效。一个目录条目块占用4 KB,结构如下:

目录条目块 (4 K) = 位图 (27 字节) + 保留 (3 字节) +                      目录项 (11 * 214 字节) + 文件名 (8 * 214 字节)

F2FS为目录结构实现了多级散列表,每一级有一个包含专用散列桶数的散列表,如下所示。“A(2B)”表示桶包含2个数据块。

level #0    A(2B)level #1    A(2B) - A(2B)level #2    A(2B) - A(2B) - A(2B) - A(2B)    ...level #N/2  A(2B) - A(2B) - A(2B) - A(2B) - A(2B) - ... - A(2B)    ...level #N    A(4B) - A(4B) - A(4B) - A(4B) - A(4B) - ... - A(4B)

当F2FS在一个目录中找一个文件名时,首先计算出该文件名的散列值,然后F2FS扫描级别#0的散列表一查找由文件名及其inode编号组成的目录条目。如果未找到,F2FS继续查找级别#1的散列表。F2FS通过此方法逐级扫描由1至N的每层散列表。在每一层中,F2FS只需扫描由以下等式确定的一个桶(bucket),因此展现出 O(log(# of files)) 的复杂度。

 级别#n中要扫描的桶(bucket)数 = (散列值) % (级别#n中的桶数)

在创建文件时,F2FS找到一个能涵盖文件名的空的连续槽。F2FS以同样的方式由1至N查找各级散列表中的空槽。

在运行时,F2FS在“主要区域:”内管理六个活动日志:热/暖/冷节点和热/暖/冷数据。

基于日志的文件系统(LFS)有两种空闲空间管理方案:穿插记录(threaded log)与复制并压缩(copy-and-compaction)。后者也称为清理(cleaning),很适合有良好顺序写入性能的设备,因为空闲空间总用于写入新数据。但它会在发生高利用率时遭遇“清理”的开销。穿插记录则受到随机写入性能的影响,但没有“清理”过程。F2FS采用混合方案,默认采用“复制并压缩”,但根据文件系统的状态将策略动态变更为“穿插记录”方案。

为使F2FS与基于闪存的存储保持一致,F2FS以一个节(section)为单位分配一个段(segment)。F2FS预期节的大小与FTL中的垃圾收集单元大小相同。为考虑FTL中的映射粒度,F2FS将活动日志的每个节分配给尽可能多的不同区域。 FTL可以根据其映射粒度将活动日志数据写入一个分配单元。

F2FS在需要时和后台闲置时进行清理。按需清理在没有足够的空闲分段(segments)服务VFS调用时触发。后台清理器由一个内核线程执行,在系统空闲时触发清理作业。

F2FS支持两种受者选择策略:贪婪、成本效益算法。在贪心算法中,F2FS选择有最小有效块数的受者段。在成本效益算法中,F2FS根据段的年龄和有效块数量选择受者段,以解决贪心算法中存在的日志块抖动问题。F2FS使用贪心算法进行按需清理,后台清理器则使用成本效益算法。

为识别受者段中的数据是否有效,F2FS管理了一个位图,其中用一个比特表示一个块的有效性,覆盖主区域所有块的比特流组成了该位图。

相关

  • 锋面雨'锋面雨泛指各种锋面通过一个地区后带来的降雨。又称气旋雨、梅雨。冷暖性质不同的气团相遇,形成锋面,暖空气沿着锋面上升,凝结至雨,通常雨时长,雨区大,雨势不一定冷锋的降雨原理:
  • 拟亲属关系拟亲属关系是以亲属的称谓称呼没有血缘关系的人,以及把他们当作亲属般对待的人际关系。建立这种关系的人称为拟亲属。大部分人类学者观察到拟亲属关系担当着协助或介入传统亲
  • 安全色安全色是用以表达安全信息的颜色。用不同的颜色表示不同的安全度,红、黄、蓝、绿、白等颜色是一般常用的安全色。国际标准化组织(ISO)和很多国家都对安全色的使用有严格规定
  • 虾蟆螈虾蟆螈(学名:Mastodonsaurus)也称虾膜龙,是一种古两栖动物,为一种大型迷齿类动物,体长可达4-5米以上。头部巨大、扁平,呈三角形。生活在水中。化石发现在欧洲的三叠纪地层中。
  • 环太平洋大学联盟环太平洋大学协会(Association of Pacific Rim Universities;APRU),或称环太平洋大学联盟,创立于1997年,是由环太平洋地区各国一流的研究型大学所组成的联盟。联盟的宗旨是“发展(
  • 马哈茂德·艾哈迈迪-内贾德马哈茂德·艾哈迈迪-内贾德(波斯语:محمود احمدی‌نژاد‎,转写:Mahmūd Ahmadinezhād,发音:  ( 发音),1956年10月28日-)是伊朗第6任总统,同时是伊朗保守派政治联盟伊斯
  • 硝酸铋硝酸铋是一种无机化合物,为无色或白色有硝酸气味的固体,易潮解,其分子式为Bi(NO3)3·5H2O,不含结晶水的硝酸铋尚未制得。五水合硝酸铋的晶体中的BiIII为三个二齿配体NO3−和3个H
  • 鹿儿岛湾鹿儿岛湾,别名锦江湾(きんこうわん),是鹿儿岛县萨摩半岛与大隅半岛间的海湾。面积1130平方公里,南北长约80km、东西宽约20km。可分为湾奥、湾中央部、湾口部三部分。坐标:31°28′
  • 贵翔WEGA (中国翻译品牌名称为贵翔) ,是日本索尼于1997推出电视机品牌。WEGA的名称是来自天空中闪亮的织女星(Vega)而来。WEGA电视同样采用索尼最引以自傲的。「特丽珑」(Trinitron)
  • 裁缝裁缝,指制作、修补衣服的人。裁剪缝纫制造衣服。中国古代敬为祖师爷。1896年,江良通开设中国第一家西服店。1911年,红帮裁缝“荣昌祥”曾经为孙中山缝制第一套中山装。英国伦敦