sarコマンドでディスクIOを見る

sar -Aで取得したシステムの利用状況の中で、ディスクIOを示すものは下記の記述部分。

17:57:57          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17:58:07       dev8-0      8.78      0.00    134.13     15.27      0.01      0.73      0.73      0.64
17:58:07       dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07       dev8-2      8.78      0.00    134.13     15.27      0.01      0.73      0.73      0.64
17:58:07      dev8-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07      dev8-17      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07      dev8-32      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07      dev8-33      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07      dev8-48      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07      dev8-49      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07     dev253-0     16.77      0.00    134.13      8.00      0.01      0.79      0.38      0.64
17:58:07     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
17:58:07       dev9-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

バイス毎のReadやWriteの時間がわかる。
ただ、このままだと、どのデバイスが何か不明。

devX-Yと書かれているXとYの数値はデバイスのメジャー番号とマイナー番号を示している。
バイスのメジャー番号とマイナー番号を確認する方法は下記。

$ ls -l /dev/sd*
brw-r----- 1 root disk 8,  0 12月  6 18:42 /dev/sda
brw-r----- 1 root disk 8,  1 12月  6 18:42 /dev/sda1
brw-r----- 1 root disk 8,  2 12月  6 18:42 /dev/sda2
brw-r----- 1 root disk 8, 16 12月  6 18:42 /dev/sdb
brw-r----- 1 root disk 8, 17 12月  6 18:42 /dev/sdb1
brw-r----- 1 root disk 8, 32 12月  6 18:42 /dev/sdc
brw-r----- 1 root disk 8, 33 12月  6 18:42 /dev/sdc1
brw-r----- 1 root disk 8, 48 12月  6 18:42 /dev/sdd
brw-r----- 1 root disk 8, 49 12月  6 18:42 /dev/sdd1

ここでdiskの右側の数値がメジャー番号、「,」の右側の数値がマイナー番号。
ちなみにソフトウェアRAIDを組んでたり、KVMでディスクパーティションを作成していた場合にも同様に下記のようにして確認可能。
(※環境によってデバイスファイル名は異なるので注意)

$ df -h
$ ls -l /dev/md*
brw-r----- 1 root disk 9, 0 12月  6 18:42 /dev/md0    ←RAIDバイス
$ ls -l /dev/mapper/*
brw-rw---- 1 root disk 253,  0 12月  6 18:42 /dev/mapper/VolGroup00-LogVol00
brw-rw---- 1 root disk 253,  1 12月  6 18:42 /dev/mapper/VolGroup00-LogVol01
crw------- 1 root root  10, 63 12月  6 18:42 /dev/mapper/control

例えばsda1のディスクIOの値を知りたいなら下記をみればいい。

17:58:07       dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

ちなみにデバイスのIOの値だけをとるのであればiostatを用いることで詳細な情報を得ることができ、
バイスのメジャー番号とマイナー番号からどのデバイスかを判断する必要がない。

# iostat -x
Linux 2.6.18-194.26.1.el5 (xxx.yyy.zzz.jp)      2011年01月19日

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.04    0.03    0.88    0.25    0.00   89.80

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               1.08    98.41  2.57  3.76   455.63   817.48   201.11     0.66  103.80   2.21   1.40
sda1              0.00     0.00  0.00  0.00     0.00     0.00    14.65     0.00    6.72   6.61   0.00
sda2              1.08    98.41  2.57  3.76   455.63   817.48   201.11     0.66  103.80   2.21   1.40
sdb             377.30     1.54  7.77  0.15  3080.55    13.57   390.69     0.02    2.96   1.41   1.12
sdb1            377.30     1.54  7.77  0.15  3080.55    13.57   390.69     0.02    2.96   1.41   1.12
sdc             379.67     1.55  5.39  0.15  3080.55    13.58   558.33     0.03    5.57   2.78   1.54
sdc1            379.67     1.55  5.39  0.15  3080.55    13.58   558.33     0.03    5.57   2.78   1.54
sdd             380.03     1.55  5.04  0.15  3080.58    13.57   596.20     0.03    5.82   2.88   1.49
sdd1            380.03     1.55  5.04  0.15  3080.58    13.57   596.20     0.03    5.82   2.88   1.49
dm-0              0.00     0.00  3.65 102.18   455.63   817.48    12.03     0.80    7.54   0.13   1.40
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     8.00     0.00  109.03  21.86   0.00
md0               0.00     0.00  0.11  2.64    14.52    21.09    12.97     0.00    0.00   0.00   0.00


あとはkSarとかにこの結果を投入すれば綺麗にグラフ化してくれます。
kSarでグラフ化した際に表示されるデバイス名はdevXX-YYの形式ですが、
devXX-YYのデバイス名と実際のデバイス名の対応の設定を手動で実施することができるので、
kSarでグラフ化した後にデバイス名登録をするといいかと思います。
「Options」→「DiskName」で設定変更することが可能です。

sarで取れる値の説明

tps : 1秒間のI/Oリクエスト数(転送回数)
rd_sec(rsec)/s : 1秒間の読み込みセクタ数(1セクタ512バイト)
wr_sec(wsec)/s : 1秒間の書き込みセクタ数(1セクタ512バイト)
avgrq-sz : デバイスへのIOリクエストの平均セクタサイズ
avgqu-sz : デバイスへのIOリクエストの待ち行列の平均セクタサイズ
await : デバイスへのIOリクエストの平均待ち時間(単位msec)[待ち行列にいる時間+処理時間]
svctm : デバイスへのIOリクエストの平均処理時間(単位msec)
%util : デバイスへのIOリクエスト中のCPU使用率(ここが継続的に100%だとディスク部分でボトルネックになっている可能性が高い)

ディスクのセクタサイズを確認する方法

「fdisk -l」で表示される下記部分を確認

Units = シリンダ数 of 16065 * 512 = 8225280 bytes

上記内容だと512バイトであることがわかる。