在linux系统中检测HDD的坏块和坏块
发布时间: 2020-02-28 22:22:57
来源: 51CTO
阅读: 1127
作者:赤练爱
磁盘坏路检测
如果磁盘出现以下情况,io wait会无故变高或变高。
硬盘的声音突然从原来的摩擦音变成了奇怪的声音;
系统无法正常启动,并显示“IO error”等信息;
MFS时,停滞到某个进度,最后报告错误,无法完成;
每次接通系统电源时,都会出现fsck扫描磁盘错误。
对磁盘执行fdisk后,会反复进退直到某个一定的进度。
如果出现这种情况,必须检测磁盘上的故障磁道,检测磁盘上的故障磁道并测试磁盘可用性,然后立即备份数据。
1 .发现硬盘的邪路
dmesg
如果硬盘出现故障,则从dmesg输出的信息通常包含缓冲器I/o错误,以便通过始终检查dmesg的输出可以立即发现硬盘有问题。
2 .检测邪路
2.1在fdisk中显示所有磁盘或闪存信息#fdisk-l/dev/sd*
2.2使用bad locks检查linux硬盘的坏块/坏块。 也可以修复坏的道路,但是仅限于逻辑上的坏的道路,物理上的坏的道路只能更换硬盘。 # bad blocks-s-v/dev/sdgbadsectors.txt
Checkingblocks0to20970495
checking for bad blocks (只读测试) :
唐
Passcompleted,0badblocksfound.(0/0/0Errors ) )。
备注:-v选项显示操作的详细信息
-s检查过程中显示进展情况
-o将检查结果写入指定的输出文件
-w检查期间,执行写入测试。
也可以检查个别的分区。
3 .硬盘坏路类型
硬盘坏电路有物理坏电路和逻辑坏电路。
物理上的邪路:硬盘的主体有不好的地方。 物理上不好的路建议更换硬盘。 当然,也有为了隔离邪路而重新划分分区的方法,但是可能会马上使用,所以不推荐。
坏逻辑:这是因为磁盘磁道上方的磁道数据与检查信息(ECC )不一致。 该故障的原因通常是某些程序的故障和该扇区的磁介质开始变得不稳定的前兆。 物理恶路也是逻辑恶路产生的原因之一。
4 .修复磁盘坏道
首先,在检测到坏的道路之后,首先要看服务器磁盘的灯是否发出了警报。 一般服务器都有硬盘报警灯,灯上有红色表示磁盘失灵。 这显然是物理故障问题,需要更换磁盘。
其次,如果硬盘指示灯未发出警报,或者虽然更换了硬盘,但检查中仍有故障,则可能是逻辑故障,需要尝试修复。 如果能修复的话确实是逻辑上的邪路,如果不能修复的话就是物理上的邪路。
4.1逻辑坏路修复方式
查看上述分区中检查的不良信息: #tail-fbadsectors.txt
205971590
205971591
205971592
205971593
205971594
205971595
4.1.1先备份数据
如果修复的硬盘或分区上的重要数据已备份,请在本节中选择# ddif=/dev/SDG skip=205971590 of=/tmp/205971590-205971595 .
4.1.2磁盘修复
硬盘在使用中无法修复。 否则,可能会出现写入和并发问题,因此在修复之前需要支持umount的分区。 (如果是系统所在的分区,则无法卸载,因此无法在线修复。 )。 #umount/data02
但是,umount可能会出现“设备业务”错误,这是因为程序正在使用此分区,因此必须关闭所有这些进程。 使用fuser。 /data02是与分区对应的挂载目录。 # fuser -m /data02
# fuser -m -v -i -k /data02
第一个fuser命令列出使用/data02的进程ID,第二个命令列出PID,并焊接进程。 建议使用第一个命令列出PID,然后不要随便杀死进程,以确定是哪种类型的进程。
umount分区成功后,修复命令如下所示。 其中-s表示进度,-w写入已修复的内容,后跟结束(END )和开始(开始)块编号。 请注意,END在前面,START在后面。
# bad blocks-s-w/dev/SDG 205971590205971595
或修复后再次检查
# bad blocks-s-v/dev/SDG 205971590205971595
4.1.3复检恢复
数据恢复# ddif=/tmp/205971590-205971595.datof=/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 信息。