此次出事的服务器是测试环境的一服务器系统版本为centos5.3,表现的现象是IO非常忙,重起时间也需要半个小时以上,之前对于磁盘没有太多关心,因此事到临头一下子不知道从何查起。
首先是iostat -x 5 %wa在20%左右,列表的%util几首都在100%以上
物理上看4块磁盘做了raid,都亮绿灯。
决定先使用iotop来查看是否有可疑进程,虽然很慢,只能忍受,同时也建议iotop还是必须提前安装好才好,如果linux内核高于2.6.18-128.el5那就很方便。
yum install iotop
如果版本低于2.6.18-128.el5,运行iotop会出现一堆报错信息,需要升级内核
yum -y upgrade kernel kernel-devel
在实际解决问题过程中,由于升级过程非常慢,在晚上执行了,次日回来后发现io忙状况已经消失。莫非centos5.3 linux2.6.18-128.el5有某个bug?总之问题就这样神奇的消失了。
当然这时iotop能使用了,没有可疑的进程。
如果真是磁盘有问题,想要用fsck做检测和修复有什么办法呢?
使用单用户模式
怎么进入?
升级内核后在本机启动(在ssh文本模式看不到),在进入bios界面的后一步进入版本选择(默认选中升级
后的内核版本),如果没有按下enter键会倒数秒后进入新版本。
由于单用户模式,是Readonly的状态,因此可以umount /,可以重置root密码等操作操作,下面做两个案例:
linux root密码忘了怎么办?
在显示linux版本界面时,e进入编辑启动项,a进入修改内核参数,c进入grub命令行状态
按e进入,有三个选项
root
kernel ..
initrd ..
移到kernel项,继续按e进入,可编辑状态,在最后加上" single"按ESC不保存,按Enter保存回到选项界面,
在选中kernel项按b,就启动单用户的模式进入
需要指出的是,加上的" single"只对本次启动不效,下次进入kernel时不会保存上次的修改.
passwd root重置密码
init 6 重启
(此种办法不能远程ssh的方式)
centos可参照界面:http://hepeace.blog.51cto.com/4387185/1308295
linux想检测并修复根目录下的分区
df -l
比如查看到
/dev/mapper/vg1 / 90%
...
进入单用户模式
umount /
e2fsck -a /dev/mapper/vg1
init 6
Linux Rescue
另外一种场景,可能你的系统无法启动因为某个文件或配置被破坏,这时可以使用急救模式,手头准备好一张linux安装盘,通常都会有rescue选项(过程略)
进入linux rescue模式后到bash shell状态下,再进入chroot /mnt/sysimage可以修复系统出错文件等工作,
但是无法umount /
因此无法在linux rescue模式下对根目录所在文件系统进行fsck作磁盘检查和修复
Linux检测磁盘的方法
hdparm
语法:hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c ][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p ][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备]
补充说明:hdparm可检测,显示与设定IDE或SCSI硬盘的参数。测试各硬盘读取速度判断硬盘故障
hdparm -t /dev/hda (IDE硬盘)
hdparm -t /dev/sda (SATA、SCSI、硬RAID卡阵列)
hdparm -t /dev/md0 (软RAID设备)
测试结果在空载情况下应 >40M/s ,在负载情况下平均应 > 20M/s 为正常,如测试结果极低则需要进一步使用硬盘专用检测工具测试是否为硬盘故障。
badblocks
功能说明:检查磁盘装置中损坏的区块。
语 法:badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]
补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
参 数:
-b<区块大小> 指定磁盘的区块大小,单位为字节。
-o<输出文件> 将检查的结果写入指定的输出文件。
-s 在检查时显示进度。
-v 执行时显示详细的信息。
-w 在检查时,执行写入测试。
[磁盘装置] 指定要检查的磁盘装置。
[磁盘区块数] 指定磁盘装置的区块总数。
[启始区块] 指定要从哪个区块开始检查。
例:badblocks /dev/sda -sv
fsck或e2fsck
可自动检查并修复,但必须是umount的状态下