天天看点

监控磁盘读写状况

您有没有碰到过:没有运行任何程序,磁盘却不断执行读写动作,io指示灯常亮,各种操作迟缓甚至卡顿。碰到这种状况往往会感到束手无策,因为并不是 cpu 居高不下,可以立即结束相关进程。而突然结束进程中断磁盘 io 操作甚至可能导致正在写入的数据丢失。

什么进程在读写磁盘?

可能是 firefox,可能是 updatedb,也可能是正在运行的 pacman -Syu,一切皆有可能 ……

怎么查看是什么进程在不断的读写磁盘呢?

请使用 iotop 命令查看:

1234 # iotop        // 您需要从 Community 安装它后才能使用: sudo pacman -S iotop

通过输出结果,我们可以清楚地知晓是什么程序在读写磁盘,速度以及命令行,pid 等信息。

监控磁盘读写状况

使用 arrow 键移动表头焦点,使列表排序

从截图中可以看到,pacman 在升级系统的时候,io 竟然占到了 99.99%。因为 pacman 的数据库是零散的小文件,所以读取速率不大,但是 io 却很高。通过 iotop,我们可以轻松辨识频繁读写磁盘的程序。

进一步思考:该程序在读写什么文件?

这个问题其实很简单,通过 lsof 命令我们就可以达到目的:

 1 # lsof -c APPNAME

同样,如果我们知道了被频繁读取的文件是哪个,也可以反查程序:

123      # lsof FILE # lsof | grep PATH    // 也可以根据目录进行查询

12345678 # iotop    // 查看用户的进程    # lsof -p PID    // 按该用户进程 pid 查看所打开的文件 # lsof -u USERNAME    // 按用户名查看打开的文件       // 列出某用户的某进程打开的文件 # lsof -u USERNAME -c APPNAME

123 $ top      // 亦可使用 iostat 命令查看,请安装 sysstat 以使用该命令

监控磁盘读写状况

在 cpu(s) 一行,我们可以看到 wa 项,它就是 io waiting,如果该值过大且持续很久,就证明遇到了 io 瓶颈。需要对软件进行优化,或对硬件进行升级。

如何进行 io 瓶颈测试?

大文件 io 测试:

12 $ time dd if=/dev/zero of=test.file bs=1G count=5    // 生成 5g 大小的文件并输出时间,执行速度等信息

1234567 #!/bin/bash  var1=1  while test $var1 -le $1  do touch $var1  var1=`expr  $var1 + 1`  done

执行该 shell 脚本前,请先运行 iotop 等程序监控 io 状况。运行脚本:

1 $ sh ./test.sh NUM    //    NUM 为生成的文件数

为什么会产生 io 瓶颈?

原因是多种多样的,可能是坏道,也可能是程序 bug,甚至是电压不稳。。。

曾经碰到 io 100%,读写速率却只有 2m/s 的移动硬盘,经过检测,大概有 80% 以上区域是坏道部分;还有可能是因为 pv 的直线上升,服务器无法承受如此大的荷载而导致 io 增高;或者 gnome 的 tracker 正在制作索引;也许您忘记了后台正在 making 的程序

由于原因是多种多样的,在此不能一一列举。读者发现 io 瓶颈后,可以对症下药,先软后硬排除问题,使系统恢复到最佳状态。

 查看磁盘读速度:

[root@localhost ~]# /sbin/hdparm -t /dev/sda

/dev/sda:

 Timing buffered disk reads:   84 MB in  4.21 seconds =  19.95 MB/sec

磁盘坏道检测

建议使用livecd或者liveusb对本地磁盘进行检测。如果是对移动存储设备进行检测,请umount后再进行检测,以免数据受损。

umount /dev/sd*

对磁盘进行read-only检测:

sudo badblocks -s  -v  /dev/sd*

因为需要对磁盘进行检测,所以速度非常缓慢,在检测过程中注意不要断电,不要对硬盘进行任何操作,不要移除硬盘,不要物理损伤,不要震动等。

检测过程可以中途终止,也可以指定区块重新开始。

sudo badblock -s -v  /dev/sd*   last  start

如果您检测完成后看到

Pass completed, 0 bad blocks found.那么恭喜,此磁盘通过测试,没有坏道(坏块)。您可以放心使用。

坏道的修复/屏蔽

常见坏道分为以下几种类型:

逻辑坏道

0磁道损坏

物理坏道

坏道一般以单独或者组合形式出现。

逻辑坏道修复:

fsck -a /dev/sd*

就这么简单。

更多fsck用法您可以查看这里或者查看man手册。

0磁道损坏修复:

使用1磁道代替零磁道(操作危险需谨慎)

大致流程就是全盘格式化,然后重新分区,编辑分区表使用1磁道,从而复活硬盘。

操作手册(1,2,3)

物理坏道没有修复可能性,只能进行屏蔽。

继续阅读