F2FS Tools 场景视图

fsck 检查修复

入口:fsck/main.c:main()

功能 入口函数 文件
挂载和元数据构建 f2fs_do_mount() fsck/mount.c
fsck 初始化 fsck_init() fsck/fsck.c
元数据检查 fsck_chk_meta()fsck_chk_checkpoint() fsck/fsck.c
quota 检查 fsck_chk_quota_node()fsck_chk_quota_files() fsck/fsck.c
orphan inode 检查 fsck_chk_orphan_node() fsck/fsck.c
递归文件检查 fsck_chk_node_blk()fsck_chk_inode_blk()fsck_chk_dnode_blk()fsck_chk_data_blk()fsck_chk_dentry_blk() fsck/fsck.c
去重修复 f2fs_fix_dedup_inner_list() fsck/dedup.c
一致性验证 fsck_verify() fsck/fsck.c
DMD 上报 DmdReport() lib/libf2fs_dmd.c
时间统计 fsck_time_print_stat()fsck_time_report_to_dmd() fsck/fsck_time.c
日志 SlogInit()/SlogExit()/SlogWrite() lib/libf2fs_log.c
额外标志检查 CheckExtraFlag()ClearExtraFlag() lib/extra_fsck.c
调试辅助 dump_sbi_info()hex_info_dump()dump_bitmap_diff() tools/debug_tools/fsck_debug.c

时间阶段:MOUNT、BUILD_NAT、BUILD_SIT、FSCK_INIT、CHK_META、CHK_QUOTA、CHK_ORPHAN_NODE、CHK_FULL_FILE、FIX_DEDUP、FSCK_VERIFY、NODE_XATTR

DMD 上报

入口:lib/libf2fs_dmd.c

功能 入口函数
错误插入 DmdInsertError()SetErrBitmap()g_dmdErrorStore[](最多64条)
字段设置 DMD_SET_VALUE(field, value)
耗时检查 DmdCheckCostTime()
HVB 状态读取 ReadDeviceState() → 读取 /proc/cmdline 检查 locked
上报写入 DmdReport()FillReportMsg() → ioctl /dev/storage

关键文件:include/f2fs_dmd.hinclude/f2fs_dmd_errno.hinclude/f2fs_dmd_cfg.hinclude/f2fs_ext.hlib/libf2fs_dmd.c

仅在设备端生效,主机编译时宏定义为空操作。

去重(Dedup)检查

入口:fsck/dedup.c

功能 入口函数
去重 inode 识别 f2fs_is_deduped_inode()f2fs_is_inner_inode()
内部 inode 校验 f2fs_sanity_check_dedup_inner_nid()
数据块地址检查 check_dedup_data_blkaddr()
链表修复 f2fs_fix_dedup_inner_list() → 遍历 dedup_inner_list_head

标志位:F2FS_DEDUPED_FLF2FS_INNER_FLF2FS_REVOKE_FLF2FS_DOING_DEDUP_FL

时间统计

入口:fsck/fsck_time.c

功能 入口函数
开始计时 TIME_TAG_POINT_START(PHASE)fsck_time_start_phase()
结束计时 TIME_TAG_POINT_END(PHASE)fsck_time_end_phase()
自动结束 TIME_TAG_POINT_WITH_END(PHASE)(cleanup属性)
统计输出 fsck_time_print_stat()fsck_time_report_to_dmd()

仅在设备端生效,主机编译时宏定义为空操作。

额外 FSCK 标志

入口:lib/extra_fsck.c

功能 入口函数
标志检查 CheckExtraFlag() → 读取 CP 最后一块,若置位则 c.fix_on=1 并 DMD 上报
标志清除 ClearExtraFlag() → 清除 needFsck → dev_write_block()f2fs_fsync_device()

标志值:EXTRA_NEED_FSCK_FLAG = 0x4653434B ("FSCK" ASCII)

mkfs 格式化

入口:mkfs/f2fs_format_main.c:main()

功能 入口函数 文件
格式化 f2fs_format_device() mkfs/f2fs_format.c
写入区域 工具函数 mkfs/f2fs_format_utils.c

日志系统

入口:lib/libf2fs_log.c

功能 入口函数
初始化 SlogInit(funcType) → 选择日志文件名、创建目录、写入时间戳头
文件日志 SlogWrite() → 格式化、检查大小(256KB)、写入
内核日志 KlogWrite() → writev /dev/kmsg
退出 SlogExit() → fsync、ftruncate、close

关键文件:include/f2fs_log.hinclude/f2fs_dfx_common.hlib/libf2fs_log.c