fbpx
维基百科

F2FS

F2FS(英語:Flash-Friendly File System)是一種快閃記憶體檔案系統,主要由金載極(韓語:김재극)在三星集团研發,适合Linux内核使用[3]

F2FS
开发者三星电子摩托罗拉移动华为
全称Flash-Friendly File System
发布2012-12-20[1] (Linux内核 3.8[2])
结构
目录内容多级哈希表
文件分配位图(可用空间)、表
限制
最大文件尺寸3.94TB
最大文件数量取决于卷大小
最长文件名255字节
最大卷容量16TB
功能
日期记录修改 (mtime), 属性修改 (ctime), 访问 (atime)
日期分辨率1 ns
属性POSIX、扩展属性
文件系统权限POSIX、ACL
透明压缩
透明加密
操作系统支持Linux

此檔案系統起初是為了NAND闪存的存储设备設計(诸如固态硬盘eMMCSD卡),这些设备广泛存在于自移动设备服务器领域。

三星應用了日誌結構檔案系統的概念,使它更適合用於儲存設備。

特性 编辑

  • 多头日志(Multi-head logging)
  • 对目录项的多层哈希表
  • 静态/动态冷热数据分离
  • 自适应记录方案
  • 可配置操作单元
  • 双检查点
  • 回滚和前滚恢复
  • Heap-style块分配
  • TRIM/FITRIM支持[4]
  • 联机的文件系统/文件碎片整理英语defragmentation[5]
  • 内联xattrs[6]/数据[7]/目录[8]
  • 脱机文件系统检查英语Fsck(检查和修复不一致)[9])
  • 线性一致性[10]
  • 文件系统级加密英语Filesystem-level encryption[11]
  • 脱机调整大小[12]
  • 内部定期数据刷新[13]
  • 范围缓存[14]

设计 编辑

磁盘上布局 编辑

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

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

超级块(Superblock,SB)
超级块位于分区起始处,共有两个副本以避免文件系统损坏。它包含基本的分区信息和一些默认的F2FS参数。
检查点(Checkpoint,CP)
检查点包含文件系统信息,有效NAT/SIT集的位图,孤立inode列表,以及当前活动段的摘要条目。
段信息表(SIT)
段信息表包含主区域块的有效块数量和有效位图。
节点地址表(NAT)
节点信息表主区域节点块的地址表。
段摘要区(SSA)
段摘要区包含的条目包含主区域数据和节点块的所有者信息。
主区域(Main Area)
主区域包含文件和目录数据及其索引(indices)。

为了避免文件系统与闪存之间的对齐错误,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个字节,由以下属性组成。

目录条目结构
hash 文件名的散列值
ino Inode号码
len 文件名长度
type 文件类型,如目录、符号链接等。

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

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

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

A表示桶(bucket)
B表示块(block)
N表示目录散列最大深度(MAX_DIR_HASH_DEPTH)
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管理了一个位图,其中用一个位元表示一个块的有效性,覆盖主区域所有块的位元流组成了该位图。

相關條目 编辑

參考資料 编辑

  1. ^ Michael Larabel. F2FS File-System Merged Into Linux 3.8 Kernel. Phoronix. 2012-12-22 [2016-05-25]. (原始内容于2016-06-30). 
  2. ^ Pull new F2FS filesystem from Jaegeuk Kim (页面存档备份,存于互联网档案馆) merged by Linus Torvalds
  3. ^ f2fs: introduce flash-friendly file system (页面存档备份,存于互联网档案馆) by Kim Jaegeuk
  4. ^ Jaegeuk Kim. . 2014-09-22 [2018-06-02]. (原始内容存档于2016-03-15). [需要較佳来源]
  5. ^ Chao Yu. . 2015-10-26 [2018-06-02]. (原始内容存档于2018-01-26). 
  6. ^ Jaegeuk Kim. . 2013-08-26 [2018-06-02]. (原始内容存档于2018-01-26). 
  7. ^ Huajun Li. . 2013-11-10 [2018-06-02]. (原始内容存档于2018-01-26). 
  8. ^ Chao Yu. . 2014-09-24 [2018-06-02]. (原始内容存档于2018-01-25). 
  9. ^ Jaegeuk Kim. . 2014-09-20 [2018-06-02]. (原始内容存档于2018-01-26). 
  10. ^ Jaegeuk Kim. . 2014-09-25 [2018-06-02]. (原始内容存档于2020-06-02). 
  11. ^ Jaegeuk Kim. . 2015-06-24 [2018-06-02]. (原始内容存档于2016-01-17). 
  12. ^ Jaegeuk Kim. . 2016-04-25 [2018-06-02]. (原始内容存档于2018-01-26). 
  13. ^ Chao Yu. . 2015-12-17 [2018-06-02]. (原始内容存档于2018-01-25). 
  14. ^ Chao Yu. . 2015-01-25 [2018-06-02]. (原始内容存档于2018-01-25). 

外部链接 编辑

f2fs, 此條目需要擴充关于产品应用的内容, 2018年12月12日, 请協助改善, 更進一步的信息可能會在討論頁或扩充请求中找到, 请在擴充條目後將此模板移除, 此條目需要精通或熟悉相关主题的编者参与及协助编辑, 請邀請適合的人士改善本条目, 更多的細節與詳情請參见討論頁, 英語, flash, friendly, file, system, 是一種快閃記憶體檔案系統, 主要由金載極, 韓語, 김재극, 在三星集团研發, 适合linux内核使用, 开发者三星电子, 摩托罗拉移动和华为全称flash, frien. 此條目需要擴充关于产品应用的内容 2018年12月12日 请協助改善 更進一步的信息可能會在討論頁或扩充请求中找到 请在擴充條目後將此模板移除 此條目需要精通或熟悉相关主题的编者参与及协助编辑 請邀請適合的人士改善本条目 更多的細節與詳情請參见討論頁 F2FS 英語 Flash Friendly File System 是一種快閃記憶體檔案系統 主要由金載極 韓語 김재극 在三星集团研發 适合Linux内核使用 3 F2FS开发者三星电子 摩托罗拉移动和华为全称Flash Friendly File System发布2012 12 20 1 Linux内核 3 8 2 结构目录内容多级哈希表文件分配位图 可用空间 表限制最大文件尺寸3 94TB最大文件数量取决于卷大小最长文件名255字节最大卷容量16TB功能日期记录修改 mtime 属性修改 ctime 访问 atime 日期分辨率1 ns属性POSIX 扩展属性文件系统权限POSIX ACL透明压缩否透明加密是操作系统支持Linux此檔案系統起初是為了NAND闪存的存储设备設計 诸如固态硬盘 eMMC和SD卡 这些设备广泛存在于自移动设备至服务器领域 三星應用了日誌結構檔案系統的概念 使它更適合用於儲存設備 目录 1 特性 2 设计 2 1 磁盘上布局 2 2 元数据结构 2 3 索引结构 2 4 目录结构 2 5 默认的块分配 2 6 清理流程 3 相關條目 4 參考資料 5 外部链接特性 编辑多头日志 Multi head logging 对目录项的多层哈希表 静态 动态冷热数据分离 自适应记录方案 可配置操作单元 双检查点 回滚和前滚恢复 Heap style块分配 TRIM FITRIM支持 4 联机的文件系统 文件碎片整理 英语 defragmentation 5 内联xattrs 6 数据 7 目录 8 脱机文件系统检查 英语 Fsck 检查和修复不一致 9 线性一致性 10 文件系统级加密 英语 Filesystem level encryption 11 脱机调整大小 12 内部定期数据刷新 13 范围缓存 14 设计 编辑此章節需要提供更多來源 否則內容可能無法查證 磁盘上布局 编辑 F2FS将整个卷分成多个段 segment 每个段固定为2 MB 一个节 section 由连续的段组成 一个区 zone 由一组节组成 默认情况下 节与区被设置为相同的大小 但用户可以用mkfs轻松修改大小 F2FS将整个卷划分为六个区域 除了超级块 superblock 以外的所有区都由多个段组成 如下所述 超级块 Superblock SB 超级块位于分区起始处 共有两个副本以避免文件系统损坏 它包含基本的分区信息和一些默认的F2FS参数 检查点 Checkpoint CP 检查点包含文件系统信息 有效NAT SIT集的位图 孤立inode列表 以及当前活动段的摘要条目 段信息表 SIT 段信息表包含主区域块的有效块数量和有效位图 节点地址表 NAT 节点信息表主区域节点块的地址表 段摘要区 SSA 段摘要区包含的条目包含主区域数据和节点块的所有者信息 主区域 Main Area 主区域包含文件和目录数据及其索引 indices 为了避免文件系统与闪存之间的对齐错误 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个字节 由以下属性组成 目录条目结构 hash 文件名的散列值ino Inode号码len 文件名长度type 文件类型 如目录 符号链接等 一个目录条目块由 查证请求 及文件名组成 有一个位图用于记录每个目录条目是否有效 一个目录条目块占用4 KB 结构如下 目录条目块 4 K 位图 27 字节 保留 3 字节 目录项 11 214 字节 文件名 8 214 字节 F2FS为目录结构实现了多级散列表 每一级有一个包含专用散列桶数的散列表 如下所示 A 2B 表示桶包含2个数据块 项 A表示桶 bucket B表示块 block N表示目录散列最大深度 MAX DIR HASH DEPTH 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管理了一个位图 其中用一个位元表示一个块的有效性 覆盖主区域所有块的位元流组成了该位图 相關條目 编辑文件系统的对比 文件系统列表參考資料 编辑 Michael Larabel F2FS File System Merged Into Linux 3 8 Kernel Phoronix 2012 12 22 2016 05 25 原始内容存档于2016 06 30 Pull new F2FS filesystem from Jaegeuk Kim 页面存档备份 存于互联网档案馆 merged by Linus Torvalds f2fs introduce flash friendly file system 页面存档备份 存于互联网档案馆 by Kim Jaegeuk Jaegeuk Kim f2fs introduce FITRIM in f2fs ioctl 2014 09 22 2018 06 02 原始内容存档于2016 03 15 需要較佳来源 Chao Yu f2fs support file defragment 2015 10 26 2018 06 02 原始内容存档于2018 01 26 Jaegeuk Kim f2fs add flags for inline xattrs 2013 08 26 2018 06 02 原始内容存档于2018 01 26 Huajun Li f2fs Enable f2fs support inline data 2013 11 10 2018 06 02 原始内容存档于2018 01 26 Chao Yu f2fs support inline dir 2014 09 24 2018 06 02 原始内容存档于2018 01 25 Jaegeuk Kim f2fs tools release 1 4 0 2014 09 20 2018 06 02 原始内容存档于2018 01 26 Jaegeuk Kim f2fs support atomic write feature for database 2014 09 25 2018 06 02 原始内容存档于2020 06 02 Jaegeuk Kim f2fs updates for v4 2 2015 06 24 2018 06 02 原始内容存档于2016 01 17 Jaegeuk Kim resize f2fs support to expand partition size 2016 04 25 2018 06 02 原始内容存档于2018 01 26 Chao Yu f2fs support data flush in background 2015 12 17 2018 06 02 原始内容存档于2018 01 25 Chao Yu f2fs enable rb tree extent cache 2015 01 25 2018 06 02 原始内容存档于2018 01 25 外部链接 编辑F2FS文档于kernel org 页面存档备份 存于互联网档案馆 英文 取自 https zh wikipedia org w index php title F2FS amp oldid 63111944, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。