磁盘坏道检测
当磁盘出现以下情况:
io wait 无故增高或居高不下;
硬盘声音突然由原来的摩檫音变成了怪音;
系统无法正常启动,出现“IO error”等提示信息;
mkfs时,到某一进度停滞不前,最后报错,无法完成;
每次系统开机都会运行 fsck 扫描磁盘错误;
对磁盘执行fdisk时,到某一定进度会反复进进退退。
出现如上状况,就需要及时对磁盘进行坏道检测并及时对磁盘坏道进行检测测试磁盘的可用性,并立即备份数据。
1.发现硬盘坏道
dmesg
当有硬盘坏道时,通常在dmesg输出的信息中会有Buffer I/O Error,所以经常检查dmesg的输出可以及时发现是否存在硬盘问题。
2.检测坏道
2.1 通过fdisk 查看显示所有磁盘或闪存的信息
#fdisk-l/dev/sd*
2.2 使用 badlocks检查 linux 硬盘上的坏道/坏块。也可以修复坏道,但仅限于逻辑坏道,物理坏道只能更换硬盘。
#badblocks-s-v/dev/sdg>badsectors.txtCheckingblocks0to20970495Checkingforbadblocks(read-onlytest):donePasscompleted,0badblocksfound.(0/0/0errors)
备注: -v 选项让它显示操作详情
-s 在检查时显示进度
-o<输出文件> 将检查的结果写入指定的输出文件
-w 在检查时,执行写入测试。
也可以针对单独分区进行检查。
3.硬盘坏道类型
硬盘坏道分为物理坏道和逻辑坏道。
物理坏道:就是硬盘实体有坏的地方,物理坏道推荐换硬盘,当然也有办法重新分区来隔离坏道,不过可能也用不久,所以不推荐。
逻辑坏道:是磁盘磁道上面的校验信息(ECC)跟磁道的数据对不上号所致。出现这一故障的原因,通常都是因为一些程序的错误操作或是该处扇区的磁介质开始出现不稳定的先兆。物理坏道也是逻辑坏道产生的一种原因。
4.修复磁盘坏道
首先,当检测出坏道之后首先要看下服务器磁盘的灯有没有报警,一般的服务器都有硬盘报警灯,灯显示红色说明磁盘不工作了,这个明显是物理性故障问题,需要更换磁盘。
其次,若硬盘灯没有报警,或已经换了硬盘,但检查仍然有坏道,此时可能是逻辑坏道,需要尝试修复,若能修复说明确实是逻辑坏道,若修复不了说明是物理坏道。
4.1 逻辑坏道修复方式
查看上述分区检查出来的坏道信息:
#tail-fbadsectors.txt205971590205971591205971592205971593205971594205971595
4.1.1 先备份数据
若修复的硬盘或分区的重要数据已备份,此部分可以省略
#ddif=/dev/sdgskip=205971590of=/tmp/205971590-205971595.datcount=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/sdg205971590205971595
或者修复后再次检查
#badblocks-s-v/dev/sdg205971590205971595
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 中列出的扇区号码加入坏块列表。
------------针对forext2/ext3/ext4文件系统------------#e2fsck-lbadsectors.txt/dev/sdb1e2fsck1.42.9(28-Dec-)/dev/sdb1:Updatingbadblockinode.Pass1:Checkinginodes,blocks,andsizesPass2:CheckingdirectorystructurePass3:CheckingdirectoryconnectivityPass4:CheckingreferencecountsPass5:Checkinggroupsummaryinformation/dev/sdb1:*****FILESYSTEMWASMODIFIED*****/dev/sdb1:12/1310720files(8.3%non-contiguous),128782/5242624blocks
------------针对其它文件系统------------$sudofsck-lbadsectors.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 的系统上 ------------
$sudoapt-getinstallsmartmontools
------------ 在基于 RHEL/CentOS 的系统上 ------------
$sudoyuminstallsmartmontools
安装完成之后,使用 smartctl 控制磁盘集成的 S.M.A.R.T 系统。你可以这样查看它的手册或帮助:
$mansmartctl$smartctl-h
然后执行 smartctrl 命令并在命令中指定你的设备作为参数,以下命令包含了参数 -H 或 --health 以显示 SMART 整体健康自我评估测试结果。
$sudosmartctl-H/dev/sda10
检查 Linux 硬盘健康
上面的结果指出你的硬盘很健康,近期内不大可能发生硬件失效。
要获取磁盘信息总览,使用 -a 或 --all 选项来显示关于磁盘所有的 SMART 信息, -x 或 --xall 来显示所有关于磁盘的 SMART 信息以及非 SMART 信息。
如果觉得《linux系统下检测硬盘上的坏道和坏块》对你有帮助,请点赞、收藏,并留下你的观点哦!