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

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

我有一个 1TB 的硬盘,我想在上面运行坏块,但据我所知,这大约需要 3 天时间,我想分块运行它(比如说每晚运行一整夜),这样它所在的计算机就可以在白天使用。这样可能吗?

答案1

有一种方法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 ]

答案2

我在亚特兰大 Linux 爱好者通用邮件列表

经过深思熟虑并阅读了大约 10 遍手册页后,我终于弄明白了这一点。我想分享一下,以防其他人需要这些信息。谷歌搜索并没有多大帮助,因为那些列表通常只是引用手册页。当手册页说 last-block first-block 时,它不希望您输入这些单词,而是希望您输入一个数字。它提到两者都是可选的,但如果我想指定 first block,我不知道如何省略 last-block。

假设您最初在块 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 列表写入文本文件。如果从实时 CD 启动,则重新启动时将丢失此文本文件。

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

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

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

真挚地,

罗恩

答案3

为了明确起见,假设您已经中断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

您可以像这样继续:

badblocks -sv /dev/sdb1 1953512447 284489983

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

相关内容