如何在驱动器的指定部分启动坏块

如何在驱动器的指定部分启动坏块

当我尝试访问dd200GB Maxtor IDE 硬盘的最后几个块时,遇到了以下错误:

$ dd if=/dev/zero of=/dev/sdc bs=4M status=progress
203901894656 bytes (204 GB, 190 GiB) copied, 7283.07 s, 28.0 MB/s
dd: error writing '/dev/sdc': Permission denied
48621+0 records in
48620+0 records out
208223076351 bytes (208 GB, 194 GiB) copied, 8379.27 s, 24.8 MB/s 

即使尝试使用 恢复,此错误仍然存​​在ddseek=48620其中 48620 是要跳过的块数。为了确定此错误是否是坏扇区导致的,我想badblocks以相同的方式运行,从dd失败的地方开始。

这将转换为badblocks如下命令:

badblocks -svw -b 4000000 -c 500000 -p 1 -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620

...其中-b 4000000等于我在最初dd设置驱动器时使用的 4M 块大小,而 48620 是first_block指定从哪个块badblocks开始的选项。

然而,这会导致两个错误之一。非致命错误...

badblocks: Invalid argument during seekrs)

...在整个命令运行过程中出现,或者单个致命错误结束它:

Segmentation fault (core dumped)

以上错误即使-c设置为更合理的值,例如,也会持续存在2000


此外,当我放弃尝试在失败badblocks的确切块处运行dd时,而是尝试简单地将first_block选项增加到足够高的数字时:

badblocks -svw -b 4000000 -c 1000000 -p 1 -o /cygdrive/b/users/hashim/desktop/maxtorbadblocks.txt /dev/sdc 199148543 12345678 

...出现大量以下错误实例,但命令并未中断:

badblocks: Invalid argument during seekrs)  again get several get the same error.

如何才能badblocks从驱动器中的指定位置启动,从而节省大量运行时间?

答案1

就目前而言,答案只有一半为什么失败了。

此行中的开关不正确:

badblocks -svw -b 4000000 -c 500000 -p 1 \
          -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620

表示-b块大小(一个块中有多少字节),通常是512,通常是10242048, 或者4096. 值为4,000,000不是的倍数512,比任何当前 HDD 使用的容量都要大。

-c每次测试多少个块,乘以传递给的值,-b得出每次读取多少个字节——-b 4000000 -c 500000告诉计算机读取2,000,000,000,000(两万亿)字节。

更糟糕的是,该参数199148543表明badblocks文件系统至少包含那么多块,并且由于块是由交换机定义的-bbadblocks因此认为文件系统至少包含796,594,172,000,000字节,(或796TB,几乎达到 PB 级别)。

由于整个磁盘是200GBbadblocks暂停并打印错误消息。

相关内容