跳转至

硬盘与文件系统

在使用 Linux 发行版的过程中,许多用户经常会遇到硬盘、分区表与文件系统的概念。本节旨在解释这些概念。

硬盘

计算机的存储设备可以被想象成一条纸带,上面以相等的间隔排列数据。第一个数据的地址是 00 ,第二个数据的地址是 01 ,第 256 个是 FF。如下表所示:

地址 00 01 02 ... FF
数据 AB CD 58 ... 1B

然后,操作系统会根据需要到对应的地址读取数据。再然后……就没了。

这里还有一些细节,但并不是很重要:上面的地址与数据全是16进制,因为一个16进制数等价于4个二进制数,而计算机用二进制数,这样表示起来更加方便,这样第 256 个的地址就是 FF ;纸带地址计数从0开始,因为计算机计算地址也是从0开始。

电脑实际上不是非常在意底层设备到底使用什么方式存储。早期的计算机采用打孔纸片来存储程序与数据,之后是使用磁带、软盘,再之后才是机械硬盘……当然,现在最新潮的存储设备之一就是固态硬盘。但这些都没有关系,只要这张“纸带”能用就行。

文件系统

文件系统是操作系统用来管理文件以及管理文件元数据的工具。

这样说可能比较抽象,我们举个例子说明。

如果没有文件系统

还记得前面的“纸带”吗?我们把它填满 0 。在计算机的世界里面,0 有着“非”(逻辑上的“不”)或者空白的含义。好了,现在纸带上面全是空白:

地址 00 01 02 03 ... FF
数据 00 00 00 00 ... 00

现在计算机需要存储一个文件,内容为 11 22 33。让我们把它放到纸带的开头:

地址 00 01 02 03 ... FF
数据 11 22 33 00 ... 00

一切如此美妙,直到我们需要读取文件。

读者可以看到,我们并没有存储任何关于文件本身的信息,比如文件的长度以及文件的名字。这样,在读取文件的时候,操作系统并不知道文件什么时候结束(文件内部包含 0 是合理的),只能读取到硬盘结尾,也不知道有关文件的元数据。文件的大小、创建时间、修改时间以及所有者(就是拥有这个文件的用户),都是关于数据(文件本身的数据)的数据,所以叫元数据(metadata)。

不使用文件系统的另一个坏处在于,无法组织多个文件,因为操作系统既不知道第一个文件什么时候结束,不知道那些空间是空闲的,也不知道第二个文件应该在什么地方开始。

文件分配表(File Allocation Table)

文件分配表文件系统(File Allocation Table,缩写 FAT),是有史以来最经典的文件系统。FAT 文件系统得名得命于其管理文件的核心技术:“文件分配表”。FAT 发明于 1980 年代,是微软的 DiscBasic 的一部分;现在 FAT 已经遍地开花。

FAT 是这样管理文件的:将一个分区分成同等大小的簇,也就是连续空间的小块,每个文件根据它的大小可能占有一个或者多个簇。文件分配表(FAT)是映射到分区每个簇的条目列表。每个条目记录下面五种信息中的一种。

  • 链中下一个簇的地址
  • 一个特殊的簇链结束符(EOC,End Of Cluster-chain,或称End Of Chain)符号指示链的结束
  • 一个特殊的符号标示坏簇
  • 一个特殊的符号标示保留簇
  • 0来表示空闲簇

这样,磁盘的每个簇的情况都得到了记录与管理。

目录表是一个表示目录的特殊类型文件(现今通常称为文件夹)。

它里面保存的每个文件或目录使用表中的32字节条目表示。每个条目记录名字、扩展名、属性(文件、目录、隐藏、只读、系统和卷)、创建的日期和时间、文件/目录数据第一个簇的地址,最后是文件/目录的大小。

这样,我们也就得到了树形的目录结构,同时,文件的各项元数据也得到了有效的保存与管理。

回到总体概念

基本上所有的文件系统都在做着和 FAT 文件系统相同工作,只是方式有所不同。一些文件系统使用 B+ 树来存储数据,一些文件系统含有锦上添花的加密与压缩功能,但这些事情本质上和 FAT 没有区别。我们现在不准备在此处展开详细讲解。涉及到 Linux 安装的时候,我们并不会推荐用户使用或者不使用某种文件系统。有些时候不同的文件系统有不同的作用,而大多数 Linux 发行版安装程序已经为用户选择了(开发者认为)合适的文件系统。

分区表

分区表,顾名思义,就是划分分区的表。大多数情况下,一个文件系统占据了一个分区,而现代操作系统的使用,经常会涉及多个分区。分区表的作用,就是记录分区占据的位置、分区扮演的角色(比如启动用的分区、存放数据的分区)、以及分区使用的的文件系统。


最后更新: 2022-12-14 11:17:13
创建日期: 2022-12-14 04:32:30

评论