我们经常收到关于手动锁定和重新分配硬盘驱动器上的坏扇区的问题。关于这个问题的一个方面,即硬盘驱动器控制器和完全格式化,似乎存在明显矛盾的信息。
硬盘控制器
硬盘控制器会自动识别坏扇区,锁定(标记)它们,然后自动重新分配内容。SMART 信息中报告了这一情况。我的理解是,这是一个“随机”过程,即当控制器在使用硬盘期间偶然发现坏扇区时,就会发生这种情况。
完整格式
关于这个问题的公认答案是,如何在Windows 7中隔离硬盘上的坏道?引用了微软对完整格式的描述。它谈到了包括扫描坏扇区在内的过程,在 Vista 及更高版本中,这是通过将整个分区写入零。
含义
其含义似乎是,完整格式化使用驱动器控制器的自动化过程,而零填充为控制器提供了一种检查每个扇区的方法。扇区验证可能由格式化实用程序本身控制,但并未对此进行描述。
无固有读取验证
在最近的一个问题中,零填充、完整格式化和 CHKDSK 如何修复坏扇区?,在答案的评论中对此进行了讨论。在此评论,用户锯末状态,
文件系统的零填充或“格式化”使用普通的写入操作。写入后没有自动验证或读取,但必须进行读取才能检测到坏扇区。因此,我不希望控制器维护的坏扇区列表发生任何变化。
我尝试研究这个问题,但没有发现任何关于坏扇区清理的文章提到使用完整格式化作为实现这一点的方法,这与 sawdust 的评论一致。
这让我想到了这个问题以及这两个要素:
完整格式化如何识别坏扇区? 即,坏扇区识别(读取验证)是否由控制器作为其对零填充的自动响应的一部分进行管理,或者格式化实用程序是否执行每个扇区的读取?
什么情况会触发硬盘控制器的自动过程来锁定扇区并重新分配内容? 即,如果写入本质上不涉及读取验证,那么该操作是否仅由无法正确读取扇区(至少在初次尝试时)触发?
和推论:如果格式化实用程序执行其自己的读取验证,我认为这将针对零填充(然后标记外部坏扇区列表,如 cybernard 的答案中所述),那么该读取操作是否也会触发控制器的自动验证?也就是说,这不会创建冗余检查,那么为什么需要外部列表?
答案1
完整格式化只是隐藏了坏扇区。大多数文件系统都有坏块列表,它只是在文件系统中添加了坏扇区标记,以适当的方式指示不要使用我。
硬盘内置 SMART。自我监控和修复工具。每个扇区都有一个 ecc(纠错数据)。最终,如果物理硬盘读取扇区时遇到足够困难,它将用备用扇区替换坏扇区。备用扇区通常非常有限,大多数驱动器上可能只有 100-300 个。当使用这些备用扇区时,SMART 会发出警告,表示您的驱动器即将发生故障。此列表会隐藏坏扇区,即使格式化也是如此。
写入时,它会验证结果并写入新的 ecc 数据。但是,完整格式化不会写入整个驱动器,只会写入文件系统结构。它只是读取整个驱动器。
错误是通过不匹配的 ECC、读取扇区所需的时间以及其他内部测量来检测的。格式化实用程序需要标记坏扇区的一个原因是物理驱动器只有 100-300 个备用扇区。另一个原因是格式化实用程序没有被编程为能够与 SMART 对话并告知它存在问题。
只有 Windows 7 及更高版本才有能力与 SMART 通信,而且即便如此,很多时候这种能力也未被利用。
一个重要的警告是,硬盘制造商不想要 SMART,因此被迫实施它,它通过诉讼正确地服务于内存。然而,在许多情况下,制造商限制了它的实用性。SMART 应该在读/写失败时重新分配一定数量的扇区,但我通过现实世界的经验发现,要么阈值过高,要么被忽略。
很少有程序可以强制硬盘重新分配坏扇区 mhdd 和 spinrite,但即便如此,我也看到它们无法重新分配许多扇区。
答案2
完整格式化如何识别坏扇区?即,坏扇区识别(读取验证)是否由控制器作为其对零填充的自动响应的一部分进行管理,还是格式化实用程序执行每个扇区的读取?
谁说“完整格式”应该“识别坏扇区”?
我进行了一些计时测试,结果表明 Windows 7 格式仅写入扇区。
您可以拥有包含本专利这是由可选的写入-读取-验证功能集实现的。写入-读取-验证的使用可以通过每次操作所需的额外旋转的性能下降来检测。
如果没有读取操作,就无法检测到扇区数据记录中的任何错误。
什么情况会触发硬盘控制器的自动过程来锁定扇区并重新分配内容?即,如果写入本身不涉及读取验证,那么该操作是否仅由无法正确读取扇区(至少在初次尝试时)触发?
“锁定一个扇区”不是常规术语。
坏扇区被重新映射,并在本文。
主要缺陷在制造过程中被重新映射。
驱动器使用寿命期间积累的缺陷由控制器重新映射并保存在其他列表中。重新映射的标准可能因供应商而异,最低标准是重复的不可纠正(读取)错误。扇区标识记录中的不可纠正错误将是重新映射的直接原因。
推论是:如果格式化实用程序执行其自己的读取验证,我认为这将针对零填充(然后标记外部坏扇区列表,如 cybernard 的答案中所述),那么该读取操作是否也会触发控制器的自动验证?也就是说,这不会产生冗余检查,那么为什么需要外部列表呢?
再次,我没有发现任何证据表明 Windows 7 在分区格式化期间明确执行了除写入操作之外的任何操作。
零填充没有什么独特之处。它只是在执行低级格式化时恰好是默认数据。ECC 能够检测(并纠正)多个位的错误突发。
您认为多余的部分是由于环境所致。
较旧的磁盘控制器缺乏处理能力和内部存储来执行坏块维护。
坏块管理工作留给主机上的操作系统/文件系统软件来完成。
随着分区位记录的出现,格式化命令从 ATA4 命令集中删除。删除此格式化命令需要 HDD 控制器承担一些坏块维护工作。
实际上,这对 HDD 制造商来说是一个胜利,因为主要缺陷列表将被隐藏,并且可以通过接受更多缺陷来提高盘片产量。
因此,HDD 控制器的坏块维护可以降低制造商的成本。这可以降低操作系统/文件系统的一些复杂性,但可能会影响性能(即额外的寻道)。
操作系统/文件系统的坏块维护通常只是阻止坏扇区的分配。因此,不会像重新映射那样影响性能,但每个坏扇区的整个分配单元(又称簇)必须不可分配。
操作系统/文件系统无法消除其坏块维护,因为需要向后兼容非 ATA4 或更新的旧 HDD。