您的位置:首页 > 其它

f2fs创建一个文件的具体过程

2015-05-12 18:56 399 查看
假设需要创建一个文件/dir/file:

f2fs_sb_info保存了根目录的inode number,假设是0,此时NAT布局如下:



由于inode number就是node number,查找第0个node的块地址,得到4,然后f2fs读SSD上第4个块的数据,得到了根目录的inode:



解析inode的信息,他的数据依次存在了120,200,300,400的块上,读入相关的块后,在逻辑上,我们可以得到根目录下数据块的多级哈希的拓扑结构,它一共有3层,第一层1个bucket,第2层2个bucket,第3层3个bucket。



假设"dir"的hash为19,f2fs先查找第一层,19 % 1 = 0,查找第0个bucket,线性遍历bucket0的bitmap,发现有置位1的entry,比较hash值,看看是否为19,若是,在比较文件名,若为dir,则返回inode number,结果找了一圈没找到;找第二层,19 % 2 = 1,按上个方法查找第二个bucket,第三层查找第三个bucket。得到dir的inode后,根据inode number查询NAT,得到dir inode的实际块地址,并读入该inode。

f2fs为file文件分配了一个inode,inode number为29,在当前的node segment追加写入新的inode,物理地址为100,



由于在node segment分配了新的块,需要修改这个segment的对应的sit_entry,包括bitmap,valiad blocks等信息;需要修改第29个nat entry,将它指向块地址100。此外,需要向父目录dir添加一个dentry,



由于修改了dir的数据块,f2fs向数据segment追加写了被修改的block,并修改SSA上该block对应的summary entry,使得summary entry的inode指向19,offset设置为3,把原来的segment 的sit项也做修改,假设追加的数据块地址为44,由于这个块是dir的第三个直接数据块,则把相关的指针做一下修改,data[3]=44,并追加写到node segment。



由于追加写了inode,还要修改nat表,使得nat[19]=104,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件系统 存储
相关文章推荐