3

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

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

该文件的 4KB 写入一个块,另外 1KB 文件写入另一个 4KB 块。现在第二个块的 3KB 是不可用的。

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

4

2 回答 2

5

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

文件大小 ~ Linux

磁盘上的文件大小 ~ Linux

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

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

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

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

存储在磁盘上的块中的文件

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

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

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

在这样的设置中,每次向文件中添加一个字符时,都需要:

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

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

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

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


这种方法的其他优点:

1. 更快的读取

使用块,磁盘读取是连续的,直到块大小。更少的搜索 = 更高的读取吞吐量。

2. 更快的写入

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

于 2013-07-22T03:11:04.800 回答
1

首先要注意的是,块大小几乎总是大于您的扇区大小


要确定您的扇区大小,请运行以下命令

root@ubuntu:~# fdisk -l | grep -E "Sector size"
Sector size (logical/physical): 512 bytes / 512 bytes

扇区大小几乎总是 512 字节或 4096 字节,具体取决于您购买驱动器的时间


要确定您的大小,请运行以下命令

root@ubuntu:~# blockdev --getbsz /dev/sda
4096

在大多数现代操作系统上,块大小通常为 4096。如果需要,您可以更改此设置


任何未完全填充块的文件都会导致空间浪费。这是正常的,也是意料之中的。

http://linux.die.net/man/8/blockdev

https://serverfault.com/questions/29887/how-do-i-determine-the-block-size-of-an-ext3-partition-on-linux

http://www.linuxforums.org/forum/miscellaneous/5654-linux-disk-block-size-help-please.html

于 2013-07-22T02:05:36.517 回答