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

磁盘坏道检测

当磁盘出现如下状况:node

  •  io wait 无端增高或居高不下;linux

  •  硬盘声音忽然由原来的摩檫音变成了怪音;bash

  •  系统没法正常启动,出现“IO error”等提示信息;服务器

  •  mkfs时,到某一进度停滞不前,最后报错,没法完成;并发

  •  每次系统开机都会运行 fsck 扫描磁盘错误;app

  •   对磁盘执行fdisk时,到某必定进度会反复进进退退。ide

        出现如上情况,就须要及时对磁盘进行坏道检测并及时对磁盘坏道进行检测测试磁盘的可用性,并当即备份数据。工具

1.发现硬盘坏道测试

dmesg

当有硬盘坏道时,一般在dmesg输出的信息中会有 Buffer I/O Error,因此常常检查dmesg的输出能够及时发现是否存在硬盘问题。spa

2.检测坏道

2.1 经过fdisk 查看显示全部磁盘或闪存的信息

# fdisk -l /dev/sd*

2.2 使用 badlocks检查 linux 硬盘上的坏道/坏块。也能够修复坏道,但仅限于逻辑坏道,物理坏道只能更换硬盘

# badblocks -s -v /dev/sdg  > 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 选项让它显示操做详情

           -s 在检查时显示进度

           -o<输出文件> 将检查的结果写入指定的输出文件

           -w 在检查时,执行写入测试。

       也能够针对单独分区进行检查。

3.硬盘坏道类型

    硬盘坏道分为物理坏道和逻辑坏道。

    物理坏道:就是硬盘实体有坏的地方,物理坏道推荐换硬盘,固然也有办法从新分区来隔离坏道,不过可能也用不久,因此不推荐。

   逻辑坏道:是磁盘磁道上面的校验信息(ECC)跟磁道的数据对不上号所致。出现这一故障的缘由,一般都是由于一些程序的错误操做或是该处扇区的磁介质开始出现不稳定的先兆。物理坏道也是逻辑坏道产生的一种缘由。

4.修复磁盘坏道

    首先,当检测出坏道以后首先要看下服务器磁盘的灯有没有报警,通常的服务器都有硬盘报警灯,灯显示红色说明磁盘不工做了,这个明显是物理性故障问题,须要更换磁盘。

    其次,若硬盘灯没有报警,或已经换了硬盘,但检查仍然有坏道,此时多是逻辑坏道,须要尝试修复,若能修复说明确实是逻辑坏道,若修复不了说明是物理坏道。

4.1 逻辑坏道修复方式

查看上述分区检查出来的坏道信息:

# tail -f badsectors.txt
205971590
205971591
205971592
205971593
205971594
205971595

4.1.1 先备份数据

若修复的硬盘或分区的重要数据已备份,此部分能够省略

# dd if=/dev/sdg skip=205971590 of=/tmp/205971590-205971595.dat count=5

4.1.2 修复磁盘

硬盘在使用时不能修复,不然可能存在写并发的问题,因此修复前须要umount对应分区(若为系统所在分区就没办法在线修复了,由于没法umount)。

# umount /data02

    但umount可能出现"Device busy"的错误,是由于有程序在使用这个分区,须要将这些进程都关闭。使用fuser(命令以下),其中/data02是分区对应的挂载目录。

# fuser -m /data02

# fuser -m -v -i -k /data02

    第一条fuser命令列出使用/data02的进程ID,第二条列出PID并kill掉进程(带有提示确认),建议先使用第一条命令列出PID,而后针对查看是哪些类型的进程,不要盲目杀死进程。

umount 分区成功后,修复命令以下,其中-s表示给出进度,-w表示写入修复的,后面是结束(END)和开始(START)块号,注意END在前,START在后。


# badblocks -s -w /dev/sdg 205971590 205971595

或者修复后再次检查


# badblocks -s -v /dev/sdg 205971590 205971595

4.1.3 再次检查恢复

恢复数据

# dd if=/tmp/205971590-205971595.dat of=/dev/sdg

从新分区检查

# badblocks -s -v  /dev/mapper/VolGroup-lv_home > badsectors.txt

若没有坏道说明修复已完成,如有坏道能够尝试重复以上方法。

5.屏蔽坏道部分

执行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


6. 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 所有检查修复

 

 

在 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 信息。

相关文章
相关标签/搜索