由于一个扇区由一些(512 或 4096)字节组成,因此考虑使用术语“坏位”而不是“坏扇区”似乎很自然。但该术语并未使用。有很多 HDD 错误检查软件会将扇区报告为“坏扇区”,但没有软件会将位报告为“坏位”。为什么会这样?
答案1
磁盘(无论是 HDD 还是 SSD)都无法操纵单个位甚至字节。扇区是磁盘可以使用的最小存储单元。您只能通过读取整个扇区、更改该位并写回整个扇区来写入单个位。另一方面,写入整个扇区不需要额外的读取,因此尽可能避免使用小于位的单位是有意义的。因此,持久性存储完全围绕扇区概念构建。所有分区和文件系统结构都是扇区对齐的,以避免需要低效的部分写入。
现在假设您检测到单个扇区中有一个故障位,并且您有技术可以禁用它。您的整个计算机仅使用 8 位字节,因此整个字节都无法使用。您的扇区现在有 511 字节大小,而不是典型的 512 字节。再次,计算机中的所有东西都假设您能够在一个扇区中容纳 512 个字节,但您做不到,因此整个扇区都无法使用。因此是坏扇区。
此外,跟踪单个位的健康状况绝对不切实际。有关单个扇区的健康状况的信息占用 1 位空间(0 = 坏,1 = 好)。单个 512b 扇区包含 4096 位,因此它可以存储 4096 个扇区的健康状况,因此每 4097 个扇区中就有 1 个扇区被牺牲用于健康位图。这是 0.024%,完全可以接受。如果您要跟踪单个位的健康状况(正如我已经解释的那样,这无论如何都没有用),您需要一个位来记录每个位的健康状况,因此 50% 的存储空间被牺牲用于健康信息。
在实际应用中,坏扇区可能不会以位图形式存储,但用它们来解释问题很容易,而且可以让您了解规模。
答案2
扇区是磁盘读/写命令处理的最小单位。
磁盘实际上并不允许计算机请求单个位(也不是字节——一个扇区通常为 512 或 4096字节(而不是位)。相反,操作系统总是发出“读取整个扇区”命令,并且这些命令不包含任何有关扇区哪些部分已损坏的指示 - 要么磁盘返回整个扇区(必要时使用 ECC 恢复),要么什么都不返回(错误太多,ECC 无法应对)。
我不确定我是否正确理解了该机制,但据我所知:当只有一个坏位时,你甚至不会注意到它,因为 ECC 信息将用于纠正它。但如果扇区损坏超过该点,那么通常 ECC 甚至不知道哪个特定的位是坏的 – 它只知道其中‘超过 X’位是坏的。