解决问题1:F2FS的目录结构理解
F2FS使用到文件哈希是分层的。
每个block有214个目录槽。一个目录槽最多存1个文件夹信息。
第一层就一个哈希桶,一个哈希桶有2个blocks,每个block有214个目录槽。每个目录槽最大存一个目录信息。
第二层有1<<1(即2)个哈希桶,每个哈希桶2个blocks
第三层有1<<2(即4)个哈希桶,每个哈希桶2个blocks
.
.
.
第31层共1<<31(即2到31次方)个哈希桶,每个哈希桶2个blocks
第32层共1<<31(即2到31次方)个哈希桶,每个哈希桶4个blocks
.
.
当层数小于31时:
一个哈希桶有2个blocks,即8k大小。
当层数大于31时:
一个哈希桶有4个blocks,即16k大小。
哈希值通过类是EXT3文件系统到算法,得到哈希值后对没层到哈希桶数求余数,计算在该层到哪个哈希桶。
解决问题2:为什么文件名大小只有8字节,怎么存下大文件名?
目录结构体:
struct f2fs_dentry_block {
__u8 dentry_bitmap[SIZE_OF_DENTRY_BITMAP];
__u8 reserved[SIZE_OF_RESERVED];
struct f2fs_dir_entry dentry[NR_DENTRY_IN_BLOCK];
__u8 filename[NR_DENTRY_IN_BLOCK][F2FS_NAME_LEN];
} __packed;
struct f2fs_dir_entry {
__le32 hash_code; /* hash code

本文详细解析了F2FS文件系统的目录结构,解释了每个block的目录槽数量和哈希桶的工作原理。同时,针对文件名大小限制问题,介绍了F2FS如何通过多个目录槽存储长文件名,以实现快速的bitmap扫描,尽管这会牺牲一些空间效率。
最低0.47元/天 解锁文章
4423

被折叠的 条评论
为什么被折叠?



