磁盘扇区和文件块分配

时间:2012-12-10 10:34:44

标签: disk sector

我对磁盘扇区和阻塞有疑问。扇区通常是512字节的单位 或1k,2k,4k等..取决于硬件。文件系统块大小是扇区大小的组。

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

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

将来可以使用还是会浪费? 如果我将10个5KB文件写入磁盘,将浪费30KB的大小,或者在磁盘使用中使用30KB?

2 个答案:

答案 0 :(得分:4)

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

File-size ~ Linux

File-size on disk ~ Linux

File size vs. File-size on disk ~ Windows

的概念开始于physical sectors on disk在文件系统中逻辑表示的简单方法。每个扇区都有自己的标题,数据区和ECC,这使得它成为可以在逻辑上独立表示的最小磁盘。

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

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

Files stored in blocks on disk

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

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

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

在这样的设置中,每次只要将一个字符添加到文件中,就需要:

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

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

  

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

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


这种方法的其他优点:

1。读取速度更快

使用块,磁盘读取按顺序排列到块大小。较少寻求=更高的读取吞吐量。

2。写得更快

Blocks提供了一个简单的实现,可以映射到 pages ,这也可以提高写入吞吐量。

答案 1 :(得分: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