画像やリンクが無効になっている可能性もあるのでご了承下さい。
はじめに
CentOS で SSD をシステムドライブとしているので書き込み量をグラフ化しておけば「あとどれくらい持ちそうかな」というひとつの指標が出来るので管理もし易いかなと思った次第。
今朝方再交換となった Crucial BX500 120GB は TBW が 40TB とかなり低め。それでも理論上は 5 年程度は行けるだろうという物。
そもそも 2,480 円だったんでコスパはかなり良いと考えておいた方が気持ちも安らぐ。
Munin の Plugin を作る
SSD が書き込んだ量をグラフ化する物はザッと探した感じ見つからなかったので自作する他なかった。
smartctl は CentOS 標準の 6.5 だと項目を正しくアサイン出来ていなかったので、7.0 をソースからビルドしてインストールしてある。
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-957.21.3.el7.x86_64] (local build)
この smartctl で取得出来る項目に Total_Host_Sector_Write という項目があった。文字通り書き込んだセクタ数がカウントされていく物。
この値にセクタサイズである 512 を掛けて 1024 の 4 乗 も掛ければ TB 単位の書き込み数が算出出来る。
でもってそれらを踏まえて shell スクリプトをパパッと簡単に書くとこうなる。ファイル名 (プラグイン名) は ssd_hostwritten にしておいた。
#!/bin/bash
# -*- sh -*-
LANG=C
if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi
SCRIPT=${script:-/usr/local/sbin/smartctl}
DEVICE=${device:-/dev/sda}
SECTOR=${sector:-512}
# Configuration.
if [ "$1" = "config" ]; then
echo 'graph_title SSD - Total Host Written.'
echo 'graph_vlabel TB'
echo 'graph_category disk'
echo "hostwritten.label ${DEVICE}"
echo 'hostwritten.type GAUGE'
echo 'hostwritten.min 0'
echo 'hostwritten.max 40'
echo 'hostwritten.draw LINE2'
exit 0
fi
HostWritten=`${SCRIPT} -a ${DEVICE} | grep Total_Host_Sector_Write | awk '{print $10}'`
echo hostwritten.value `echo "scale=3; ${HostWritten} * ${SECTOR} / 1024 ^ 4" | bc`
exit 0
/etc/munin/plugin-conf.d/ 以下のファイル内で次のようなエントリを書けば使用する smartctl のパスや対象デバイスとセクタサイズを指定出来る様にしてある。
[ssd_hostwritten]
user root
env.script /sbin/smartctl
env.device /dev/sda
env.sector 512
作成した Plugin を /etc/munin/plugins/ 以下に設置しつつ chmod +x して置けば動作するものとなる。
そして吐き出されるグラフは次のような感じに。
グラフが一気に落ち込んでいるが、これは最初セクタ数をレポートしているって事を忘れていてそのままグラフ化しつつ桁を間違えていたから。
低い値である最新のデータが正しい物となる。
データ的には 0.032TB だけど Munin が自動的に「ミリ」として表示してくれるから 32m となり 32GB という事になる。GB 単位の表示と同義だけど GiB じゃなくて GB だからその点を考慮しておく事。
おわりに
これで長期運用していって SSD への書き込み量が TBW に近づくなりしたら交換を視野に入れるなどと良い指標となる。
Munin のグラフは一度作ってしまえば基本的な所を使い回し出来るので自作オススメ。
コメント