badblocks 仅采用 32 位整数作为开始/结束值

badblocks 仅采用 32 位整数作为开始/结束值

我有一个 4TB 驱动器,块大小为 4096 字节。我想检查一组非常具体的块,大约在第 700,000,000 个块左右是否有坏扇区。

然而,badblocks似乎只支持int32停止和开始块计数,这意味着我不可能指定这个块范围。

还有其他方法可以扫描该驱动器是否有坏块吗?我不想等待 7 个小时来测试整个驱动器。它是阵列中的单个驱动器mdadm,因此不包含可用的文件系统。

答案1

告诉badblocks使用更大的块大小,它将在 2TB 以上工作。我在 WD 6TB 硬盘上使用了它:

badblocks -b 4096 -v /dev/sda

答案2

将坏块限制为 2^32 的补丁

似乎有一个针对坏块的补丁来添加这个特定的限制。请参阅此处,标题为:回复:[PATCH 04/25] libext2fs:拒绝 64 位坏块数字

From: "Darrick J. Wong" <darrick.wong <at> oracle.com>
Date: Wed, 23 Oct 2013 19:43:32 -0400
Subject: [PATCH] libext2fs: reject 64bit badblocks numbers

Don't accept block numbers larger than 2^32 for the badblocks list,
and don't run badblocks on them either.

Signed-off-by: Darrick J. Wong <darrick.wong <at> oracle.com>
Signed-off-by: Theodore Ts'o <tytso <at> mit.edu>

不会添加对坏块的支持吗?

看来badblocks在可预见的将来也不会拥有此功能。

摘录-回复:[PATCH 18/31] libext2fs:坏块应正确处理 48 位块号

是的,我认为坏块在这一点上是残余的,对于大型磁盘阵列,几乎可以肯定块替换将在 LVM、存储阵列或 HDD 级别进行。因此,如果尝试向 mke2fs 传递 64 位块号,那么最好让 mke2fs 抛出错误。

                      - Ted

还有其他方法可以做到这一点吗?

我徒劳地寻找badblocks它的分支或替代品,但什么也没找到。您唯一的选择是使用商业工具,例如斯宾瑞特或者开源工具HDAT2。您还可以使用 HDD 制造商提供的众多驱动器健身工具 (DFT) 之一。也许其中之一可以让您突破 2^32 的障碍。

该怎么办?

在表中的选项中,我使用 HDAT2 和 SpinRite 取得了很好的成功,因此我可能会按顺序使用它们来尝试扫描 700M 范围内的块区域。

相关内容