这个命令:
badblocks -svn /dev/sda
它有什么作用?它只是报告坏块吗?或者它是否以某种方式处理坏块,这样我就不必担心它们?
我阅读了手册man badblocks
,但我没有得到-n
选项:
-s Show the progress of the scan by writing out rough percentage completion of
the current badblocks pass over the disk. Note that badblocks may do multiple
test passes over the disk, in particular if the -p or -w option is requested
by the user.
-v Verbose mode. Will write the number of read errors, write errors and data-
corruptions to stderr.
-n Use non-destructive read-write mode. By default only a non-destructive read-
only test is done. This option must not be combined with the -w option, as
they are mutually exclusive.
badblocks -svn /dev/sda
持续了将近两天的运行输出:
更新
一些帖子建议在运行后badblocks -svn /dev/sda
,硬盘控制器会处理坏块。没有把握。
让硬盘控制器用备用块替换坏块。
https://askubuntu.com/a/490552/507217
如果您以这种方式完全处理了磁盘,则磁盘控制器应该已将所有坏块替换为工作块,并且重新分配的计数将在 SMART 日志中增加。
https://askubuntu.com/a/490549/507217
聪明的
badblocks
运行命令后,我通过以下方式检查了 SMART 表:
smartctl --all /dev/sda
请注意,Current_Pending_Sector
原始值为56
. 28
是报道的两倍badblocks
。也许他们是相关的。
错误解释
根据这个:
badblocks
错误日志的格式为reading/writing/comparing
. 就我而言,所有28
错误都是阅读错误。这意味着没有应用程序可以读取这些块。
操作系统日志
我查看了操作系统日志sudo journalctl -xe
。实际上,SMART 会抛出有关这些56
坏扇区(28
坏块)的错误:
smartd [1243]:设备:/dev/sda [SAT],56 当前不可读(待处理)扇区
结论
我宁愿在为时已晚之前备份数据并更换硬盘。
由该选项触发的“非破坏性读写模式
-n
”将测试数据写入每个块,就像-w
, 并强制磁盘接受写入、重新分配错误块或返回写入错误。然而,它最大的优势在于它首先读取它即将覆盖的块,并在写入测试数据后重新写入该数据。这意味着
badblocks
完成后,磁盘应该包含与开始运行之前相同的数据。过程
警告
将一个好的数据块写入磁盘将导致预期的操作:该块将被写入。但是,如果写入失败,磁盘固件将自动且透明地将块地址重新映射到其备用块之一,并在磁盘上的新位置为您重试写入。如果该写入成功,您将不会知道任何不同,并且磁盘看起来完全正常。(在 SMART 表中,Sector Reallocated 计数器将增加 1。)最终,随着时间的推移,备用块的集合可能会用完,从这一点开始,本应重新映射的磁盘写入将失败。
一个完整的磁盘写入测试,例如由or提供的测试
badblocks
,将强制写入所有磁盘块,确保它们都对您可用,或者突出显示无法重新映射的磁盘块。-w
-n
请注意,这
badblocks
并不能保证您没有丢失数据:如果它无法读取一个块,它就无法在测试后重写它,因此它不会执行写入测试(但会报告该块是坏的)。如果badblocks
无法读取块,那么任何其他应用程序都无法读取,并且您的数据将丢失。我的建议是,如果您有任何无法重新映射的磁盘块,请尽快更换磁盘,因为您不再有任何安全网。(就个人而言,我会在达到此阶段之前更换这样的磁盘。)该
ddrescue
工具可能有助于将数据从这个损坏的磁盘复制到新磁盘。