Linux文件管理---磁盘上文件如何管理(inode)

文章详细介绍了磁盘的物理结构,包括磁片、磁道、扇区,以及这些与文件的关系。操作系统通过抽象成线性结构来管理磁盘,便于文件的查找和管理。文件的内容由inode编号指向的数据块组成,而文件名则存储在目录中,与inode编号形成映射。磁盘读取通常以4KB为单位,而不是最小的512byte扇区。
摘要由CSDN通过智能技术生成


一台计算机磁盘上的文件是非常多的,这些文件该如何进行管理?我们想打开某个磁盘上的文件究竟是如何找到该文件的?

磁盘与文件的关系

image-20230105112253681

这就是磁盘的物理模型和存储结构

一块磁盘中有很多的磁片,每片都有两面,每面都有很多环磁道组成,每环磁道分为很多扇区,每个扇区的大小为512byte,而这就是磁盘的最小存储单元了。每一面都有一个磁头,磁头的左右摆动配合磁片的高速旋转可以使得磁头锁定磁盘的每一个扇区,从而能够找到磁盘上的文件。(所有的磁头都是一起绑定运动的)

磁盘的逻辑结构与操作系统关系

在操作系统中,磁盘会被抽象成线性结构,就像磁带被拉直一样。

image-20230105114114421

每个扇区、磁道、磁面都有编号,即我们知道我们想要访问的扇区编号后就能够通过该线性结构找到物理地址。

操作系统这样做的好处:

  • 便于文件、数据的管理
  • 不让OS的代码和硬件(驱动)代码强耦合,能够让不同硬件以统一视角面对OS。

真实的磁盘逻辑结构

虽然磁盘的基本单位上512byte,但是这依旧很小,科学家根据不断的测试,推断出每次取4KB为最佳,所以每次从磁盘往内存加载数据的时候取的并不是一个扇区512byte,而是8个扇区4KB(也有的OS采用1KB、2KB,但很少)。

内存的基本单位也被分成了4KB大小,称为页框;

磁盘中的文件尤其是可执行文件,是按照4KB大小划分好的块,称为页帧。

image-20230105120826579

  • BookBlock:用于引导计算机启动等功能;
  • SuperBlock:卷资源表,记录文件系统的整体信息,包括inode、block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • GroupDescriptorTable:存储一个块组的描述信息,块位图块号,inode位图块号,inode表块号,数据块块号,空闲inode计数,空闲块计数,自由块计数等等;
  • Block Bitmap:记录着Data blocks里有哪些已经被占用(bit为1),有哪些是空闲的(bit为0);
  • inode Bitmap:记录着inode Table里有哪些已经被占用(bit为1),有哪些是空闲的(bit为0);
  • inode Table:里面有非常多的块,每块都有一个编号称为inode编号,每块大小为256byte(ext4格式),该inode里存储文件的全部属性信息(不包括文件名);
  • Data blocks:里面有非常多的块,每块都有一个编号,每块的大小默认为4kb,存储文件的全部内容信息。

inode里记录着Data block的编号,以便通过文件的属性就能够找到文件的内容,下面是inode结构的源码:

  * Inode layout:

  - Minix FS::

                    unsigned short i_mode;
                    unsigned short i_uid;
                    unsigned long  i_size;
                    unsigned long  i_time;
                    unsigned char  i_gid;
                    unsigned char  i_nlinks;
                    unsigned short i_zone[7+1+1];

  - Xenix FS, SystemV FS, Coherent FS::

                    unsigned short i_mode;
                    unsigned short i_nlink;
                    unsigned short i_uid;
                    unsigned short i_gid;
                    unsigned long  i_size;
                    unsigned char  i_zone[3*(10+1+1+1)];
                    unsigned long  i_atime;
                    unsigned long  i_mtime;
                    unsigned long  i_ctime;

其中i_zone数组中记录了data block的编号,即能够找到data block的位置,0-6里面的data block里存放着的是文件的内容,7-8里面的data block存放的是其它data block的编号。

image-20230105131114366

至此,文件的属性和内容都有了,那么文件名在哪里呢?

目录的内容就是文件名和inode编号的映射关系!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云朵c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值