背景

背景

如何在 NTFS 中取消标记坏簇?

背景

我误跑了

>chkdsk /R

在我的固态硬盘上,

/R:定位坏扇区并恢复可读信息(暗示/F)
/F:修复磁盘上的错误

现在我的驱动器上有一个标记为坏簇。我需要取消该簇的坏簇标记。

笔记chkdsk有一个选项可以重新评估集群并将其返回以供使用:

/B:仅限 NTFS:重新评估卷上的坏簇(隐含/R)

不幸的是,只有当群集不再坏时,该选项才会取消标记。无论如何我都需要取消标记群集。

如何取消将 NTFS 群集标记为坏群集?

你为什么做这个?

我和其他数百人为什么问这个问题并不重要。但问题是我的驱动器上有一个坏扇区。是时候用新驱动器替换它了。方法是使用 Windows 软件将 SSD 镜像到另一个 SSD 上镜像

不幸的是,Windows NTFS 镜像中一个已知的错误阻止了镜像的完成,如KB325615

如果磁盘包含坏块则无法创建软件镜像

DMIO 运行以下文件系统,如果在从源磁盘上的扇区读取数据或尝试将数据写入目标磁盘时发现 I/O 错误,它将中止镜像操作。

显而易见的解决办法是收缩操作系统卷,这样坏扇区就会超出卷的末尾。在 Windows 7 中,当您尝试收缩卷它将自动将文件移出。

在此处输入图片描述

这是件好事。以前,如果你想缩小卷,你必须使用碎片整理工具,将所有文件推向驱动器的前端;在末端留下空闲空间。

不幸的是,现在有一个不可移动文件的方式:$BadClus。收缩碎片整理操作在事件日志中记录不可移动的文件:

在卷 OS (C:) 上启动了卷缩减分析。此事件日志条目详细说明了有关最后一个不可移动文件的信息,该文件可能会限制可回收字节的最大数量。

诊断详细信息:

  • 最后一个不可移动的文件似乎是:\$BadClus:$Bad:$DATA
  • 文件的最后一个簇是:0xdc1ded
  • 缩小潜在目标(LCN 地址):0xa91bd9
  • NTFS 文件标志为:-S--D
  • 收缩阶段:<分析>

所以:

  • 我无法镜像卷,除非坏扇区被移除
  • 缩小卷将消除坏扇区
  • 我无法缩小卷,直到稀疏$BadClus文件被移动
  • $BadClus当它物理上占据坏簇时我无法移动
  • $BadClus会物理占用坏簇,而 NTFS 认为该簇是坏的

我如何取消将集群标记为坏集群?

对于那些暂时不开车的人来说

我的问题的解决方案也适用于最常见的情况:

有人将包含坏扇区的驱动器复制到新驱动器,然后好驱动器仍会将这些簇标记为坏簇,尽管它们是好的。碰巧他们有一个可用的解决方法:

>chkdsk /B

但对我而言,这不起作用。(即使对我而言确实有效,但这不是我要问的问题。)

奖金聊天

当然,Kingson SSD 不保留备用扇区。如果保留,它可以透明地为我重新映射备用扇区,而 NTFS 也不必费心考虑。

SpinRite

我尝试使用 SpinRite 来处理 SS 驱动器。它发现了有缺陷的扇区,但无法从驱动器中获取任何值:

══════════════════╤═══════════════════════════╤═════════════════════════════════
cylinder : 7,183  │     data samples : 1,999  │  first uncertain bit : · · · · ·
  sector :    17  │   unique samples :     0  │   last uncertain bit : · · · · ·
    head :   187  │  discarded sples :     0  │   uncertain bit span : · · · · ·

的数量数据样本计数到 2,000,然后循环回零,并继续。

在此处输入图片描述

大约 20 次循环(即 40,000 个数据样本)后,我放弃了。

克隆

再次强调,不要将问题与示例混淆。问题在于如何在 NTFS 中取消将簇标记为坏簇。在我放弃并扔掉 SSD 很久之后,问题仍然存在。不要将我的问题与问题混淆。这并不意味着我可能会尝试真正解决我的问题:

驱动图像XML到达坏扇区并中止。

分区加载失败。出现图形启动屏幕,然后控制台窗口滚动显示文本,然后是黑屏,什么都没有

克隆兹拉拒绝克隆我的SSD:

此磁盘包含不匹配的 GPT 和 MGR 分区:/dev/sdb
它会混淆 Clonezill,并可能使保存的映像无用或无法克隆磁盘。

请修复此问题然后重新启动 Clonezilla。
程序已终止。

在此处输入图片描述

如何在 NTFS 中取消将某个簇标记为坏簇?

答案1

我不会再回答标题问题了。1

首先,请注意,如果扇区确实坏了,取消标记不会使其可读。因此,您的克隆软件很可能会因读取该扇区而卡住。

在 NTFS 中,通过将一个簇分配给一个特殊流,将其标记为坏簇,$BadClus:$Bad,一个稀疏文件。

你需要的是


  • 取消标记全部坏块,有ntfsfix -b -d-b=清除坏块列表,-d=清除/不设置“脏”标志)(另一种方法ntfstruncate作用完全相同2 )。

    • 可能在元数据中引入了细微的不一致(就我而言,一些索引显然变得未排序),我不确定为什么,因此如果/以防万一您收到 FS 错误,请chkdsk -f手动运行或省略在 Windows 启动时触发它。-d
  • 要清除具体的块更加困难,因为我没有找到任何现有的软件可以开箱即用地做到这一点3NTFS 坏扇区解决方案:$BadClus 元文件 - Katy 的代码描述方式 - 基本上,它是手动编辑运行列表和位图。


1 只是因为处理坏扇区 + NTFS + 克隆是一个太广泛的话题。我很乐意回答直接相关手头上的事情。2
检查 了的源代码ntfsfix v2015.3.14。3 对于坚持的,这些做不到:(无法读取无法读取的扇区),
无法 写入偏移量),,,无法打开进行写入)ntfscatntfscpntfstruncatentfsfallocatedd$BadClus:$Bad

答案2

我的硬盘出现了一些坏簇。我用一个已知良好的硬盘替换了它。恢复过程恢复了坏簇数据以及其他数据。这是在 Windows 7 Enterprise 计算机上进行的。

我的解决方案是运行“chkdsk d: /b”(如之前所建议的)。/b 告诉它(仅适用于 NTFS)重新扫描之前标记的坏簇。至少在我的情况下(我怀疑所有支持 /b 的版本都是这样),它会在开始读取扫描之前立即清除坏簇列表。一旦您看到消息“从坏簇文件中删除 X 个簇”,您就应该能够终止 chkdsk 进程(因为它只读取数据)。

注意:如果恰巧在驱动器开头发现坏扇区,chkdsk 确实有可能在您终止进程时更新坏簇文件。我冒了这个险,它成功重置了坏簇文件,而不需要下载一堆其他需要完整 chkdsk 的程序。YMMV。

答案3

首先,最好的方法是克隆驱动器。然后chkdsk /B在新的工作驱动器上使用。

现在,取消标记真正的坏扇区比较棘手。您可以使用:

  • SpinRite, 或者
  • mhdd(打开重新映射)

任何产品都应该重新映射坏扇区,然后 CHKDSK /B 应该取消标记。

下载分区或者部分魔法ISO。从中启动,然后缩小分区。

将要因为 Windows 没有运行,所以此软件无论如何都会缩小分区。然后chkdsk /B处理其余部分。

如果所有这些都失败了,那么您将面临一条痛苦的道路。您需要获取扇区编辑器并手动编辑文件系统。不幸的是,这超出了我对 NTFS 的了解范围。对于 FAT 或 FAT32,这非常简单。

答案4

看起来您的目标是缩小分区的大小,而 Windows 不会因为存在因坏簇而导致的 $BadClus 文件而缩小分区的大小。

我有一个替代解决方案,可以缩小驱动器,而无需直接处理 $BadClus 文件。使用分区向导缩小分区。分区向导易于使用,非商业用途免费,可以从带有 GUI 的 Windows 内部运行,也可以从运行小型 Linux 的 CD 或 USB 启动运行,然后为您提供相同的 GUI。该程序还可以恢复已擦除的分区,并在 MBR 和 GPT 分区表之间进行转换。

我曾遇到过 Windows 无法将分区缩小到某个点以下的问题,然后我将在同一分区上尝试分区向导,它能毫无问题地完成此操作。我想分区向导愿意忽略 $BadClus 文件。我已经使用这个程序超过 8 年了,最后购买了专业版,因为他们值得拥有它。我发现这个程序可以替代我在 1996 年购买的 PQMagic,后者是一款出色的 DOS 分区程序,适用于较小的驱动器。

相关内容