2012年(48)
分类: LINUX
2012-11-29 17:20:05
使用 arrow 键移动表头焦点,使列表排序
从截图中可以看到,pacman 在升级系统的时候,io 竟然占到了 99.99%。因为 pacman 的数据库是零散的小文件,所以读取速率不大,但是 io 却很高。通过 iotop,我们可以轻松辨识频繁读写磁盘的程序。
如果你知道有程序在磨你的硬盘,但是你又不能确定是哪一个程序在磨你的硬盘,那么就用 iotop来帮助你吧。
在Ubuntu里安装命令是: sudo apt-get install iotop
安装好之后在终端输入:iotop就可以了
下面来说一具体运用:
可以用左右箭头操作,按 r 是相反方向,按 o 是动态切换
用法 iotop -参数
–version 查看版本信息的
-h, –help 查看帮助信息的
-o, –only 只显示在划硬盘的程序
-b, –batch 批量处理 用来记录日志的
-n NUM 设定循环几次
-d SEC, –delay=SEC 设定显示时间间隔
进一步思考:该程序在读写什么文件?
这个问题其实很简单,通过 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)
物理坏道
物理坏道没有修复可能性,只能进行屏蔽。
如果您已经进行了坏道检测,那么您肯定已经知道坏道(坏块)大致位置以及坏块大小,您需要:
备份硬盘数据
删除所有硬盘分区
根据坏块位置以及大小,估算出所占空间(例如共100个区块,磁盘大小为100g,20-30损坏,则坏块在20-30g这个区间)
进行分区(接上:分区应为 0-15|15-35|35-100,中间的15-35g为有坏道的分区。要对有坏道的分区进行扩容处理,数值不要过小,以免坏道被分到其他分区。)
隔离15-35g这个分区(即不挂载,不读写,不操作)
您的磁盘可用空间减少,但是剩余空间均可用(坏道已经屏蔽)
由于物理坏道具有扩散性,所以建议尽早让磁盘“退休”才是……
分区表修复工具
如果您的分区表已经被损坏,建议使用testdisk进行修复。他可以快速回复分区表,真的非常好用(修复我的硬盘n次!利器也~)
安装
sudo pacman -S testdisk
基本用法(1,2)