f2fs创建一个文件的具体过程
来源:互联网 发布:尚硅谷周阳视频linux 编辑:程序博客网 时间:2024/05/17 03:10
假设需要创建一个文件/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,
- f2fs创建一个文件的具体过程
- Linux创建子进程的具体过程
- Java对象创建的具体过程
- 建立一个网站的具体过程
- 创建.txt文件,指定具体的编码
- Linux文件系统的的实现:创建一个文件的过程
- f2fs的journal机制
- 会计基础:一个具体的简单的会计核算过程
- 创建一个窗口的过程
- 一个View的创建过程
- f2fs文件系统的页缓存
- C++——一个简单的多文件具体例子
- Maven创建web项目具体过程
- 一次渗透的具体过程
- 一次渗透的具体过程
- 宏块帧内预测的具体过程
- struts的具体执行过程
- Web service 的具体过程
- 将模板类声明和实现分开
- 黑马程序员——Java基础——网络编程
- ORACLE 最大连接数的问题
- iOS 创建用xib制作的ViewController,不可以使用new方法
- 获取下一周日期
- f2fs创建一个文件的具体过程
- C指针申请内存
- 可变参数列表
- mysql查询今天,昨天,近7天,近30天,本月,上一月数据方法
- 数据库 - 恢复策略与数据库镜像
- android adb 命令发送 keyevent
- WebSphere Message Broker 学习资源
- Android访问网络,使用HttpURLConnection还是HttpClient?
- Xcode配置SVN