当我尝试访问dd
200GB 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
即使尝试使用 恢复,此错误仍然存在dd
,seek=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,通常是1024,2048, 或者4096. 值为4,000,000不是的倍数512,比任何当前 HDD 使用的容量都要大。
是-c
每次测试多少个块,乘以传递给的值,-b
得出每次读取多少个字节——-b 4000000 -c 500000
告诉计算机读取2,000,000,000,000(两万亿)字节。
更糟糕的是,该参数199148543
表明badblocks
文件系统至少包含那么多块,并且由于块是由交换机定义的-b
,badblocks
因此认为文件系统至少包含796,594,172,000,000字节,(或796TB,几乎达到 PB 级别)。
由于整个磁盘是200GB,badblocks
暂停并打印错误消息。