跳转至

分区和文件系统

你应该牢记,我们一直在探索数据的背景,从平凡中构建意义。在这一章中,我们将超越文件的范畴,研究包含文件的内容。

还记得我们在介绍数据时说过,你磁盘上的空间只是单个一连串的的 0 和 1,而且它们只能是 0 或 1。这就是说,空间分配信息只存储在这些 0 和 1中。你的磁盘的一些部分存储了你的文件,一些部分存储了空间分配信息,都在你的磁盘的同一个、连续的、无所谓的 0 和 1 的系列中。

有两种类型的分配。分区(partitioning)和文件系统(filesystem)。分区是非常初步的:它定义了你的磁盘空间的可用区段。然后,通常在每个分区建立一个文件系统,通常以树状结构存储文件。

在现代磁盘上,数据是由逻辑块访问的。逻辑块地址是线性分配的,从 0 开始。大多数磁盘的逻辑块大小为 512 字节。

分区

[[CON]] 分区这个概念是指指定不重叠的可用段,称为分区(partition)。一个存储这种结构的小型分区表(partition table)通常放在磁盘的开头,相应的空间段应该被操作系统弄成可访问的,就像它们是相互独立的一样。如果有些空间没有被分配,那么它就不应该被操作系统弄成可访问的。

[[STD]] 我们将了解现代和通用的分区标准:GUID 分区表 (GPT)。 GPT 通常采用前 34 个逻辑块和后 33 个逻辑块(两份)来存储分区数据,但是此大小可以变化以容纳更多或更少的分区。 表中的每个分区条目都包含以下信息:

  • 分区类型的 GUID:人们使用的每个分区类型都有一个标准的 GUID。

  • 分区的 GUID:一个唯一的GUID来识别分区。系统中不应该有重复的分区 GUID。

  • 开始 LBA:指定起始位置。分区包括整个起始逻辑块。

  • 结束 LBA:指定结束位置。分区包括整个结束逻辑块。

  • 属性标志。

  • 分区名称。

文件系统

现在我们已经定义了分区,那么是什么让分区中的原始数据产生了目录结构呢?一个文件系统的建立就是为了完成这项工作。

文件系统本身已经是一个非常复杂的话题。但一般的想法是,有点类似于分区,在一个固定的位置(通常是空间的起点)有某种“文件表”,它包含关于每个文件开始和结束的位置、目录结构、权限等数据。实际的文件数据被放在剩余的空间里。在这样一个框架中,删除一个文件的最快方法是将其从“文件表”中删除,而重命名或移动一个文件的最快方法是改变“文件表”中的这些信息。这两个动作对实际的内容没有任何作用,而这正是大多数文件系统的工作方式。只有复制一个文件才会真正复制文件数据。这可能意味着你删除的文件可以被访问,但不是用所有方法。要了解更多这方面的信息,请阅读操作系统章节。

由于文件可以不可预测地被创建或增长,一些文件的数据不可避免地被分离成多个片段。虽然“文件表”可以正确地管理这种情况,但这种情况发生得太多被称为碎片化,并影响性能。