QNAP TS-121でsmartmontoolsを使う


 久々に技術寄りの記事であるな。

 QNAP TS-121に、外付けHDDケース(WD Red 4TB入り)をeSATAで接続して、Q-RAID1とかいう怪しいブツでミラーリングを始めたのであるが。
 どうも外部接続ドライブに対するSMARTの監視方法が見当たらないのだ。それ困るじゃん?
 SMARTで寿命の予測なんか出来ないけど、壊れた時にSMART監視ソフトで気付くということは結構あるからなあ。

 つーかQ-RAID1とかいう変なのを使うくらいなら素直に2ベイのQNAP買ってRAID1で良かったんじゃね、って思う人がそろそろ多数かもしんないけど、「RAID1で二台まとめて死にました」の記憶が哀しすぎるので、まだまだ我が道を行くのである。普通は2ベイの方がいい気もしますが。
 元々、Q-RAID1なんて仕様不明のブツ使わんで、QNAPもう一台買ってホットスタンバイだぜー、とか思ってたんだけどさ。高いので。ここは過渡的な環境ってことで一つ。使ってる人が少なそうな機能に依存するのは危険な気もするのだが。

 まあ、ベイの数はどうでもいいや。本題に進もう。

 QNAP使ってたら、smartmontoolsを使いたい人も多いと思うんですよ。CrystalDiskInfoみたいに、代替処理が入ったら即警告するレベルならいいんだけど、QNAPの報告機能がどんな基準なのか分からんしさー。SMARTの標準だとすげー緩い基準だし。
 なので、ipkg版smartmontoolsを試してみたけど、

[~] # ipkg install smartmontools
Installing smartmontools (5.40-3) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/smartmontools_5.40-3_arm.ipk
Configuring smartmontools

#################################################################
#
#   To automatically start smartd on bootup, edit
#
#     /opt/etc/init.d/S20smartmontools
#
#   and follow the instructions in this file. smartd can be
#   configured in /opt/etc/smartd.conf
#
#################################################################

Successfully terminated.
[~] # smartctl -i /dev/sda3
smartctl 5.40 2010-10-16 r3189 [arm-none-linux-gnueabi] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

Segmentation fault
[~] # ipkg remove smartmontools
Removing package smartmontools from root...
smartd: no process found
Successfully terminated.
[~] #

こんな感じでセグフォするので消した。
 原因はどうやら、smartmontoolsが5.39でC++の新しい機能を使うようになって、GCC 4.2.3がARMだとダイヤモンド継承絡みの最適化でバグるとか何とか。でもダイヤモンド継承は必要だから使ってるらしい。GCCを-fno-toplevel-reorderで走らせれば動くぜ、と。なるほど。このipkg版の存在する意味が分からんな。
 つまりあれだな、QNAPでGCC使えるようにしないと駄目か。めんどくせえ予感。Debian化しちゃう人の気持ちが少し分かる気もした。

 調べてるうちに、QNAPにデフォで入ってる/sbin/nasutilにsymlinkしてるget_hd_smartinfoでSMART情報が取れる、と判明。

[~] # get_hd_smartinfo
Usage: get_hd_smartinfo [OPTION]...
Print HardDisk SMART Information.

        -h, Display this help and exit.
        -d, NUM Set disk number. (NUM > 0)
        -i, Timer Interval.(sec)
        -o, When -i exist,save to output File.(default save to /tmp/sd[a-g]_smart_xxxx)
        -m, When -i exist,mask attribute ID number(e.g -m 194,131)
[~] # get_hd_smartinfo -d 1
001 Raw_Read_Error_Rate          0        200 200 051 OK
003 Spin_Up_Time                 6008     219 219 021 OK
004 Start_Stop_Count             7        100 100 000 OK
005 Reallocated_Sector_Ct        0        200 200 140 OK
007 Seek_Error_Rate              0        200 200 000 OK
009 Power_On_Hours               334      100 100 000 OK
010 Spin_Retry_Count             0        100 253 000 OK
011 Calibration_Retry_Count      0        100 253 000 OK
012 Power_Cycle_Count            2        100 100 000 OK
192 Power-Off_Retract_Count      1        200 200 000 OK
193 Load_Cycle_Count             2509     200 200 000 OK
194 Temperature_Celsius          37       115 113 000 OK
196 Reallocated_Event_Count      0        200 200 000 OK
197 Current_Pending_Sector       0        200 200 000 OK
198 Offline_Uncorrectable        0        100 253 000 OK
199 UDMA_CRC_Error_Count         0        200 200 000 OK
200 Multi_Zone_Error_Rate        0        100 253 000 OK
[~] #

なるほど。193のLoad_Cycle_Countが凄いけど気にしないぜ。005と196と197と198が0ならいいのよ。

 こいつにPythonでも組み合わせれば自動監視も楽勝かなーと思ったけど、eSATAとかUSBとかに接続したドライブを指定出来ない模様。外部ドライブにも対応してくれよーとか、外部ドライブのSMART情報取る方法どこにも無いんだけどーとか、フォーラムで要望出した人はいたんだけど、中の人に「NASに何を求めてるんすか」みたいな感じで切り捨てられてた。うむ。QNAP買ったの間違いだったろうか、という気分に少しなったな。安いPC買った方が良かった説も。
 その要望のところに、smartmontoolsでも取れなかった、みたいに書いてあるのが不吉だけど、まあ試してみよう。

 えーと、QNAPでsmartmontoolsを動かせた人の話は、と。Projekt Qnap(追記:多分閉鎖?)ってとこにあるな。
 割とそのまま素直な内容に見えるので、必要最小限っぽいところを切り出して軽くアレンジ。

cd /tmp
ipkg install make
ipkg install gcc
ipkg install grep
ipkg install gawk
ipkg install optware-devel
export PATH=/opt/bin:$PATH
wget 最新版URL
# http://sourceforge.net/projects/smartmontools/files/ の中に最新版がある筈
tar zxf smartmontools-バージョン番号.tar.gz
cd smartmontools-バージョン番号
./configure CXXFLAGS='-g -O2 -fno-toplevel-reorder -Wall -W'
make
make install
update-smart-drivedb

ってとこか。ipkg installは一行にまとめられそうな気もするけど。
 なお、この記事を書いた時点では、smartmontoolsは6.2が最新版である。

 んで、インストール実行。
 あっさり完了。

 んじゃー走らすか。dfした感じだと、eSATAは/dev/sdzみたいだから、

[~] # smartctl -d marvell -a /dev/sdz

と。-d marvellは重要。(追記:QTSとsmartmontoolsを両方更新したら、/dev/sdz/dev/sdza-d marvell-d satにそれぞれ変更しないと駄目になった)
 で、行けた。ちゃんと情報表示されてるじゃーん。良かった良かった。
 でもさー、こんくらいnasutilで対応させらんないのかね。いいけどさ。

 次は、監視させる訳だが、smartdで行けるかどうか。
 監視基準は、CrystalDiskInfoと同等でいいや。監視対象は/dev/sda/dev/sdzの両方にしよう。となると、どうすればいいのかな。えーと。
 QNAPで任意のアプリケーションを自動的に起動させる方法から調べてみようか。QNAPedia Community Wikiの記事を参考に、なるべく素直に真似する感じで。

 今のファームでも通用するやり方は、QPKGでパッケージがインストールされてるフリをする方法っぽい。
 サンプルを真似して、/etc/config/qpkg.confの下の方に、以下の内容を追加してみる。

[autorunSmartmontools]
Name = Autorun Smartmontools
Version = 6.2
Author = autorun
Date = 2013-12-03
Shell = /share/HDA_DATA/.qpkg/autorun/smartd.sh
Install_Path = /share/HDA_DATA/.qpkg/autorun
QPKG_File = autorun_smartmontools.qpkg
Enable = TRUE

ブラウザでApp Centerを開くと、おー、マイアプリに登録されてる。あとはこの内容通りに/share/HDA_DATA/.qpkg/autorunディレクトリを作成して、その中に必要なファイル一式を作れば良さそうだな。
 なお、このシステムはRAMディスクにマウントされてる場所が非常に多いので、HDD上に実体のあるディレクトリに置かないと再起動で何も無かったことになる。TS-121だと/share/HDA_DATAが良さげだけど、機種によって場所は変わる模様。
 あと、QPKG_Fileの指定は、どうせ存在しないので適当な名前にした。平気かどうか知らんけど。

 上のShellってとこに指定したのが起動スクリプトらしいので、今度はそのsmartd.shを書く。

#!/bin/sh
/usr/local/sbin/smartd -c /share/HDA_DATA/.qpkg/autorun/smartd.conf --interval=600 -p /var/run/smartd.pid

ってとこか。
 インターバルは、まあ、デフォの30分でいい気もするけど、何となく10分に。別に固まったりもしないようだし、1分くらいでもいいかもなあ。
 smartd.confは、デフォの/usr/local/etc/smartd.confは変更せず、起動スクリプトと同じ場所に一から作ることに。
 PIDファイルは、まあ、あって困ることも無いから指定しておく。

 次は、smartd.conf。飽きてきたが適当に頑張ろう。

DEFAULT -d marvell -n standby,q -a -R 5! -s S/../.././02 -s L/../01/./08 -m foo@example.com -M exec /share/HDA_DATA/.qpkg/autorun/smartd-mailer.sh
/dev/sda
/dev/sdz

こんな感じかねー。
 -n standby,qは、スタンバイモードで止まってる時にSMART読みでスピンアップさせない為に指定。まあ、スピンダウンしない設定にしてる筈だけど一応。
 -R 5!は、代替セクタが出た時に致命的と判定させたいので指定。
 まあ、何かやたらと色々指定出来るので便利そうだ。後で不都合なことがあったらまた設定を弄ってみよう。

 と、説明を端折ったけれども、最後の-Mの指定は説明せんとくん。
 これは、smartdのエラー報告をメールでやらせたい時に、どうやって送るかを指定するオプションなんだけど、無指定だとmail経由で送るらしい。QNAPには存在しません。うむ。
 QNAPでスクリプトからメールを送る方法をフォーラムで探すと、sendmail -tを使ったら行けた、とのこと。一方、送信者であるsmartdの仕様は、mailが駄目な場合はスクリプトに渡すのが一番楽っぽい。
 以上により、-M exec /share/HDA_DATA/.qpkg/autorun/smartd-mailer.shという指定が入っているのであった。

 ということで、smartd-mailer.shを書こう。

#!/bin/sh
{ echo -n -e "To: $SMARTD_ADDRESS\nSubject: $SMARTD_SUBJECT\n\n"; cat; } | /usr/sbin/sendmail -t

これでどうだ。
 んで、忘れずにまとめてchmod u+x *.shをしておく。
 最後に、メールテストの為にsmartd.confの一行目の末尾に-M testを追加して、

[~] # /share/HDA_DATA/.qpkg/autorun/smartd.sh

で起動。よし、テストメールが正常に届いた。メールクライアント側で迷惑メールに入らないように設定して(重要)、さっき追加した-M testを消して、起動し直して、終わりー。うへー。疲れたわー。
 でも、実際にSMARTエラーが発生した時にちゃんと動くのか不明。一見動きそうに見えるけど、「これじゃ動かねーよバーカ」とかあったら是非コメントを。

 そして、Q-RAID1とやらのミラーリングは糞遅かった。eSATAなんだし、もーちょい何とかならんのかな。psで見る限り、rsync 3.0.7を改造して動いてるっぽい雰囲気ではあるけど、何でこんなに遅いんだろう。
 いつまでも終わらないし、終わるまでは再起動もしたくないんで、smartdが自動で起動するかのテストも出来ないのだが。失敗したら報告の記事書いて、ここに追記もすればいいか。
 Q-RAID1がハードリンクをちゃんと処理するかとかも確認するつもりだったけど、こっちは特に異様なことが起きなければ報告の記事は書かなくて良さそうかなー。

追記:
 Q-RAID1はハードリンクを理解しなかった。フォーラムでも六年以上前に「-H付けて」「検討しとくわ」ってやり取りがあったんで、分かってるけど放置っぽい。これも「所詮NASですから」ってことかね。
 まあ、データ置き場にハードリンクなんて普通使わないだろ、って言われればそれまでだが。世代管理出来ないなーどうしよう。

追記2:
 再起動したらsmartdは自動起動しなかった。ぐぬぬ。Q-RAID1は頭から同期し直しだけど10分くらいで完了。まあただのローカルrsyncみたいだしな。
 自動起動は、調べても今一つ良く分からんし、もうめんどくせーから多重起動対策した起動スクリプトをcronで毎時間起動とかで誤魔化すかなー。

追記3:
 ファームを更新(QTS4.0.6→4.1.0)したらsmartmontoolsのtarball取ってくるとこからやり直しになった。毎回必要かは分からんけど。若干めんどくせー。インストール先をHDA_DATAの中にした方が良かったかも?
 で、smartmontoolsも6.2→6.3.1になって、QTSとsmartmontoolsのどっちのせいか分からんけどややこしい問題多発。対応した設定は本文中に追記。
 更にVLANとかGmailセキュリティ強化とかの都合でうまくメールも届かず、面倒なのでPythonでemailとsmtplibを使ってsmartd-mailer.pyとか書いて解決。SMTP認証をスクリプトで書くと何か気持ち悪いが。実に色々と面倒であった。
 つーことで、元から不親切な記事だったけど、いよいよ使いにくい記事になった。俺だって「これコピペすりゃ大体使えるぜー」って記事にしたい気はするんだけども何だかだるくてもー。

(Visited 773 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください