Linux文件系统

之前对磁盘分区已经有了详细的描述,这篇主要介绍文件系统.Linux的文件系统是出了名的.下面就

大概介绍下.

可以把文件系统大概分成 SuperBlock inodeBlock DataBlock 三部分

SuperBlock


SuperBlock记录文件系统的基本信息比如每块数据块的大小,空闲磁盘的块数信息.

inodBlock


inodBlock上面主要是 inode 表,每个项都是一个 inode 结构,每个 inode 记录的是文件的基本

信息和属性.每个inode 结构都对应一个文件或者目录,目录也是特殊的文件.只是目录里面记

录的是 inode 节点和文件名对应关系.另外 inode 结构还记录了每个文件对应数据块在磁盘上的

位置,从而索引到所有的文件数据.

DataBlock


DataBlock 就是文件实际内容的存放地方.

举个例子,比如 ls > dir.txt,Linux 做了以下工作

  1. 在 inode 表里面找一个空闲的节点,并且申请
  2. 在 DataBlock 里面找到足够的空闲块来装载文件,从而OS从内核缓冲区写到空闲块里
  3. 在 inode 结构里面填充 DataBlock 所在位置以及其他信息
  4. 在目录项里面添加 inode 和文件名对应关系

文件在目录中的含义


目录也是一种特殊的文件,只是它记录的是文件名和 inode 编号的对应关系,凡是对文件的操作

都先根据 inode 节点编号,在 inodeBlock 里面找到对应的 inode 结构,再读取到相应的文件数据.

文件在目录,也就是在目录文件里面有文件对应的 inode 编号.

子目录在目录中的含义


每个目录在 mkdir 的时候肯定会有对应两个 inode 编号,一个是 ".",另一个是 "..",分别代表当前

目录和父目录,根据对应的 inode 编号来指定(根文件两者是一样的!).现在假设 a 目录下有一个

b目录

[firefoxbug@firefoxbug a]$ ls -ia
1312717 . 1312861 .. 1312857 a
[firefoxbug@firefoxbug a]$ cd a/
[firefoxbug@firefoxbug a]$ ls -ia
1312857 . 1312717 .. 1313177 b

a目录"."inode 编号就是 b 目录 ".."的节点编号,这也是连接目录和目录之间的关系.

硬链接和软链接


看上面的实验,总结

硬链接创建之后,是和原文件共享一个 inode 节点,系统会对原文件的硬链接增加一个.

有点类似创建了一个镜像一样,此时 inode 节点对应了"两个"文件,删除一个文件之后,

对于原来的文件并不影响,因为系统检测到 inode 节点依然是存在的,只是计数变成了1.

对于软链接创建之后,则是新建一个 inode 节点,对于目录项里多了一条指示"到那个文件

怎么走".一旦原文件删除了,这时候就找不到了原文件了.这和 windows 的快捷方式是一样的.

### 软链接删除
$ ln -s /usr/local /home/
$ rm -f /home/local -->> 注意是不是 rm -rf /home/local/

标签:Linux, OS

评论已关闭