![SSD:“坏块”/“e2fsck -c”与重新分配/重新映射的扇区](https://linux22.com/image/224335/SSD%EF%BC%9A%E2%80%9C%E5%9D%8F%E5%9D%97%E2%80%9D%2F%E2%80%9Ce2fsck%20-c%E2%80%9D%E4%B8%8E%E9%87%8D%E6%96%B0%E5%88%86%E9%85%8D%2F%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E7%9A%84%E6%89%87%E5%8C%BA.png)
该badblocks
实用程序允许用户查找设备上的坏块,并e2fsck -c
允许将此类坏块添加到坏块索引节点,以便它们不会用于实际数据。但对于 SSD,众所周知,坏扇区通常会由驱动器透明地重新分配(重新映射)(但是,仅当发生写入时)。那么,在 SSD 上使用badblocks
/有意义吗?e2fsck -c
我想
badblocks
单独获取有关 SSD 健康状况的信息是有意义的,例如通过考虑坏块总数(我不知道smartctl
smartmontools 是否可以做同样的事情......也许经过长时间的测试smartctl -t long
,但我还没有'没有看到任何明确的文档);- 不应该使用它
e2fsck -c
(它将坏块添加到坏块索引节点),因为由于可能的重新分配,关联的数字(逻辑地址?)可能会变得过时。
但这些实用程序的手册页中没有任何关于 SSD 情况的警告。所以我想知道...
答案1
硬盘驱动器还会在写入时重新映射故障扇区,并且这样做已经有几十年了;这并不是 SSD 特有的。与硬盘相比,SSD 的主要问题badblocks
是写入整个驱动器所带来的磨损量(但即使这也不一定很严重)。
这种重新映射(不影响外部可见的块标识符)意味着使用来badblocks
避免写作写入块是没有用的——当遇到坏块时,实际上最好写入它,以便驱动器可以在必要时重新映射它。并且用于badblocks
识别无法读取的块也不是特别有用;如果数据很重要,最好使用诸如ddrescue
尝试恢复它之类的工具,如果数据不重要,最好覆盖该块,以便驱动器可以在必要时重新映射它。
驱动器自身的测试可用于识别坏块;为此,最好的选择是离线测试,因为这是更新最多错误跟踪字段的方法(从而检查最多错误)。如果您定期运行该命令并查找非零“离线不可纠正”扇区计数,您应该得到与运行相同的结果badblocks
。 (运行smartctl -a
并查看“已更新”列中具有“离线”的字段。)
无论如何,在现代驱动器上,如果驱动器变得足够糟糕,以至于其重新映射无法应对,因此从文件系统中排除块将是有用的,那么是时候回收它了。
也可以看看Arch 维基讨论badblocks
v. 重新映射。badblocks
可以用来强制驱动器固件识别坏块,但我怀疑在 SSD 上更有针对性的方法(至少在写入时)会更好。