创建有坏块硬盘的镜像软件 raid。如何检查数据完整性?

创建有坏块硬盘的镜像软件 raid。如何检查数据完整性?

系统事件日志中有如下错误:“设备 \Device\Harddisk1\DR1 有一个坏块。”

由于上述原因,我在此磁盘和另一个磁盘上创建了 Raid 1。我使用的是 Windows Server 2008 R2 软件 RAID 卷。

磁盘管理器中的卷被标记为“冗余失败”和“存在风险”。我可以命令“重新激活磁盘”,然后它开始重新同步,但过了一会儿它就停止了,并返回到以前的状态。它停止在旧磁盘上的坏块上重新同步,并在系统事件日志中创建相同的错误。

旧磁盘状态为错误,新磁盘状态为在线。

如何检查新磁盘上是否有旧磁盘的精确副本?这是服务器计算机,因此我希望在此检查期间保持其运行。

我只想摆脱这个有问题的磁盘,并将其保留在新磁盘上。我不在乎坏扇区,因为我有数据备份。我只是不想重新安装整个东西。

磁盘管理屏幕

答案1

首先:

  1. 事后创建 RAID 1 卷并不是处理磁盘错误的有效方法。

  2. 由于 RAID 1 镜像的创建在到达坏块时失败,因此您可以放心地假设您确实不是有坏块的原始磁盘的完整副本。无需验证此假设。

  3. 卸载磁盘 1 后,chkdsk /r在驱动器 C: 和 G 上运行:应该标记坏扇区,将任何可读数据移至驱动器的其他区域,并防止将来出现与相同坏扇区有关的读取错误。它不会防止有坏扇区的(可能出现故障的)磁盘进一步损坏。

如果chkdsk /r不能解决问题,这里有一种方法可以将所有可恢复数据移动到新磁盘,避免由于坏块导致的故障:

  1. 如果您还没有这样做,请确保您拥有最新且完整的备份。
  2. 在 Windows 磁盘管理中,卸载并重新格式化磁盘 1。
  3. 正确关闭计算机。
  4. 使用实时 CD 或实时 USB 启动 Linux,例如 PartedMagic。Ubuntu 安装光盘也可以使用。
  5. 挂载两个磁盘。找出哪个物理卷是新磁盘,哪个是旧磁盘。(查看命令的输出mount,不带任何参数运行,可能会有所帮助。)
  6. 使用命令将数据从旧硬盘复制到新硬盘dd。请务必指定noerrorsync选项,以便忽略坏块。新驱动器上坏块的内容(已丢失)将被替换为零,因此跨坏块的任何文件都将被损坏。但是,这些文件已经无法读取,因此不会造成额外损害:

    dd if=/dev/<Disk0> of=/dev/<Disk1> bs=512 conv=noerror,sync

用实际的设备标识符(例如 、 等)代替sd0上面sd1<Disk0><Disk1>。不要意外地从新磁盘复制到旧磁盘,因为这将是灾难性的。此外,请注意,此操作将运行慢慢地noerror(即比磁盘的连续读/写速度慢得多),因为块大小较小。但是,我认为将和sync一起使用(忽略坏扇区)不会起作用dd除非将其块大小设置为磁盘扇区的实际大小,否则在新驱动器上用零填充它们,而不会丢失任何可恢复的数据。

答案2

从概念上讲,为了成功创建镜像,来自源卷的所有数据都必须可读,以便目标磁盘包含源的精确副本。

所有现代 SATA 驱动器都具有内部机制,可自动将坏块重新映射到备用位置。驱动器可以在某些条件下自动执行此重新映射,例如在某个位置写入失败时。但是,驱动器无法在后续读取失败时重新映射,因为无法读取磁盘内容来重新映射数据。因此,让错误保持原样是对磁盘驱动器破坏性最小的行为。

对于当今的大规模多 TB 驱动器,即使是一个原本完好的磁盘也会发生这种情况。仅仅因为几个块无法读取,并不意味着磁盘坏了或需要更换。

当您在 Windows 和大多数其他操作系统中设置镜像时,使用 chkdsk 命令来检测和修复坏块是毫无意义的。Chkdsk 不会纠正这些问题。原因是 chkdsk 在文件系统级别工作,并将坏块存储在文件系统结构中。RAID 在文件系统下的磁盘级别工作,因此完全忽略了 NTFS 和 NTFS 坏块列表的存在。

修复具有内部重映射的磁盘上的读取错误的方法就是写入无法读取的块。如果该区域有缺陷,磁盘将透明地重新映射该区域,随后对该区域的读取将成功。这是纠正读取错误的最快和最省力的方法,因此磁盘可以同步,但可能不是最安全的,因为写入操作封存了恢复无法读取数据的所有希望。此外,如果适用的话,写入您可能怀疑有故障的磁盘并不是一个成功的策略。

不幸的是,我不知道是否存在这样的实用程序,如果在合理次数的读取尝试后仍无法读取坏块,则可以读取并覆盖坏块。以前我不得不使用“dd”手动执行此操作,方法是扫描不可读的位置并覆盖它们。

一种更安全的方法是使用 ddrescue 等工具复制磁盘(使用 sourceforge 提供的 g4l (Ghost4Linux) iso 映像启动)dd rescuse 首先复制尽可能多的数据,然后最终重试那些有读取错误的块,直到所有重试都用尽为止。如果您怀疑驱动器可能出现故障,这是一种更安全的方法。

答案3

更新:这是不是正确答案根据微软

您可以运行文件系统检查来查找坏块,它会告诉您磁盘上是否有任何不可读的数据。右键单击每个磁盘(C: 和 G:),选择“工具”、“错误检查”。并确保选择“扫描并尝试恢复坏扇区”。

如果磁盘 0 上有一些不可读的数据,您就会知道,因为 Windows 最终也会将磁盘 0 标记为坏的。

对于命令行用户:

chkdsk /R G:
chkdsk /R C:

不确定如何处理 100MB 的启动分区,但我敢打赌你也可以检查它(它确实说它是 NTFS)。

相关内容