如何强制重新映射 SMART C5(当前未决扇区计数)中报告的扇区?

edt*_*eke 44 hard-drive smart bad-sectors

我的三星 HM640JJ 硬盘(在 HP Pavilion dv6 笔记本电脑中)的 SMART C5 值为“黄色状态 = 警告”

C5 昨天是 10,今天是 21。

C4 (Reallocation Event Count) = 005 (Reallocated Sectors Count) = 0

如何强制固件重新分配它们?

  • 我删除了分区,再次重新创建它们并格式化了整个驱动器。
  • 我跑了 chkdsk /r /f
  • 我运行了 BIOS 磁盘检查实用程序和其他诊断/修复工具

Ian*_*oyd 134

简短回答:向该部门写一些新内容(甚至是零 - 长格式所做的)。

长答案

今天的硬盘驱动器试图对主机隐藏坏扇区。主机计算机只是要求驱动器返回特定扇区号的内容。通常驱动器读取扇区,将其返回给主机,一切正常。

硬盘驱动器知道它读取的值是否有效,因为驱动器使用纠错码 (ECC)来验证它读取的内容是否正确。如果驱动器检测到该扇区的内容无效,它将重试读取。希望是如果它只是再次读取它,它可能会获得正确的扇区内容。它将不断重试,直到获得一个合适的值,或者达到它的时间限制(正式称为命令完成时间限制,或 CCTL)。

在这些重试期间,驱动器将出现死机;因为它不再响应命令

备用扇区

大多数现代驱动器都包含许多“备用”扇区(例如 1,024 个备用扇区)。如果驱动器将某个扇区识别为坏扇区,它将停止使用它。任何读取或写入损坏扇区的请求都将透明地重定向到备用扇区。这种标记坏扇区并将其数据重新分配到备用扇区的过程称为重新分配事件。已重新分配的扇区总数(以及已用完的备用扇区数)是Reallocated Sector Count

在这个来自我自己的硬盘驱动器的示例中,发现 64 个扇区是坏的。这意味着驱动器的 64 个备用扇区已被调用:

ID                             Current  Worst  Threshold  Raw  
=============================  =======  =====  =========  ===
(05) Reallocated Sector Count  192      192    140        64
Run Code Online (Sandbox Code Playgroud)

在同一个硬盘上,有 4 个重新分配事件。这意味着有四次驱动器将扇区标记为坏扇区,并改为使用备用扇区。

ID                             Current  Worst  Threshold  Raw  
=============================  =======  =====  =========  ===
(05) Reallocated Sector Count  192      192    140         64
(C4) Reallocated Event Count   196      196    0            4
Run Code Online (Sandbox Code Playgroud)

如果它永远无法读取数据怎么办?

这些重读扇区、消耗备件的动作,全都在电脑的背后是一件好事。这意味着主机操作系统不必处理故障扇区的问题。驱动器本身可以处理这些细节。

Bonus Chatter:在过去,您的硬盘驱动器上贴有贴纸。此贴纸包含工厂缺陷清单;驱动器上所有已知坏点的列表。

在此处输入图片说明

如果您对驱动器进行低级格式化,则必须使用工具键入坏点的所有气缸盖扇区位置。
SCSI 驱动器有一个命令 ,IOCTL_DISK_REASSIGN_BLOCKS告诉它们在操作系统检测到坏点后重新分配驱动器上的坏点。在 IDE 驱动器中,这一切都是自动发生的,无需操作系统干预。

理想情况下,驱动器会识别出扇区出现故障,将数据移动到备用扇区,并且不再使用原始扇区。但是,如果驱动器无法成功读取扇区,会发生什么情况?

这是什么Pending Sectors。驱动器检测到某个扇区出现故障,需要重新映射到备用扇区。但它不能这样做,直到它可以成功读取数据。当驱动器知道一个扇区坏了,需要重新映射,但它不能这样做,因为它正在等待从扇区中获得一个好的读取:这称为Pending Sector Count

ID                             Current  Worst  Threshold  Raw  
=============================  =======  =====  =========  ====
(05) Reallocated Sector Count  192      192    140          64
(C4) Reallocated Event Count   196      196    0             4
(C5) Current Pending Sector    100      100    0             2
Run Code Online (Sandbox Code Playgroud)

我的硬盘驱动器有2 个扇区,该驱动器识别为坏扇区,但还不能重新分配。如果您要读取这些“待处理扇区”之一,驱动器可能会重试(重试、重试),并最终向主机操作系统返回读取错误:

在此处输入图片说明

放弃待定部门,它将被重新分配

驱动器最终可以通过两种方式重新分配扇区,并消耗另一个备用扇区:

  • 它终于得到了很好的阅读
  • 你不再关心这个行业是什么了

如果驱动器最终读取了该扇区,则它知道它可以重新分配该扇区。

驱动器重新分配扇区的另一种方式是,如果您让它知道该扇区的内容无关紧要;你不再关心里面有什么了。你是怎样做的?

通过为该行业写一些新东西。

无论何时读取或写入硬盘驱动器上的扇区,都必须读取/写入整个512 字节扇区1。您不能只写入扇区的一部分。当操作系统将数据写入一个扇区时,它必须指定整个512 字节。如果您告诉硬盘驱动器您希望这些新内容替换这个坏扇区,那么驱动器就会知道您甚至不关心当前坏扇区中的内容。然后它可以将坏扇区重新分配给其中一个备件,并且该扇区不再是Pending

这就是为什么当人们询问是否有一些 . 时Current Pending Sectors,常见的建议是使用工具(例如 Western Digital 的 Data LifeGuard)将全零写入驱动器。

在此处输入图片说明

通过向驱动器上的每个扇区写入零,您告诉驱动器它最终可以重新分配所有那些讨厌的待处理扇区。擦除后,您的所有Pending Sectors将变为Reallocated Sectors

ID                             Current  Worst  Threshold  Raw  
=============================  =======  =====  =========  ====
(05) Reallocated Sector Count  192      192    140          66
(C4) Reallocated Event Count   196      196    0             5
(C5) Current Pending Sector    100      100    0             0
Run Code Online (Sandbox Code Playgroud)

注意:并非严格需要使用像 Western Digital 的 Data LifeGuard 这样的“低级”工具。如果您指示 Windows 执行卷的完整格式化(即非快速格式化),它将向卷中的每个扇区写入零。

操作系统文件系统支持将扇区标记为坏扇区

有了这些知识,我们将探索一个常见的令人困惑的场景。

集成驱动电子(IDE)出现之前,主机操作系统负责检测坏扇区、重试读取、将数据移动到另一个扇区并将旧扇区标记为坏扇区。

如果您要chkdsk /r c:使用主机操作系统运行 a ,它会识别出“待处理”扇区是坏的,并将它们本身标记为坏,并且不再尝试使用它们:

> C:\Windows\system32>chkdsk /r c:
The type of the file system is NTFS.
Volume label is OS.

        12 KB in bad sectors.
Run Code Online (Sandbox Code Playgroud)

因此,假设一个 512 字节扇区硬盘驱动器,12 KB 的“待处理扇区”或在此示例中被操作系统标记为“坏扇区”的 12 KB,这将对应于十进制 24 或十六进制 0x18,如智能磁盘实用程序所示如水晶盘信息:

ID   Attribute Name            Current  Worst  Threshold  Raw  
=============================  =======  =====  =========  ====
(C5) Current Pending Sector    100      100    0            18
Run Code Online (Sandbox Code Playgroud)

注意:Western Digital 的 Data LifeGuard v1.31(最新于 2017 年 8 月 31 日)实用程序似乎无法正确显示当前的 SMART 'Raw' 计数器值。

现在,如果您执行完整格式 (将零写入卷中的每个扇区)

在此处输入图片说明

这意味着所有Pending将要重新分配的部门。现在文件系统可以安全地再次使用这些扇区。为了指示归档系统这些扇区不再是“坏”,您可以执行一个选项来重新评估坏扇区:

>chkdsk c: /B
Run Code Online (Sandbox Code Playgroud)

命令文档说的地方

/B              NTFS only: Re-evaluates bad clusters on the volume
                (implies /R)
Run Code Online (Sandbox Code Playgroud)

或者

根据:https : //technet.microsoft.com/en-us/library/cc730714(v=ws.11).aspx

/B              NTFS only: Clears the list of bad clusters on the volume and 
                  rescans all allocated and free clusters for errors. /b includes
                  the functionality of /r. Use this parameter after imaging a
                  volume to a new hard disk drive.
Run Code Online (Sandbox Code Playgroud)

这是一大堆写作,一大堆屏幕截图,用于永远不会被阅读的东西。

  • 我不太明白的一件事是:是否可以(a)显示哪些文件包含当前的 C5 扇区,以及(b)“核”这些扇区,即将它们移动到 C6,并停止尝试读取它们?我不希望我的硬盘陷入无休止的失败读取周期;宁愿将这些扇区涂黑并删除有问题的文件(如果它们很重要,请从其他来源手动恢复它们)。 (3认同)
  • 不过,我不想将整个驱动器归零,只是解决坏的部分。看看那个程序,谢谢 (2认同)
  • 在 Windows 中,将零写入磁盘的最简单方法是使用“diskpart clean all” - 只需确保您选择了正确的驱动器进行清零即可。然而,根据我的经验,有些驱动器非常不愿意重新分配坏扇区。 (2认同)

Aar*_*lla 5

你不需要做任何事情 - 还没有。重新分配计数意味着“磁盘发现缺陷扇区并成功重新分配它”。固件已经解决了这个问题。

您只需要知道驱动器开始出现故障。在未来的某个时候,驱动器将没有剩余扇区可供重新分配,您将丢失数据。如果丢失了一些重要的块,您可能会丢失驱动器上的所有数据。

因此,请密切关注此值或立即购买新驱动器,这样您就可以忘记它了。