这是一个公认的事实,即文件以“块”大小的倍数存储在磁盘上。
块的概念最初是磁盘上的物理扇区在文件系统中逻辑表示的一种简单方法。每个扇区都有自己的标题、数据区域和ECC,这使其成为可以在逻辑上独立表示的最小磁盘块。
随着时间的推移,随着 HDD 控制器上缓存的出现,拥有多个物理扇区大小的逻辑块变得更加容易。这种方式增加了磁盘上的顺序 I/O,从而提高了吞吐量。
今天,块是可用的最小磁盘空间。通常,文件使用磁盘上的 1 个或多个块存储。
对于每个文件,只要对文件进行更改并且文件“增长”,就会使用最后一个块中的剩余空间(如果有),这需要额外的磁盘空间来存储新添加的内容。
额外的空间需求(超出当前最后一个块中的可用空间可以容纳的空间)通过在磁盘上请求额外的块并在逻辑上链接新的块集以继续跟随文件的当前最后一个块来满足。文件 A说明了上述情况。
提前分配块的好处是减少了碎片。考虑在磁盘上没有块概念并且根据需要分配磁盘空间的替代方案,即分配的磁盘空间量正好是文件大小。
在这样的设置中,每次向文件中添加一个字符时,都需要:
- 分配额外的内存(多 1 个字符)。
- 在包含文件初始区域的区域和这个新字节之间建立一个链接。
所有这些元数据,即关于“链接”的附加结构也需要磁盘空间。这构成了每个此类“链接”的固定开销,因此必须将此类“链接”保持在最小数量。以“块”为单位分配磁盘大小的概念将开销限制在预定量。
磁盘上的保证文件数 = 原始磁盘空间 / 块大小
此外,这种随机搜索会降低吞吐量,因为重新定位磁盘磁头是磁盘 I/O 中涉及的最耗时的任务。频繁的随机搜索也可能更快地磨损磁盘(还记得跳舞的 HDD 吗?),必须尽可能避免。
这种方法的其他优点:
1. 更快的读取
使用块,磁盘读取是连续的,直到块大小。更少的搜索 = 更高的读取吞吐量。
2. 更快的写入
块提供了一个简单的实现,可以映射到页面,这也导致更高的写入吞吐量。