我需要一個在Linux上使用bash,awk,sed監控所有磁盤I/O速率的腳本。問題是它必須每個時間間隔返回一行(所以這一行應該包含:tps
,kB_read/s
,kB_wrtn/s
,kB_read
,kB_wrtn
,但總結爲每個磁盤)。這裏 自然的選擇當然是:用於在Linux上監控磁盤I/O速率的腳本
-d -k -p $interval $loops
將其限制在我使用的所有磁盤:
-d -k -p `parted -l | grep Disk | cut -f1 -d: | cut -f2 -d' '`
現在好的技巧總結列:
-d -k -p `parted -l | grep Disk | cut -f1 -d: | cut -f2 -d' '` > /tmp/jPtafDiskIO.txt
echo `date +"%H:%M:%S"`,`awk 'FNR>2' /tmp/jPtafDiskIO.txt | awk 'BEGIN {FS=OFS=" "}NR == 1 { n1 = $2; n2 = $3; n3 = $4; n4 = $5; n5 = $6; next } { n1 += $2; n2 += $3; n3 += $4; n4 += $5; n5 += $6 } END { print n1","n2","n3","n4","n5 }'` >> diskIO.log
我幾乎沒有,但是這個(在循環中運行)使得每次從頭開始被調用,所以我沒有得到從間隔到間隔的統計數據,但總是平均數(所以每個調用都帶給我相同的結果輸出)。
我知道這聽起來很複雜,但也許有人有一個想法?也許完全不同的方法? Thx。
編輯:
樣品輸入(/tmp/jPtafDiskIO.txt):
> Linux 2.6.18-194.el5 (hostname) 08/25/2012
>
> Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
> sda 0.00 0.00 0.00 35655 59
> sda2 0.00 0.00 0.00 67 272
> sda1 0.00 0.00 0.00 521 274
> sdb 52.53 0.56 569.40 20894989
> 21065384388 sdc 1.90 64.64 10.93
> 2391333384 404432217 sdd 0.00 0.00 0.04
> 17880 1343028
輸出diskIO.log:
16:53:12,54.43,65.2,580.37,2412282496,21471160238
您能否提供樣本輸入以及樣本輸出 – Anders