Linux之文件系统

我们之前谈到的文件描述符fd,是与被加载到内存中的文件相关的,那么还有什么文件呢?磁盘文件

内存文件  ------  断电失效

磁盘文件  ------  不受断电的影响

磁盘存储器存、取信息的最基本单位是扇区。
—个扇区能存储512Bytes的数据,OS与磁盘交互的单位是4KB。

为什么不以512Bytes为单位呢?----太小,导致多次IO,效率降低   ----太大,可能会导致供大于需。

----相同的话,万一磁盘的基本单位变化了,OS也需要变,意味着磁盘与OS的耦合度增大。

磁盘结构:

  1. 表面(Head):磁盘的表面由磁性物质组成,用于记录二进制数据。磁盘表面被划分成一个个磁道,每个磁道又被划分为一个个扇区,每个扇区就是一个“磁盘块”。
  2. 磁道与柱面(Cylinder):磁道是磁盘表面上的同心圆,每个磁盘有两个面,每个面都有一个磁头。所有盘面中相对位置相同的磁道组成了柱面。
  3. 扇区(Sector):每个磁道被划分为多个扇区,每个扇区的数据量相同。靠最内侧的磁道上的扇区面积最小,因此其数据密度最大。

  4. 磁头:磁头用于读写数据,需要借助磁头移动到想要读/写的扇区所在的磁道。磁盘会转动,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。

如何对磁盘上的文件进行管理呢? 将磁盘的结构抽象成一个 很长很长 的数组。

即定位地址的方式由CHS(Cylinder Head Sector),转变成了LBA(Logical Block Array)。

我们发现,之前我们使用 ls -l -i 或者  stat + 文件名  的时候,发现有一列数字(Inode),Inode是什么呢?要想知道Inode,我们先来了解一下文件系统。

对“大数组”的管理,必须做好对数组的每一小块的管理。

上图为磁盘文件系统图,磁盘是典型的块设备,硬盘分区被划分为一个个的block 。一个 block 的大小是由格式化的时候确定的,并且不可以更改。
Block Group: ext2 文件系统会根据分区的大小划分为数个 Block Group 。而每个 Block Group 都有着相同的结构组成。
超级块(Super Block) :存放文件系统本身的结构信息。记录的信息主要有: bolck inode 的总量,未使用的block inode 的数量,一个 block inode 的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block 的信息被破坏,可以说整个文件系统结构就被破坏了
Group Descriptor Table(GDT): 块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下块位图(Block Bitmap ): Block Bitmap 中记录着 Data Block 中哪个数据块已经被占用,哪个数据块没有被占用
Block Bitmap :和Data blocks是一 一对应的,比特位为1代表该block被占用,为0表示空闲。
inode位图(inode Bitmap): 每个 bit 表示一个 inode 是否空闲可用。
i节点表(inode Table): 存放文件属性 如 文件大小,所有者,最近修改时间等
数据区(Data blocks): 存放文件内容

文件名  和  Inode 是一 一对应的,目录也是文件,目录中的文件名  和  Inode 就存在该目录对应的Data blocks中,文件名  和  Inode 是互为Key的!!!

我们发现,一个Block group并不是很大,对于那些几十甚至几百G的文件,该怎么存放呢?

可以将其他Block group的索引信息填写到当前 Block group中的 Data blocks中,这样,就形成了如下的多叉树的结构,显然一定能存的下!!!

创建文件,文件名   和   Inode 就被存放到当前目录对应的Data blocks中。

删除文件, 只需将Block Bitmap  和  inode Bitmap当中对应的比特位由1置为0即可,不需要修改Data blocks中的内容。

相关推荐

  1. 嵌入式LinuxUbuntu学习笔记(文件系统结构)

    2024-03-26 02:06:05       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-26 02:06:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-26 02:06:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-26 02:06:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-26 02:06:05       20 阅读

热门阅读

  1. ubuntu20.04\22.04 + GTX3060(直接硬盘安装)

    2024-03-26 02:06:05       19 阅读
  2. 小程序设置图片高度自适应

    2024-03-26 02:06:05       17 阅读
  3. 【P4924】[1007] 魔法少女小Scarlet

    2024-03-26 02:06:05       18 阅读
  4. c语言函数大全(C开头)

    2024-03-26 02:06:05       19 阅读
  5. 顺序表的实现

    2024-03-26 02:06:05       16 阅读
  6. 常见分页问题

    2024-03-26 02:06:05       16 阅读
  7. Pug 模板引擎:学习与使用

    2024-03-26 02:06:05       16 阅读
  8. 程序员35岁会失业吗?

    2024-03-26 02:06:05       17 阅读
  9. 树的广度遍历和深度遍历

    2024-03-26 02:06:05       21 阅读