我有一个 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
是 e2fsprogs 代码库的一部分。 git 存储库可用这里。 - 主要项目页面是这里。
- 修复此问题的代码库补丁似乎是这个,libext2fs:拒绝 64 位坏块数字。
不会添加对坏块的支持吗?
看来badblocks
在可预见的将来也不会拥有此功能。
摘录-回复:[PATCH 18/31] libext2fs:坏块应正确处理 48 位块号
是的,我认为坏块在这一点上是残余的,对于大型磁盘阵列,几乎可以肯定块替换将在 LVM、存储阵列或 HDD 级别进行。因此,如果尝试向 mke2fs 传递 64 位块号,那么最好让 mke2fs 抛出错误。
- Ted
还有其他方法可以做到这一点吗?
我徒劳地寻找badblocks
它的分支或替代品,但什么也没找到。您唯一的选择是使用商业工具,例如斯宾瑞特或者开源工具HDAT2。您还可以使用 HDD 制造商提供的众多驱动器健身工具 (DFT) 之一。也许其中之一可以让您突破 2^32 的障碍。
该怎么办?
在表中的选项中,我使用 HDAT2 和 SpinRite 取得了很好的成功,因此我可能会按顺序使用它们来尝试扫描 700M 范围内的块区域。