简答:向扇区写入一些新的内容(甚至是零–长格式化就是这样)。
长答案
今天的硬盘驱动器试图向主机隐藏坏扇区。主机只要求硬盘返回特定扇区号的内容。通常情况下,硬盘会读取扇区,将其返回给主机,然后一切正常。
硬盘知道它所读取的值是否有效,因为硬盘使用 纠错码(ECC) 来验证它所读取的内容是否正确。如果驱动器检测到扇区的内容无效,它将重新尝试读取。希望如果它只是简单地再次读取,它可能会得到正确的扇区内容。它将继续重试,直到得到一个好的值,或者达到它的时间限制(正式称为 命令完成时间限制,或CCTL _)。
在这些重试过程中,硬盘将出现死机;因为它不再响应命令。
备用扇区
大多数现代硬盘都包含一些“备用”扇区(例如1,024个备用扇区)。如果硬盘识别出一个扇区是坏的,它将停止使用该扇区。任何读取或写入该损坏扇区的请求都会被透明地重定向到备用扇区。将坏扇区标记出来,并将其数据重新分配到备用扇区,称为重新分配事件。而被重新分配的扇区总数(以及有多少备用扇区被用完)就是重新分配扇区计数。
在我自己的一个硬盘的这个例子中,发现有64个扇区是坏的。这意味着硬盘的64个备用扇区已经被调用使用。
ID Current Worst Threshold Raw
============================= ======= ===== ========= ===
(05) Reallocated Sector Count 192 192 140 64
在这块硬盘上,有4次重新分配事件。这意味着硬盘有四次将扇区标记为坏扇区,并使用备用扇区。
ID Current Worst Threshold Raw
============================= ======= ===== ========= ===
(05) Reallocated Sector Count 192 192 140 64
(C4) Reallocated Event Count 196 196 0 4
如果它永远无法读取数据怎么办?
这些背着电脑重新读取扇区、消耗备用扇区的行为是件好事。这意味着主机操作系统不必处理失效扇区的问题。硬盘本身可以自己处理这些细节。
附加聊天 。在过去的日子里,你的硬盘在出厂时都会贴上一张贴纸。这个贴纸包含了 Factory Defect List;硬盘上所有已知的坏点的列表。
如果您对硬盘进行低级格式化,您必须使用工具输入所有坏点的Cinder-Head-Sector位置。
SCSI 驱动器有一个命令, IOCTL_DISK_REASSIGN_BLOCKS
,用来告诉它们在操作系统检测到坏点后重新分配驱动器上的坏点。在IDE驱动器中,这一切都会自动发生,不需要操作系统的干预。
理想情况下,硬盘会识别出扇区故障,将数据移动到一个备用扇区,然后再也不使用原来的扇区。但如果硬盘无法成功读取扇区,会发生什么情况呢?
这就是Pending Sectors
的意思。硬盘已经检测到一个扇区失效,需要重新映射到备用扇区。但在它能成功读取数据之前,它不能这样做。当硬盘知道一个扇区坏了,需要重新映射,但它还不能这样做,因为它正在等待从扇区获得良好的读取:这就是所谓的待定扇区计数 。
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
我的硬盘有2个扇区,硬盘识别为坏扇区,但还不能重新分配。如果您要读取其中一个 “待定扇区",硬盘可能会重试(重试,再重试),并最终向主机操作系统返回一个读取错误。
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
放弃待定扇区,它将被重新分配
有两种方法可以让硬盘最终**重新分配扇区,并消耗另一个空闲的扇区:
- 它最终得到了一个很好的读取
- 你不再关心扇区中的内容
如果硬盘最终读取了扇区,那么它知道它可以重新分配扇区。
硬盘重新分配扇区的另一个方法是让它知道该扇区的内容无关紧要,你不再关心它的内容。如何做到这一点呢?
在扇区中写入新的内容。
每当你从硬盘上读取或写入一个扇区时,你必须读取/写入整个512字节的扇区1。你不能只写一个扇区的一部分。当操作系统向一个扇区写入数据时,它必须指定整个512字节。如果你告诉硬盘,你想让这些新的内容取代这个坏扇区,那么硬盘就会知道你根本不关心坏扇区中当前的内容。它就可以重新分配一个坏扇区到其中一个备用扇区,这个扇区就不再是Pending了。
这就是为什么当人们问到关于 如果有一些Current Pending Sectors
,通常的建议是使用一个工具(如Western Digital的Data LifeGuard)将所有零写入硬盘。
> C:\Windows\system32>chkdsk /r c:
The type of the file system is NTFS.
Volume label is OS.
12 KB in bad sectors.
通过向硬盘上的每一个扇区写0,你是在告诉硬盘,它终于可以重新分配所有那些讨厌的待分配扇区。擦除之后,所有的Pending Sectors
都会变成Reallocated Sectors
。
ID Attribute Name Current Worst Threshold Raw
============================= ======= ===== ========= ====
(C5) Current Pending Sector 100 100 0 18
注意:并不是一定要使用像Western Digital的Data LifeGuard这样的 "低级 "工具。如果您指示Windows对卷进行全格式化(即非Quick格式化),它将对卷中的每个扇区写入零。
操作系统的文件系统支持将扇区标记为坏扇区
有了这些知识,我们将探索一个常见的混乱情况。
在IDE出现之前,主机操作系统负责检测坏扇区,重新尝试读取,将数据移动到另一个扇区,并将旧扇区标记为坏扇区。
如果你要使用主机操作系统运行chkdsk /r c:
,它会识别出"待定”扇区是坏的,并且自己将它们标记为坏的,并且再也不会尝试使用它们:
>chkdsk c: /B
所以假设一个512字节扇区的硬盘,12KB的 “待定扇区",或者在这个例子中,12KB被操作系统标记为 "坏扇区",这将对应于十进制24或十六进制0x18,因为将由S. S.M.A.R.T.磁盘实用程序(如Crystal Disk Information)所显示的那样。
/B NTFS only: Re-evaluates bad clusters on the volume
(implies /R)
注 。Western Digital 的 Data LifeGuard v1.31(截至 8/31/2017 的最新版本)实用程序似乎无法正确显示当前 S.M.A.R.T. "原始 "计数器值。
现在,如果您执行全格式(将零写入卷中的每个扇区):
/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.
这意味着所有那些Pending
的扇区将被重新分配。现在归档系统可以安全地再次使用这些扇区了。为了指示文件系统这些扇区不再是"坏的”,你可以执行一个选项,让它重新评估坏的扇区。
命令文档中说的是
或者
根据https://technet.microsoft.com/en-us/library/cc730714(v=ws.11).aspx
这是一大堆的文字和一大堆的截图,为了一些永远不会被阅读的东西。