“坏块”的完整读/写表面扫描与内置的有何不同SMART 扩展自检?
看起来它们都是全表面扫描,那么为什么badblocks -vws
测试 1TB 驱动器需要 3 天时间,而 SMART 只需 2 个半小时(至少这是 smartmon 给我的时间估计)?
答案1
SMART 表面测试几乎肯定是一次单一的、肯定是非破坏性的读取过程。正如已经指出的那样,它也是驱动器内部的;除了可能的次要控制数据外,测试期间不会向主机传递任何数据或从主机传递任何数据。
另一方面,badblocks -w
对驱动器进行四次传递,每次一次写入和一次读取。仅这一点就导致测试时间相差 8 倍,再加上旋转延迟。由于它是在主机上运行的软件,因此所有这些数据都需要通过磁盘接口传输到 RAM 并由软件处理(在我们的例子中是坏块)。
如果我们采用最坏情况的旋转延迟 1×(磁盘在写入数据后需要旋转一圈才能读回数据,这几乎就是您所看到的,如果您喜欢 badblocks,它会先填满整个磁盘,然后再将其全部读回,而不是一次对一个物理轨道进行 I/O,而使用 LBA 几乎是不可能的),我们最终会得到最坏情况 (1+1) × 8× = 16× 完成操作所需的时间。16 × 2.5h = 40h,这肯定与您的数字一致,并且仍然假设我们只处理驱动器上的数据存储,并且它的发生速度与驱动器可以维持顺序 I/O 的速度一样快。
答案2
SMART 短测试和长测试仅执行(局部)扇区读取;它也不会破坏数据。读取的数据仅传输到板载控制器,而不是主机 PC。SATA 接口在测试期间基本处于空闲状态,PC 上的 HDD 活动指示灯不应亮起。
badblocks -vws
正在请求写入扇区然后读取和验证操作。每次写入和读取都会增加磁盘旋转次数,以及通过 SATA 接口传输数据的时间和主机 PC 处理时间。HDD 活动指示灯应该大部分时间都亮着。
答案3
https://wiki.archlinux.org/index.php/badblocks#Comparisons_with_Other_Programs
需要注意的是,有些制造商的测试程序不会打印完整的测试结果,并且只允许一定数量的坏扇区来判断是否通过。但是,制造商程序通常比坏块更快,有时甚至更快。
因此,请尽可能使用 badblocks 的破坏性彻底测试。
编辑:我说的破坏性是指许多现代硬盘的工作负载为 180TB/年,也就是说,如果你运行完整的坏块测试集来测试 12TB 硬盘,你将承受 96TB 的工作负载。如果工作负载仅指写入,则可能是 48TB,这可能是这种情况,但记录不全。