![](https://csdnimg.cn/release/download_crawler_static/86336106/bg4.jpg)
新建一个文件时,ext2 会分配一个 inode 与相对于该档案大小的 block 数量给该文件。
目录树由根目录开始读起,首先找到根目录 inode 内容,然后读取到根目录 block 内容,得知
每个子文件夹的名字和 inode 号码,然后一层层往下读取。
新增文件过程:
1、确认用户对目录是否有 w、x 权限
2、根据 inode bitmap 找到空闲 inode 号码,将新文件属性、权限写入
3、根据 block bitmap 找到空闲 block 号码,将实际数据写入 block,更新 inode 指向此 block
4、将 inode、block 同步更新 inode bitmap,block bitmap,并更新 superblock
数据不一致状态 Inconsistent
万一新建文件时,系统在同步更新中介数据之前就被中断了,就会导致数据不一致,此时需要有:
日志式文件系统:
专门记录写入或修改文件时的步骤。万一数据记录发生问题,系统只需要检查日志记录区块,就
能知道那个文件出了问题,而不需要整个 filesystem 检查,这个日志功能是 ext3 才加上去的
Linux 异步处理 asynchronously
系统加载一个文件到内存后,如果文件没有被更改过,则是 clean(干净)的,如果更改过,就
设定为 dirty(脏)的,系统不定时将脏数据从内存写回磁盘。
正常关机时,系统会呼叫 sync 来将内存的数据写回磁盘内
将文件系统和目录树相结合成为挂载,挂载点一定是目录,它是进入文件系统的入口。
我们的 Linux 系统有三个挂载点 : / , /boot, /home
filesystem 最顶层的目录的 inode 一般是 2 号,因此以上三个目录作为挂载点能进入三个不同
的文件系统。
同一个文件系统中的某一个 inode 只会对应一个文件,因此可以观察 inode 判断不同文件名是
否为同一文件。
磁盘与目录的容量:
磁盘的整体是数据在 superblock 中,各文件容量记录在 inode 中,如何显示它们的数据呢
df:显示文件系统的整体磁盘使用量,显示系统中所有 filesystem