michael1983
作者michael1983联盟成员·2019-07-04 13:53
技术总监·某证券

linux系统下检测硬盘上的坏道和坏块

字数 2478阅读 5753评论 2赞 2

磁盘坏道检测

当磁盘出现以下情况:

  • io wait 无故增高或居高不下;
  • 硬盘声音突然由原来的摩檫音变成了怪音;
  • 系统无法正常启动,出现“IO error”等提示信息;
  • mkfs时,到某一进度停滞不前,最后报错,无法完成;
  • 每次系统开机都会运行 fsck 扫描磁盘错误;
  • 对磁盘执行fdisk时,到某一定进度会反复进进退退。

出现如上状况,就需要及时对磁盘进行坏道检测及时对磁盘进行坏道检测以测试磁盘可用性,并立即备份数据。

1. linux系统下检测硬盘上的坏道和坏块

1.通过fdisk 查看显示所有磁盘或闪存的信息

fdisk   -l   /dev/sd*

2.使用 badlocks检查 linux 硬盘上的坏道/坏块

# badblocks -v /dev/sdb1  > badsectors.txt
或者  # badblocks  -s -v /dev/sdb1  > badsectors.txt 
Checking blocks 0 to 20970495
Checking for bad blocks (read-only test): 
done                                                 
Pass completed, 0 bad blocks found. (0/0/0 errors)

备注: -v选项让它显示操作详情

磁盘有坏道

前提: 如果有坏道,前提对数据做备份,把重要的数据做备份后在尝试修复。

如果磁盘上没有发现坏道,卸载磁盘并像下面这样让系统不要将数据写入汇报的扇区中。

执行e2fsck(针对 ext2/ext3/ext4 文件系统)或fsck命令,命令中还需要用到badsectors.txt文件和设备文件。

备注:-l 选项告诉命令将在指定的文件 badsectors.txt 中列出的扇区号码加入坏块列表。

------------ 针对 for ext2/ext3/ext4 文件系统 ------------
# e2fsck -l badsectors.txt /dev/sdb1 
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1: Updating bad block inode.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sdb1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdb1: 12/1310720 files (8.3% non-contiguous), 128782/5242624 blocks

------------ 针对其它文件系统 ------------
$ sudo fsck -l badsectors.txt /dev/sda10

fsck

参数:

filesys : 磁盘设备名称(eg./dev/sda1),挂载(mount)点 (eg. / 或 /usr)

-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数

-s : 依序一个一个地执行 fsck 的指令来检查

-A : 对/etc/fstab 中所有列出来的 分区(partition)做检查

-C : 显示完整的检查进度

-d : 打印出 e2fsck 的 debug 结果

-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行

-R : 同时有 -A 条件时,省略 / 不检查

-V : 详细显示模式

-a : 如果检查有错则自动修复

-r : 如果检查有错则由使用者回答是否修复

-y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复 。

2. 在 Linux 上使用 Smartmontools 工具扫描坏道

这个方法对带有 S.M.A.R.T(自我监控分析报告技术Self-Monitoring, Analysis and Reporting Technology)系统的现代磁盘(ATA/SATA 和 SCSI/SAS 硬盘以及固态硬盘)更加的可靠和高效。S.M.A.R.T 系统能够帮助检测,报告,以及可能记录它们的健康状况,这样你就可以找出任何可能出现的硬件失效。
你可以使用以下命令安装smartmontools:

------------ 在基于 Debian/Ubuntu 的系统上 ------------

$ sudo apt-get install smartmontools

------------ 在基于 RHEL/CentOS 的系统上 ------------

$ sudo yum install smartmontools

安装完成之后,使用 smartctl 控制磁盘集成的 S.M.A.R.T 系统。你可以这样查看它的手册或帮助:

$ man smartctl
$ smartctl -h

然后执行 smartctrl 命令并在命令中指定你的设备作为参数,以下命令包含了参数 -H 或 --health 以显示 SMART 整体健康自我评估测试结果。

$ sudo smartctl -H /dev/sda10

检查 Linux 硬盘健康
上面的结果指出你的硬盘很健康,近期内不大可能发生硬件失效。

要获取磁盘信息总览,使用 -a 或 --all 选项来显示关于磁盘所有的 SMART 信息, -x 或 --xall 来显示所有关于磁盘的 SMART 信息以及非 SMART 信息。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论2 条评论

jackyduysjackyduys项目经理苏源
2019-07-04 16:55
没有badblocks这个命令
jackyduysjackyduys项目经理苏源
2019-07-04 16:55
没有badblocks这个命令
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广