有没有办法重新启动坏块?

Rob*_*nes 9 linux

我有一个 1TB 的驱动器,我想在上面运行坏块,但据我所知,这大约需要 3 天,我想分块运行它(比如每晚通宵),这样它所在的计算机就可以使用了白天。这样的事情可能吗?

Rob*_*nes 13

我在亚特兰大 Linux 爱好者通用邮件列表上找到了这个问题的很好的答案:

经过反复思考和阅读手册页大约 10 次后,我终于明白了这一点。我想我会分享它以防其他人需要信息。谷歌搜索没有多大帮助,因为这些列表通常只是引用手册页。当手册页说 last-block first-block 时,它不希望您输入这些 WORDS,而是希望您输入一个 NUMBER。它提到两者都是可选的,但如果我想指定第一个块,我无法弄清楚如何省略最后一个块。

假设您最初在块 33000001 停止测试。我将在少一个块处重新开始测试,所以 33000000。

首先,您必须确定分区上的最后一个块号是什么。我找到了两种方法来做到这一点。

  1. 您可以在badblocks没有块号的情况下开始。它会告诉你它正在处理的块范围。

    前任: sudo badblocks -sv /dev/sda3

    它说的是:

    Searching for badblocks in read only nondestructive mode from block to 66828373

    记下此结束块编号。使用CTRL-C终止测试, 然后输入带有所需块编号的命令。

  2. 您可以使用fdisk(或者我认为也可以sfdisk)命令来列出分区信息。信息列之一是块数。找到您感兴趣的分区中的块数并减去 1,因为这些块从 0 开始编号。

    sudo fdisk -l /dev/sda (该选项是小写的 L。在这种情况下,您不指定分区号,只指定硬盘驱动器名称。)

    它说的是:

    /dev/sda2 ... /dev/sda3 ... 66828374 /dev/sda4 ...

    找到您感兴趣的分区并读取块数并减去 1 以找到最后一个块号。

    现在,您可以badblocks按如下方式输入命令。假设您要在块 33000000 的分区中间开始测试。此示例是针对badblocks 文本文件列表的非破坏性读写模式。如果从 live cd 启动,则在重新启动时将丢失此文本文件。

    sudo badblocks -nsv -o ~/Desktop/badblocks.txt /dev/sda3 66828373 33000000

    这将测试从块 33000000 到分区末尾。如果您将 66828374 指定为最后一个块,如 中所述fdisk,它将将该块编号报告为坏块,但实际上,该块编号不存在。

我希望其他人可能会觉得这很有用,因为它确实让我困惑了一段时间。

真挚地,

罗恩


And*_*kyi 7

有一种方法可以指定badblocks应该从哪个块开始和最后一个块,(参见man badblocks):

badblocks [ -svwnfBX ] [ -b block-size ] [ -c blocks_at_once ] [ -e max_bad_blocks ] [ -d read_delay_factor ] [ -i input_file ] [ -o output_file ] [ -p num_passes ] [ -t test_pattern ] device [ last-block ] [ first-block ]


小智 5

为了明确起见,假设您已中断badblocks,并且输出如下所示:

root@black:/media/bigdisk# badblocks -sv /dev/sdb1
Checking blocks 0 to 1953512447
Checking for bad blocks (read-only test): ^X^C56% done, 39:44 elapsed. (0/0/0 errors)

Interrupted at block 284489984
Run Code Online (Sandbox Code Playgroud)

你可以像这样继续:

badblocks -sv /dev/sdb1 1953512447 284489983
Run Code Online (Sandbox Code Playgroud)

请注意,我中断命令的块是最后一个,并且我已将其减一(因为我不确定在该块处被中断是否意味着它已被检查)。据我所知,没有办法只指定最后一个块;必须说明最后一个块,我已经从初始输出中复制了它。