iostat -eすると出てくる各ディスク毎のエラー数統計だが、ホットスワップにゃ環境だったりするとzfs側ではzpool clearして対処完了してもこっちには残ったままににゃる。
---- errors ---
device s/w h/w trn tot
sd0 0 64 0 64
sd1 0 0 0 0
sd2 0 0 0 0
sd3 0 0 0 0
sd4 0 0 0 0
sd5 0 0 0 0
sd6 0 0 0 0
このまま放置しても動作には影響にゃいし再起動すれば直るんだけどディスク入れ替えたのにカウンタがリセットされにゃいというのは困ったものにゃのでオンラインでこれをクリアしたい。
・・・というFAQはもちろんあるわけで
error_reset.sh:
echo target : sd$1
sd=$(echo "*sd_state::softstate $1" | mdb -kw)
es=$(echo "$sd::print struct sd_lun un_errstats"| mdb -k | cut -d" " -f3)
ks=$(echo "$es::print kstat_t ks_data" | mdb -k | cut -d" " -f3)
ha=$(echo "$ks::print -a struct sd_errstats sd_harderrs.value.ui32" | mdb -k | cut -d" " -f1)
echo $ha/W 0 | mdb -kw
ha=$(echo "$ks::print -a struct sd_errstats sd_softerrs.value.ui32" | mdb -k | cut -d" " -f1)
echo $ha/W 0 | mdb -kw
ha=$(echo "$ks::print -a struct sd_errstats sd_transerrs.value.ui32" | mdb -k | cut -d" " -f1)
echo $ha/W 0 | mdb -kw
こういう.shでクリアできるようだ。
引数にはiostat -eした時のsd?の数字を渡す
./error_reset.sh 0
target : sd0
0xffffff03eec71d30: 0x40 = 0x0
0xffffff03eec71d00: 0 = 0x0
0xffffff03eec71d60: 0 = 0x0
とこんにゃ感じでクリアできる。