linux文件构成,Linux文件系统结构

文件系统结构

4dc348f9080de47d3299b731daa1bab7.png

磁盘是由若干扇区组成,每个扇区有512B(将磁盘存储区扇区化是为了更好的管理磁盘)。又由若干个扇区组成一个块(ext2默认是由8个扇区组成一个块,即4kb,这里为了简化说明,就把2个扇区组成一个块,即1kb)。由图知,将磁盘分成若干个分区,每个分区由若干个块组成。

自举块(boot block):占用1 block;主要存储分区的操作系统类型、分区起始地址;pc联盟规定的大小,和各个文件系统无关;每个分区只有一个;

超级块:占用1 block;存储分区操作系统版本、块大小、文件系统;

块组描述表(GDT):占用3 block;存储一个块组的描述信息;

块位图(block bitmap):占用1 block;每个比特位表示一个数据块是否被标记使用;1:已使用,0:未使用;

inode 位图(inode bitmap):占用1 block;每一个比特位表示一个inode节点。1:已使用,0:未使用;

inode节点:占用128B;分为文件属性部分和数据指针部分;数据指针占用60B,长度为15的指针数组;每个数据块的大小是1 block,那么15个指针最多只能维护15*1K个文件大小,显然,文件大小的上限太小了。所以文件系统通过三级间接寻址的方式来提高文件大小的上限。块大小若以1 block计算,文件大小的上限为16G,若以4 block为块大小,那文件大小的上限超过了1T;ext4文件系统中,数据指针有256B,那文件大小上限就非常大了;

数据块:存储文件的内容;

三级间接寻址策略

三级间接寻址图

4994567af52cf1ac2f82bd21e688e4d1.png

将数据指针数组命名为data数组。文件系统中,将data[12]进行一级间接寻址。即:将data[12] 指针指向的数据块,转化为一个更大的指针数组,长度为1024/4=256。在将这个更大的指针数组的分别数指向256个数据块;data[13]进行二级间接寻址,data[14] 进行三级间接寻址。都和一级间接寻址同理。

目录文件

数据块存储内容

8db37054ea891fba393ed041608671cf.png

数据块中存储的是一条一条的记录项,每条记录项都由文件名、indoe编号、记录长度(该记录项首地址到下一条记录项的首地址的长度)。每一个记录项就是该目录下“ls -a”的结果。

普通文件结构

619d17b6f4cc91fdc09e64e1de1cac4a.png

由图可以看出,每个inode节点可以对应多个数据块,和上文在分析inode节点的内容一致。然后,若干个目录块中的记录项指向每个inode节点,通过inode节点中链接数这个数据成员来标识指向其的记录项个数,这就是硬链接。当然,这些目录块都是目录文件的数据块;

目录文件结构

a0b7e4c3603b3de1111c12d2ba57eae7.png

由上图知,inode节点在文件系统中被维护成了结构体数组,inode编号为数组的下标;2549号i节点是1267号i节点的子目录,因为1267号i节点的数据块中有2549号i节点的记录项;“.”目录文件和 “..”目录文件都是硬链接。

从以上分析能够得出结论:所有的目录块都是不同目录文件的数据块。

文件创建和查询过程

执行命令:mkdir /home/aaron/a.c

(1)通过块位图区找到空闲的数据块,存放a.c中的内容

(2)通过inode位图区找到空闲的inode节点块,生成相应的inode节点

(3)在aaron目录文件的数据块中添加一条a.c的记录项

执行命令:vim /home/aaron/a.c

(1)找到inode编号为2的inode节点,

(2)遍历根目录文件的数据块中的记录项,匹配aaron记录项,获取其inode编号

(3)通过aaron目录文件的inode编号,找到aaron文件对应的数据块

(4)遍历aaron文件的数据块中的记录项,匹配a.c记录项。同理,找到对应的a.c的数据块。用vim打开相应文件

unix和Linux系统是通过文件名来对应inode节点号,从而找到对应的数据块,完成文件查询的过程

inode节点中没有文件名就是因为基于这种定位文件位置的机制

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值