区块和扇区的区别

24
关于这篇文章:硬盘知识:块 vs. 扇区,有一句话是这样写的:
“因为操作系统可以寻址的块数或驱动器地址是有限的。通过将一个块定义为多个扇区,操作系统可以处理更大的硬盘而不增加块地址的数量。”
这是什么意思?什么是“操作系统可以寻址”?接下来的数学计算也不清楚。为什么64乘以512会小于64乘以4?

4
链接已失效,您能否更新一下?否则问题就失去了一些价值... - kebs
1
似乎这个链接有那个内容的克隆版本:http://www.alphaurax-computer.com/computer-tips/hard-drive-knowledge-blocks-vs-sectors - Xavi Montero
关于数学问题... 这篇文章是错误的。当它谈到“64k * 512k vs 64k * 4k”时,应该写成“64k * 512 vs 64k * 4k”(注意512去掉了k,所以实际上64k * 4k比64k * 512要大)。 - Xavi Montero
链接又挂了。我现在用waybackmachine的存档更新了一下。 - undefined
1个回答

55

这样看待问题。在操作系统文件系统中用于存储数据的每个块都需要存储一定量的元数据,以及您正在编写的实际文件数据,例如:时间戳(创建、修改)、文件名、所有权/权限位。对于跨越多个块的文件,您还必须存储每个块的ID以及它们链接在一起的顺序等信息。

在操作系统中确定块大小是一个权衡的问题。每个文件至少必须占用一个块,即使文件长度为0字节,因此文件的元数据也需要附加到某个东西上。除非您可以保证您的文件始终是某个块大小的倍数(例如,在4k块的操作系统中,所有文件均为4k),否则对于不完全适合该块的文件,将会浪费一定数量的空间。

当您需要存储许多小文件时,较小的块大小很好。另一方面,更多块=更多元数据,因此您最终会在开销上浪费大量存储系统来跟踪所有文件的位置。

相反,较大的块意味着较少的元数据,但在存储小文件时也意味着更大的浪费。例如,在4k块中存储的1字节文件会浪费那个块的3.99k。

操作系统必须为每个块分配一个ID号,以便可以唯一地标识它。使用8位ID字段的操作系统只能跟踪256个块,因此,由此延伸,只能跟踪256个文件。但是,如果这些块中的每个块实际上是1兆字节大小,则可以存储高达256兆字节的数据。

您链接的文章存在一个错别字/逻辑缺陷:他们指的是512字节,而不是512k,因此64 * 512字节小于64 * 4k,也就是64 * 4096字节。大多数硬盘都使用512字节的扇区/块大小。

然而,正如之前所讨论的,小块意味着更多元数据。现在驱动器大小已经达到3+ TB,每个块为512字节,因此需要存储3TB/512字节=64.4亿个块的元数据,这是一种严重的空间浪费。因此,现在的驱动器使用4k块,比原先的块大8倍,因此您只需要存储805百万个块的元数据。文件总数减少了8倍,但较少的元数据意味着实际上可以存储更多可用数据。

顺便提一下,64亿个块比32位系统能够直接寻址的上限还要大。2^32的上限约为42亿,因此旧的32位计算机无法使用整个3TB驱动器。因此需要改用更大的块大小。32位计算机轻松处理805百万个块。


非常详细的解释!谢谢!只有一个问题,您是不是意思是块本身包含元数据,也就是说,如果一个文件跨越10个块,那么每个块都会包含一些数据以及元数据,例如它的ID、它在区块链中的序列号等? - SexyBeast
还有一个问题,这行代码的意思是什么:通过将一个块定义为多个扇区,操作系统可以在不增加块地址数量的情况下使用更大的硬盘。 - SexyBeast
6
在现代驱动器中,扇区是过时的概念。它们存在于旧的CHS(柱面、磁头、扇区)定义指定“位置”的驱动器上,这种定义浪费了很多空间。所有现代驱动器都使用LBA(逻辑块寻址),因此扇区实际上已经不再存在。然而,操作系统仍然可以将多个块/扇区链接成一个单一的逻辑操作系统级块以减少空间占用。例如,“驱动器上每3个真实块/扇区将被操作系统视为1个块”。 - Marc B
2
此外,块元数据存储在其他地方。例如,在DOS / Win9x中,那是“FAT”-文件分配表。在类Unix系统中,它是inode表等等... 它不完全是一个文件数据块=一个元数据块。但是,每次您在文件的某个位置使用块时,该块的使用情况都必须记录在另一个块中 - 但是操作系统可以将多个文件块的数据存储在单个元数据块中,因此开销并不太可怕。 - Marc B
所以基本上对于大量的小文件,由于会有大量的元数据,很多块将不得不被牺牲用于存储那些元数据,对吗? - SexyBeast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接