「Linux」- 使用badblock命令检查磁盘坏块
更新日期:2019年11月17日
内容简介
本文将介绍如何使用badblock命令检测在磁盘中的坏块。
badblock
实用程序 badblock 用于检测磁盘中的坏块。它支持以下几种扫描模式:
只读模式 - 默认模式,但是精准度是最低的;
写入模式 - 有害模式,这是最精准的模式,但是检测时间较久,并且会破坏所有数据;
读写模式 - 无害模式,精准度与写入模式差不多,但是最慢。
如果已知硬盘存在坏块,那只读模式应该是最安全的。
扫描磁盘
使用如下命令可以对磁盘进行扫描:
#!/bin/sh
################################################################################
#1 使用fdisk命令确定要检查的磁盘
################################################################################
fdisk -l # 或者lsblk命令
################################################################################
#2 然后扫描磁盘(这里是/dev/sdc分区)
################################################################################
badblocks -v /dev/sdc > badsectors.txt
#「-v」- 显示操作的细节
#「> badsectors.txt」- 将扫描结果保存到文件中。命令e2fsck、fsck等等可以使用该文件。
################################################################################
#3 扫描特定分区
################################################################################
badblocks -v /dev/sdc1 > badsectors.txt
全盘扫描
但是全盘扫描由一个缺点:每个文件系统”相对于它所在的分区“开始进行块计算。
假如你的第二个分区存在坏块,并且该分区从块1000开始。在进行全盘扫描得到坏块值,减去1000后,得到的值才是你想要的坏块值,后面的计算也要基于该值。
或者,在全盘扫描之后,再单独对坏块所在的分区进行扫描。这样就不需要进行数学计算。
块大小
另外需要注意的是块大小:命令badblock使用1024 BYTE块,因此你需要使用-b选项调整块大小,以匹配在文件系统中的块大小。否则,需要进行数学计算来转换为文件系统块值。
!!!因为在进行文件系统相关的处理时,需要知道文件系统的块大小。通过对应的块大小,得到文件系统中块位置。
分区起始与结束
可以使用fdisk(8)命令确定分区的开始与结束。(对于旧版本的输出,以cylinder为单位,你需要使用-u选项指定以sector为单位)
在使用fdisk命令确定块大小之后,以就可以对块数进行转换,以符合扫描结果。
最后总结
至此,你已经得到了坏块值,该值相对于他们所在的分区。
参考文献