f2fs中有3个特殊的文件,其inode号分别为1、2、3。

set_sb(node_ino, 1);
set_sb(meta_ino, 2);
set_sb(root_ino, 3);

node_inode

盘上除了数据外,还有node。文件系统将node读入内存后,放在node_inode对应的文件中便于管理和访问。

node_inode文件的data page 里保存了文件系统中读入内存的 node 的数据,顺序更新。根据 nid 可以从 node inode 的 mapping 里获取对应的 page,之后通过 f2fs_get_node_info 从 NAT 获取 nid 对应的 blkaddr,最后提交 io 获取 page。接口为 f2fs_get_node_page。

在 inode 创建时,通过 f2fs_new_inode_page 创建 node page。另外在保留 data block 时,如果现有 node 空间不足以存放 data block addr,则需要通过 ALLOC_NODE 模式调用 f2fs_get_dnode_of_data,在内部创建 node page。

meta_inode

盘上还有元数据区域,如SSA、NAT等。这些数据在读入内存后,放在meta_inode文件中管理。

root_inode

文件系统在挂载之后有一个根目录。root_inode对应的就是根目录的目录文件。


如果开启了压缩功能,还有一个compress_inode,这里略过。

特殊文件的ino号是从1开始的,因为 nid = 0 被视作未分配,或者无效。参考 __get_node_page。另外在 truncate_dnode 里,nid == 0 即视作已经 truncate。

https://www.cnblogs.com/liuchao719/p/some_special_node_id_in_F2FS.html)