文件的磁盘扇区和块分配
Posted
技术标签:
【中文标题】文件的磁盘扇区和块分配【英文标题】:Disk Sector and Block Allocation For File 【发布时间】:2012-11-27 18:17:21 【问题描述】:我对 Disk Sector 和 Block 有疑问。扇区是一个单位,通常为 512 字节 或 1k、2k、4k 等。取决于硬件。文件系统块大小是一组扇区大小。
假设我正在存储一个 5KB 的文件,如果扇区为 512 字节,块为 4KB,如何将其写入磁盘?
该文件的 4KB 被写入一个块,另外 1KB 文件被写入另一个 4KB 块。现在,第二个 Block 的 3KB 无法使用。
它会在未来使用还是会被浪费掉? 如果我将10个5KB的文件写入磁盘,会浪费30KB的大小,还是这30KB用于磁盘使用?
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:文件以“块”大小的倍数存储在磁盘上是一个公认的事实。
块的概念最初是作为physical sectors on disk 在文件系统中逻辑表示的一种简单方式。每个扇区都有自己的标题、数据区和ECC,这使它成为可以在逻辑上独立表示的最小磁盘块。
随着时间的推移,随着 HDD 控制器上缓存的出现,拥有多个物理扇区大小的逻辑块变得更加容易。这样,磁盘上的顺序 I/O 会增加,从而提高吞吐量。
今天,块是可用的最小磁盘空间。通常,文件使用 1 个或多个块存储在磁盘上。
对于每个文件,只要对文件进行更改并且文件“增长”,就会使用最后一个块中的剩余空间(如果有),这需要额外的磁盘空间来存储新添加的内容。
额外的空间需求(超出当前最后一个块中的可用空间可以容纳的空间)通过在磁盘上请求额外的块并在逻辑上链接新的块集以继续跟随文件的当前最后一个块来满足。 文件 A 说明了上述情况。
提前分配块的好处是减少了碎片。考虑在磁盘上没有块概念并且根据需要分配磁盘空间的替代方案,即分配的磁盘空间量正好是文件大小。
在这样的设置中,每次向文件中添加一个字符时,都需要:
分配额外的内存(多 1 个字符)。 在包含文件初始区域的区域和这个新字节之间建立链接。所有这些元数据,即关于“链接”的额外结构也需要磁盘空间。这构成了每个此类“链接”的固定开销,因此必须将此类“链接”保持在最小数量。以“块”为单位分配磁盘大小的概念将开销限制在预先确定的范围内。
磁盘上的保证文件数 = 原始磁盘空间 / 块大小
此外,这种随机搜索会降低吞吐量,因为重新定位磁盘磁头是磁盘 I/O 中最耗时的任务。频繁的随机搜索也可能更快地磨损磁盘(还记得跳舞的 HDD 吗?),必须尽可能避免。
这种方法的其他优点:
1。更快的读取
使用块,磁盘读取是连续的,直到块大小。更少的搜索 = 更高的读取吞吐量。
2。更快的写入
块提供了一个简单的实现,可以映射到 pages,这也导致更高的写入吞吐量。
【讨论】:
以上是关于文件的磁盘扇区和块分配的主要内容,如果未能解决你的问题,请参考以下文章