一台ubuntu服务器使用dell md3060e连接了大量磁盘,使用mdadm构建了软阵列raid5。
在使用过程中突然发现系统的load奇高(300多),系统响应变的非常慢,导致各种磁盘读写相关的process都hold了。
- 问题定位
使用dmesg查询系统状态可发现有一块硬盘出现错误。
dmesg 命令主要用来显示内核信息。使用 dmesg 可以有效诊断机器硬件故障或者添加硬件出现的问题。另外,使用 dmesg 可以确定服务器安装了哪些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。执行/bin/dmesg 命令可以查看该记录,开机信息亦保存在/var/log目录中,名称为dmesg的文件里。
使用mdadm可以查询该磁盘对应阵列的状态。
sudo mdadm --detail /dev/md0
查询其中的状态发现该磁盘虽然已经报错,但在阵列中还显示为正常,这个可能就是问题的原因。
2. 问题解决
因此需要将对应的磁盘标记为faulty,让spare状态的磁盘顶上来,以满足raid5的热备需求。(在resync过程中,系统反应实在是过慢,因此尝试了系统重启,然后再进行的操作)
sudo mdadm /dev/md0 --fail /dev/sdw
然后发现resync过程超慢,感觉也是问题,网上搜索了,发现有解决方案:
sysctl -w dev.raid.speed_limit_min=500000
sysctl -w dev.raid.speed_limit_max=5000000
然后可以通过此命令看速度是否有提升:
cat /proc/mdstat
3. 其他工具
可以使用smrtmontools监测硬盘健康状态。
可以使用badblocks检查磁盘坏道。
可以使用dd来格式化有坏道的磁盘。
发表回复