badblocks 实用程序不断报告“最后一个块无效”

badblocks 实用程序不断报告“最后一个块无效”

badblocks我正在尝试在具有单个分区的驱动器上运行。该驱动器上包含 FreeBSD 文件系统。

我使用 Linux live USB 驱动器启动。驱动器已卸载。的输出fdisk -l是:

   Device  Boot     Start          End    Id     System
/dev/sda1     *        63   976773167+    a5     FreeBSD

所以我跑:

# badblocks -v /dev/sda1

它说:

badblocks: invalid last block - /dev/sda1

我找不到任何关于此的有用信息。我badblocks在这里正确使用该实用程序吗?或者这是否表明驱动器出现问题?

答案1

不,这并不表示驱动器出现问题。您收到此错误是因为 badblocks 接受 /dev/sda1 作为最后一个块参数,而不是接受它作为设备。

你问题中的语法对我来说看起来是正确的。尝试在设备后面指定最后一个块参数:
badblocks -v /dev/sda1 976773167

如果这不起作用,请尝试将第一个块也添加到其中:
badblocks -v /dev/sda1 976773167 63

只是为了向您保证,这并不表明您的驱动器出现问题,以下是我添加无效的最后一个块参数“nope”时的输出:

sudo badblocks -v /dev/sdb1 nope
badblocks:最后一个块无效 - 不


以下是我上次使用 badblocks 的 bash 历史记录中的一个示例(需要 sudo 访问权限才能访问我的系统上的这些驱动器):
sudo badblocks -v /dev/sdb1

输出:

检查块 0 到 976751967
检查坏块(只读测试):

如果我在一段时间后使用 Ctrl+C 取消该过程,则输出为:

在区块 7470720 处中断

以下是恢复该进程的语法(请参阅man badblocks):
badblocks -v 设备 [ 最后一个块 ] [ 第一个块 ]

“最后一个块”是设备上要读取的最后一个块,“第一个块”是它应该开始读取的位置。例子:
sudo badblocks -v /dev/sdb1 976751967 7470720

输出:

检查块 7470720 至 976751967 检查坏块(只读测试):

答案2

如今,现代磁盘驱动器硬件上的 badblocks 命令几乎不值得付出努力。这是因为驱动器控制器板在内部识别坏块并从最初分配的“备用”块中进行替换以进行自动替换。如果您用完了这些备用块并且遇到坏块问题,我强烈建议更换磁盘,因为硬件正在变坏。

如果您想了解驱动器的运行状况,大多数现代驱动器都支持 SMART 驱动器接口来报告磁盘运行状况。有许多实用程序可以显示磁盘运行状况的状态并提供有关磁盘运行状况的信息。尝试其中之一。

答案3

您从网页复制了命令。 -v 中的破折号被替换为一些不同的破折号字符。 (比普通破折号稍长)键入命令或以某种方式修复它。

答案4

如果尽管使用正确的语法但您仍收到此错误,并且您使用的是大磁盘(例如几 TB)和小块大小(例如 512 字节),那么您可能会遇到badblocks使用 32 位块编号的限制。

作为解决方法,您可以使用更大的块。要找到badblocks可以使用的最小块大小,您只需badblocks使用不同的值(有-b或没有开始/结束块)运行即可。如果你收到这样的错误

badblocks:对于定义的数据类型来说值太大无效结束块:必须是 32 位值

然后尝试增加块大小(例如-b 512增加到-b 1024-b 2048)直到它起作用。有了这个,你可以使用一些解决方案,但总比没有好。

您也可以ddrescue此时使用,或者联系维护人员来badblocks修复下一个版本中的问题。

相关内容