文件的磁盘扇区和块分配

vet*_*tri 3 disk sector

我对 Disk Sector 和 Block 有疑问。一个扇区是一个通常为 512 字节或 1k、2k、4k 等的单位,取决于硬件。文件系统块大小是一组扇区大小。

假设我正在存储一个 5KB 的文件,如果扇区为 512 字节而块为 4KB,如何将其写入磁盘?

该文件的 4KB 写入一个块,另外 1KB 的文件写入另一个 4KB 块。现在第二个块的 3KB 无法使用。

以后会用还是会浪费?如果我将10个5KB的文件写入磁盘,会浪费30KB的大小,还是这30KB用于磁盘使用?

The*_*ist 5

文件以“块”大小的倍数存储在磁盘上是一个公认的事实。

文件大小 ~ Linux

磁盘上的文件大小 ~ Linux

文件大小与磁盘上的文件大小 ~ Windows

的概念最初是作为磁盘上物理扇区在文件系统中逻辑表示的一种简单方式。每个扇区都有自己的标头、数据区和ECC,这使其成为逻辑上可以独立表示的最小磁盘块。

随着时间的推移,随着 HDD 控制器上缓存的出现,拥有多个物理扇区大小的逻辑块变得更加容易。这种方式增加了磁盘上的顺序 I/O,从而提高了吞吐量。

今天,是可用的最小磁盘空间。通常文件使用 1 个或多个块存储在磁盘上。

存储在磁盘块中的文件

对于每个文件,只要对文件进行更改并“增长”,就会使用最后一个块中的剩余空间(如果有),这需要额外的磁盘空间来存储新添加的内容。

额外的空间要求(超出当前最后一个块中的可用空间可以容纳的空间)通过在磁盘上请求额外的块并在逻辑上链接新的块集以继续跟随文件的当前最后一个块来满足。文件 A说明了上述情况。

提前分配块的好处是减少了碎片。考虑在磁盘上没有块概念并且根据需要分配磁盘空间的替代方案,即分配的磁盘空间量正好是文件大小。

在这样的设置中,每次甚至单个字符添加到文件中时,都需要:

  • 分配额外的内存(多 1 个字符)。
  • 在包含文件初始区域的区域和这个新字节之间建立一个链接。

所有这些元数据,即关于“链接”的附加信息也需要磁盘空间。这构成了每个此类“链接”的固定开销,因此必须将此类“链接”保持在最小数量。以“块”为单位分配磁盘大小的概念将开销限制为预先确定的数量。

磁盘上的保证文件数 = 原始磁盘空间 / 块大小

此外,由于重新定位磁盘磁头是磁盘 I/O 中最耗时的任务,因此这种随机搜索会降低吞吐量。频繁的随机搜索也可能会更快地磨损磁盘(还记得跳舞的 HDD 吗?),必须尽可能避免。


这种方法的进一步优点:

1. 读取速度更快

使用块,磁盘读取是按块大小顺序进行的。更少的搜索 = 更高的读取吞吐量。

2. 更快的写入

块提供了一个简单的实现,可以映射到页面,这也导致更高的写入吞吐量。