マウントしていないディスクに、/proc/diskstats および iostat コマンドからはディスクに実行中の IO があるのはなぜですか?
Environment
- Red Hat Enterprise Linux 4.6
Issue
- /proc/diskstats に、マウントしていないデバイスへの未処理の IO が表示されます。
8 32 sdc 562126 445 67809663 1918357 4902068 0 39216544 4214925992 451 1583514511 2995158897
1 2 3 4 5 6 7 8 9 10 11
-
上述のフィールド #9 は、デバイスへの現在進行中の IO の数です。したがってここでの 451 の IO は、このデバイスへの未処理の状態です。
-
iostat は、ディスクに対して完了する読み込み IO を示します。
Resolution
原因の可能性はいくつかありますが、最も一般的なものはファイルシステムの署名スキャナーです。
queued コマンドは、メタデータのデバイスをスキャンしようとする lvm の結果になる場合があります。sosreport から、このデバイスとその他のデバイスをスキャンするには、lvm フィルターが現在設定されています。
/etc/lvm/lvm.conf:
# By default we accept every block device:
filter = [ "a/sda[1-9]$/" "a/sdb[1-9]$/" "a/sdc[1-9]$/" "a/sdd[1-9]$/" "a/emcpower.*/" "r/.*/" ]
sosreport の pvs の出力によると、/dev/sdN デバイスはいずれも物理ボリュームではないことが分かります。したがって、上述のフィルターでスキャンリストから削除しても問題はありません。
PV VG Fmt Attr PSize PFree DevSize PV UUID
/dev/emcpowera1 -- 0 0 20.00G
/dev/emcpowerb prod5vg lvm2 a- 5.00G 0 5.00G dpWmjp-ByB9-vwHK-oHxb-X0XR-2dQ5-jEVcUK
/dev/emcpowerc prod6vg lvm2 a- 5.00G 0 5.00G HU6UrH-SyRH-2vDm-6Chl-Ucoj-yPMF-KkYI5m
/dev/emcpowerd prod3vg lvm2 a- 268.00G 0 268.00G pgzPN6-QeSB-EgbY-rwBn-mkO6-Ylhc-pIzP7D
/dev/emcpowere orabinvg lvm2 a- 100.00G 0 100.00G Qw2C1G-Lnvq-vR5P-hOAK-x3zD-bRTx-qKE3R6
/dev/emcpowerf homevg lvm2 a- 50.00G 0 50.00G cp5gHm-R1wp-ebQ9-q0I7-2J2k-tFLS-jhfPcm
/dev/emcpowerg archvg lvm2 a- 200.00G 0 200.00G gkcrxe-U1FI-K2aH-ZMfn-O9g0-Lnz2-9tBigx
/dev/emcpowerh prod1vg lvm2 a- 400.00G 0 400.00G yhz2Ee-ZveX-zbsr-v2FO-YoL0-3Ng4-5BtRDA
/dev/emcpoweri prod2vg lvm2 a- 400.00G 0 400.00G foVt7i-c4Qp-F06K-H751-y32f-kdaV-JSUlc7
/dev/emcpowerj prod4vg lvm2 a- 5.00G 0 5.00G PoA275-Z4GS-c8wj-pDxf-vO6J-ssYN-jDji5X
/dev/sda1 -- 0 0 101.94M
/dev/sda2 -- 0 0 64.22G
/dev/sda3 -- 0 0 1.95G
/dev/sdb1 -- 0 0 18.64G
/dev/sdb5 -- 0 0 117.98G
/dev/sdc1 -- 0 0 409.86G
lvm フィルターが問題のデバイスに IO を発行しないように lvm フィルターを変更することができます。
/etc/lvm/lvm.conf:
# By default we accept every block device:
filter = [ "a/emcpower.*/" "r/.*/" ]
これはすべての emcpower デバイスを許可しますが、sda、sdb、および sdc を含むその他のすべてのブロックデバイスを拒否 (除外) します。
lvm.conf に上述の変更を行ったら、変更を有効にするためにいくつかの手順を行う必要があります。
1. lvm キャッシュを削除します。
# rm -f /etc/lvm/cache/.cache
2. キャッシュファイルを再生成します。
# pvscan
# lvscan
# vgscan
上述のコマンドを実行すると正しく動作することを確認します。つまり、pvscan は /dev/emcpowerX などのデバイスを出力し、iostat または /proc/diskstats はデバイスに IO を送りません。
3. 最後に、たとえば、この新しい lvm.conf が含まれるように initrd イメージファイルを再構築します。
# cp /boot/initrd-2.6.9-67.0.7.ELhugemem.img /boot/initrd-2.6.9-67.0.7.ELhugemem.img.BAK
# mkinitrd -v -f /boot/initrd-2.6.9-67.0.7.ELhugemem.img 2.6.9-67.0.7.ELhugemem
Root Cause
LVM は、許可されているデバイスに IO を発行し、オンディスク PV 情報に対してスキャンします。
Diagnostic Steps
lvm が、デバイスへの IO の原因または唯一の原因ではない場合に、マウントしていないデバイスに IO を発行しているプログラムを特定するのにシステムタップのスクリプトが必要になる場合があります。
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments