电脑软件如何利用硬盘空间
在谈完硬件层面的问题之后,接下来让我们把目光转向电脑软件如何利用硬盘空间上,对于软件来说,硬盘厂商使用什么样的技术去实作一款硬盘其实并不重要,软件需要在意的是「有哪些空间可以运用」、「如何去划分出这些空间的位置」、「如何维持高效率的存取」、「要用什么规格去纪录这些资料」等方面,因此我们发展了许多标准规范来解决这些问题, 例如磁区的划分与寻址方式、硬盘分割的规划方式与档案系统等。
磁盘的区域划分
目录
由于软碟与磁盘是利用「磁性物质在储存媒介的分布情形」来做资料的读写,因此对磁性储存媒介进行分区并且在储存与读取资料时精准定位各分区的实体位置非常重要,因此我们将磁性储存媒介上划分为许多磁区作为最小单位,并且根据不同的磁区分群方式创造出了磁轨、磁丛等名词。

为了加速数据的存储,我们在软盘与硬盘上都是采用圆形的磁性存储媒介 (称为磁盘 disk),以透过快速转动的方式来缩短读写头在各个区域之间移动所需要耗费的时间,在结构上如同上面的简图,一块硬盘可能有多个磁盘 (disk),而每个磁盘都具有正、反两面,而每个磁盘表面上可以划分为许多个同心圆,称之为磁轨 (track), 由于每面磁盘都需要一个读写头,而且这些读写头都装置在同一个支架上面,因此会同步进行移动并同时接触相对位置相同的磁轨,基于这样的特性,读取所有盘面上同一相对位置的磁区的效率会比读取分散在不同相对位置的磁区来得高上许多 (可以减少读写头移动的需求),而这些由上往下将每个磁盘上对应相对位置的磁轨可合称为一个磁柱 (cylinder)。
而每个磁轨上可以分出许多称之为磁区(sector)的小格子,这些小格子就是硬盘存储数据时的最基本单位,绝大多数的硬盘都是以512 bytes为一个磁区的容量大小,近来硬盘厂商大力推广的先进格式化(Advanced Format,AF)硬盘则是顺应硬盘容量提升为了降低ECC校验所需占用的空间与造成的性能影响而将单一磁区的大小提升为 4,096 bytes 的意思。

此外,根据操作系统与档案系统的设计,多个磁区有时也可以被合成为一个磁丛(cluster)或磁段(block)以方便操作系统处理档案并进一步提高效率。
CHS 寻址系统
在将这些单位定义清楚之后,接下来就可以对每个磁区赋予一个专属位置,也就是所谓的「定址 (addressing)」,一般而言储存设备所使用的定址方式主要有CHS (Cylinder, Head and Sector) 与 LBA (逻辑区块定址,Logical Block Addressing) 两种方式,早期的电脑系统大多使用 CHS 定址, 由其名称可以知道这种寻址方式是根据磁柱、磁头以及磁区的方式来给予每个磁区一个专属位置,先定出磁柱(就是读写头落点的位置),再决定磁头 (其实就是选择一个盘面) 以标定出特定的磁轨,最后在从这个磁轨上选出所要的磁区。
这种方式主要是对人类而言较为直观,因为可以直接从定址的结果当中看出该磁区的实际位置,但缺点也很显而易见,因为磁区位置的长度是固定的,而又要分段做固定的定义,因此相对而言所能定址的磁区数量就会比较受限。
例如在早年设计IBM PC的BIOS时,当年的工程师认为磁盘的密度提升可能会很有限,而人们可能会透过堆叠大量磁盘的方式来提高硬盘的储存容量,因此在设计CHS定址时将多达八个位数定义给了磁头(head),磁柱(cylinder)则分配了10个位数。

但后来的情况却不是当年工程师所想的那样,时至今日硬盘磁盘数量再怎么多通常也不会超过8片,最多也就只有16面而已,根本不可能用到255个磁头定址,这导致依照这种CHS定义规则设计出来的系统能够寻址的磁盘容量就变得有限许多,远远达不到原先理论估计的8.4 GB。
而后来发展的ATA规范所采用的CHS定义规则则是将采用28位定址,且磁头被分配的位数只剩下4位,磁区则增加为8位,磁柱更是提高为16位,将理论上限提高至137 GB,但却引发了兼容性问题,在早期的系统上只能正常存取BIOS定义与ATA规范定义的最大共同范围内的寻址-也就是磁柱10位,磁头4位,磁区6位, 结果反而使最大容量被限缩到只剩下528 MB,直到1996年厂商才透过在BIOS内新增大型硬盘模式(Large Mode)将磁头的定义位数减少两位并将空出来的二个位重新分配给磁柱的方式使可支持的硬盘容量增加至2.1GB。
LBA 寻址系统
然而,如同前面所提及的,实际上对软件而言其只需要能够标定出所有磁区的正确位置就足够了,实际上软件在读写资料时并不需要真正知晓每个磁区实际落在哪个盘面、哪条磁轨上,再加上越来越多非磁性储存媒介的储存装置诞生 (这些装置不采用磁性储存媒介,因此自然也没有什么磁轨、盘面的问题),因此后来的系统多改采 LBA 定址,这种方式非常直接, 其实就只是直接赋予每个磁区一个专属编号而已,可寻址的理论最大容量会随着位置编号的位数长度而持续指数增长。
磁区的结构
解决如何赋予磁区专属位置以利使用的问题之后,接下来站长要谈的是磁区本身的结构。

在传统的架构中一个磁区可以存放 512 bytes 的数据,但一个完整的磁区并不是只由包含这 512 bytes 数据的区块所组成,还要加上作为头部的导入区块 (Sync / DAM)、作为尾部的磁区间隙 (Gap) 与为了提高数据正确性而设计的 ECC 错误校正码区块这三个部分才能构成一个完整的磁区。
由此我们可以知道一个完整的磁区在磁盘上所占据的面积实际上会略大于存放 512 bytes 资料所需要的最小空间,且每多存放 512 bytes 的数据就要多增加一组导入区块、磁区间隙以及错误校正码。
随着硬盘的容量愈来愈大,单一磁盘上容纳的磁区数量愈来愈多,这些不断重复的导入区块与磁区间隙就对磁盘上的面积造成了浪费,这就是接下来站长要谈的「先进格式化 (Advanced Format)」的发展由来。
先进格式化 (Advanced Format,AF)
先进格式化虽然有着响亮的名字,但其实本质上并不是甚么非常特别的技术,只是把原先单一磁区所容纳的数据量由 512 bytes 提高至 4,096 bytes 而已,这使得硬盘在储存相同大小的数据时所需要的磁区数量会下降为原来的四分之一,因此可以有效节省磁盘上被用做导入区块与磁区间隙区域的面积,进而提高单位面积所能储存的资料大小,根据 WD 的说法, 采用先进格式化的硬盘磁盘单位面积所能容量的数据量可以提高约 11%。

若文字叙述上不是那么好理解的话,搭配上方的示意图应该就能很容易明白先进格式化到底是怎么一回事了,值得注意的是由于先进格式化缩减磁区数目、提高单一磁区所包含的数据量后 ECC 错误校正码区块的数量也跟着减少,为了避免硬盘保存数据的可靠性下降,因此多数厂商在先进格式化硬盘上所使用的 ECC 错误校正码区块会较原先来得大,以弥补磁区数量减少之后 ECC 错误校正码区块缩减的问题。
磁盘分区
在谈完磁区的架构与寻址之后,下一个要探讨的议题就是操作系统如何去应用这些磁区,为了方便使用与提高兼容性、效率,操作系统不会直接依据前述的实体结构使用磁盘空间,操作系统会将特定范围的磁区以虚拟的方式组织在一起进行应用,其中与使用者日常使用最为相关且最大的单位即为磁盘分割。
目前个人电脑所使用的磁盘分割方式主要有 MBR 与 GPT 两种,其中前者多用于较老旧的电脑,近几年的新电脑大多以 GPT 模式为主,接下来站长会分别介绍这两种磁盘分割模式,由于相较于近年已成为主流的 GPT 磁盘分割模式而言,传统的 MBR 磁盘分割模式的架构较为单纯,因此我们先从 MBR 磁盘分割模式开始看起。
主机记录( Master Boot Record,MBR)
在电脑启动时会先从磁盘上的第一个磁盘区开始读起(即CHS定址编号0,0,1的磁区,这个磁区被特别命名为主要开机磁区Master Boot Record,缩写为MOR),这个512 bytes大小的磁区当中包含了启动程序、磁盘分割表(Disk Partition Table,DPT)两大部分,其中启动程序占据绝大部分空间(约446 bytes 左右),磁盘分割表则固定占据 64 bytes 的空间。

而这固定的 64 bytes 空间会被分为四组,每组分别代表一个磁盘分割,依照下列的格式纪录这个磁盘分割的各种基本特性:
位置 | 长度 | 内容 |
00H | 1 bytes | Boot indicator bit flag 标示是否为启动磁盘) |
01H | 1 bytes | 起点磁头 |
02H – 03H | 2 bytes | 起点磁区、磁柱 |
04H | 1 bytes | 档案系统类型 |
05H | 1 bytes | 终点磁头 |
06H – 07H | 2 bytes | 终点扇区、磁柱 |
08H – 11H | 4 bytes | 起点磁区的 LBA 定址 |
12H – 15H | 4 bytes | 总扇区数 |
从上面的格式我们可以知道 MBR 磁盘分割表主要纪录的事项包含了该分割是否为启动磁盘、该分割在磁性储存媒介上的起点与终点、该分割所使用的档案系统类型与其实际大小这四项数据,且分割的起点与终点是采用前面提过的 CHS 定址方式标示的。
MBR 磁盘分割表的限制
在了解 MBR 磁盘分割表的格式之后我们可以很明显发现 MBR 磁盘分割表的规范非常固定且使用了过时的 CHS 定址编码格式,随着时代发展这些特性就导致了 MBR 磁盘分割表开始有不敷使用的情形出现,例如固定只能存放四组磁盘分割纪录导致一个磁盘上最多只能有四个分割区、使用 CHS 定址限制了所能取用的磁盘空间范围等,而在 GPT 被发展出来之前, 人们也发展了多种方式来暂时绕过这些限制,例如延伸分割区、改采相对LBA位置定址为主要寻址方式等。
