[Linux]文件系统

1.理解文件系统

  • Linux磁盘文件特性:内容加属性,内容大小是不确定的,但是属性大小是一定的,并且内容和属性是分开存储的。文件属性是用一个结构体来定义的,在Linux中,该结构体是固定128字节大小如下代码:
c 复制代码
struct inode
{
    类型;
    大小;
    权限;
    时间;
    inode编号;//整个分区内唯一的,用来区分文件的inode
    ...
}
  • 而Linux中一个文件块是4KB,那么一块就可以存储4*1024/128=32个该结构体。其中,值得注意的是文件名是不属于文件属性的。
  • 系统中,表示一个文件,用的不直接是文件名,而是inode,用命令ls -i就可以查看文件的inode

2.刨析文件分组中的各个组成

  • i节点表(inode Table):存放文件属性 如 文件大小,所有者,最近修改时间等。假设我们这个group0大小是10GB,我们要在这10GB的大小的空间内存放一万个文件,也就说说有一万个inode,那么10000*128/4/1024=312。这意味着有312个block就能存储一万个inode。所以如果有一万个文件,那么这312个block包含的一万个inode组成的表就是inode Table

  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。比特位的位置代表:第几个inode;比特位的内容:表示该inode是否正在被使用。

  • 数据区:存放文件内容,里面有很多4kb的区域用来存放文件内容

  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。比特位的位置代表第几个数据block,比特位的内容代表该block是否正在被使用。

c 复制代码
struct inode
{
    类型;
    大小;
    权限;
    时间;
    inode编号;//整个分区内唯一的,用来区分文件的inode
    int block[15];
    ...
}
  • inode结构体中还有个成员变量是block的数组,这个数组里面的内容存放的是该文件存放block块的下标。其中存放15个元素,即0, 14,其中0, 11就是存放该文件正常被使用的数据块的下标,12, 13不直接存放数据块下标,里面的内容指向的是数据块编号,即间接索引,14中存放的内容是指向12.13这样的索引数据块,即三级索引块。

  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息

  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。描述整个分区

  • 格式化的本质就是向指定的分区写入全新的文件系统。上面说的文件系统叫Ext*(2)

3.详谈文件名和文件的增删查改

  • 首先,明确一个概念,目录是一个文件,那么目录肯定也是有内容+属性,其中目录的内容是很多对文件名和inode编号的映射关系。
  • 对于一个文件的增删查改,都和这个文件所处的目录有关系,查找一个文件,在内核中,都要逆向地递归般得到/,然后从根目录进行路径解析。
  • 一个被写入文件系统的分区,要被Linux使用,必须先将这个分区进行挂载,mount命令。
  • 一个文件系统所对应的分区,挂在对应的目录中。分区的访问,都是通过所挂在的路径访问的,所以访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区下。

4.软硬链接

  • 由上面的现象可以看出来,硬链接本质不是一个独立的文件,而软链接有自己的inode,是一个独立的文件。

  • 硬链接肯定没有新建文件,而是新建了一个文件名,和目标文件的inode编号形成了映射关系,写入到指定目录的数据块中。前面的2代表的是硬链接数(也就是下图的引用计数),而删了test.c后,硬链接数就等于1了。所以,我们所说的删除文件,其中就是删除目录文件中的映射关系,当文件的inode中的引用计数为0时,才会把inode位图和block位图中对应文件的比特位置零,也就是删除磁盘中的文件。

4.1软硬链接的原理
  • 硬链接的本质就是在指定的目录下,插入新的文件名和目标文件的映射关系,并让inode的引用计数++
  • 软链接的本质就是一个独立文件,软链接内容里面放的是目标文件的路径,类似于windows下的快捷方式。(额外小知识:linux系统中删除的指令除了rm,还有unlink指令)
  • linux中可以给目录创建软链接,但是不可以给目录创建硬链接。这样可以避免环路问题,避免陷入死递归。除非系统自己建立硬链接,例如.和...
相关推荐
邪修king几秒前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux
高亦真14 分钟前
今天是学习嵌入式的第38天
linux·学习·算法
志栋智能16 分钟前
超自动化巡检如何生成“有灵魂”的运维报告?
大数据·运维·人工智能·架构·自动化
凌风的跨境分享17 分钟前
Temu运营避坑指南:制造地点信息填写合规要点与批量优化方法
运维·服务器·人工智能
DYWorker00117 分钟前
Linux驱动子系统:中断子系统 —— Consumer和Provider(005)
linux·驱动开发
草莓熊Lotso21 分钟前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
Splashtop高性能远程控制软件32 分钟前
微软 2026 年 9 月补丁星期二技术分析:974 个漏洞的分级修复优先级清单
运维·安全·自动化·远程工作·splashtop
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之单点登录(SSO)实战
服务器·spring·状态模式
ShineWinsu1 小时前
对于Git:远程操作的超详细保姆级解析
linux·git·gitee·github·远程仓库·分布式版本控制系统·远程操作
小张成长计划..1 小时前
【Linux】21:进程间通信
linux