Raspberry Pi外付けストレージの状態をメールで通知するには

Raspberry PiのUSB端子に接続したSSDやHDD等のストレージ。

動作が不調になったとき、メールで知らせてくれるように、smartdデーモン(サービス)をインストールして設定することが可能です。

通知を受けることで、故障の初期段階での対応が可能となり、大切なデータのバックアップや部品交換によるダウンタイムの短縮等が可能になります。

そのような通知の設定手順を記録させて頂こうと思います。


smartdによるストレージ状態通知設定手順

Raspberry Piのメール送信設定

通知の手段としては、Eメールを選択しました。

個人的には、このような緊急性の高い通知の手段としては、もっとリアルタイム性の高いもののほうが良いと考えています。(メールは、自分から読みにゆく必要があるため

たとえばRocket.Chatのようなメッセージサービスも使用したいのですが、SNSの状況が流動的なため、次回の課題にしようと思います。

ストレージの状態を通知する対象のRaspberry Piにて、メールを送信できるように設定します。

今回は、Gメールアカウントを使用させて頂き、こちらの記事の内容で、sendmailによるメール送信が可能になるように設定しました。

Raspberry PiからGmailを送信するには
メールを送受信できるように、メールサーバを構築すると、ドメインやらセキュリティやら色々と大変のため。 メール発信元としてGma...

ストレージの状態取得はsmartdを使用

障害の早期発見・故障予測のために、S.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology)が策定・使用されています。

SATA HDDからNVMe SSDまで、多くのストレージで実装されているようです。最新のストレージにも実装されており、お手元のストレージの多くが対応しているかと思います。

そして、ストレージのS.M.A.R.T.をモニタリングするデーモンとして、smartdが実装されています。

そのsmartdと、メール通知のためのmailをインストールします。

sudo apt install smartmontools bsd-mailx

smartdがメールを送信する際、sendmailを使用しているのではなく、mailコマンドを使用している、というのが豆のようです。


smartctlコマンドによるストレージの状態確認

smartmontoolsは、ストレージの状態確認コマンドである、smartctlが含まれています。

このような感じで、ストレージの詳細な情報を取得できます。

# 外付けストレージが/dev/sdaの場合
sudo smartctl -a /dev/sda

ハードディスクドライブの場合、型番、シリアル番号、ファームウェアバージョンや、転送速度や回転数等、製品の仕様も取得することができます。

smartdの監視対象とするデバイスのS.M.A.R.T.情報が正しく取得できるかどうか、smartctlコマンドで予め確認しておいたほうが良いと思います。


/etc/smartd.conf テストメール送信設定

実は、smartmontoolsをインストールした時点で、smartdデーモンが動作して、S.M.A.R.T.対応のストレージの監視が始まっています。

しかし、既定の状態では「rootユーザにメールを飛ばす」という設定になっていますが、そもそもメール送受信のシステムが入っていないため、通知が全て無視されている状況です。

そのようなわけで、ちゃんと/etc/smartd.confにて設定を行って、通知をGmailで飛ばしましょう、という設定内容になります。

sudo vi /etc/smartd.conf

まずは、メールが正しく送信されるかどうかを確認しましょう。

21行目付近、既定のDEVICESCAN -m root行を変更して、rootの代わりにメールアドレスを指定し、さらに-M testオプションを追加しました。

# コメント化
#DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
# メール送信テスト用設定追加
DEVICESCAN -M test -d removable -n standby -m <送信先メールアドレス>  -M exec /usr/share/smartmontools/smartd-runner

変更が完了しましたら、smartdサービスを再起動します。

sudo systemctl daemon-reload
sudo systemctl restart smartd.service

-M testは、メールのテスト送信のオプションです。

デーモンを再起動したタイミングで、テストメールが送信されます。

このような感じで、テストメールが受信できれば、テストはOKということになります。


/etc/smartd.conf 通知本番設定

基本的な設定は、先程のDEVICESCAN行の-M testオプションを外したものとなります。

DEVICESCAN -d removable -n standby -m <送信先メールアドレス> -M exec /usr/share/smartmontools/smartd-runner

-dオプションは例外の意味で、removable(取り外し可能)はEメール送信をsupress(抑制)する意味になります。つまり、取り外しはメール送信しません、というオプションになります。

-nオプションはnocheckの意味で、standby状態は通知しない意味になります。

取り付けられたすべてのストレージについて、上記以外の何かS.M.A.R.T.上の重大なイベントが発生した場合は、メール通知が飛ぶ、という設定になります。

-nオプションが使用できないシングルボードコンピュータも

Tinker Board 2Sでは、smartdを再起動したタイミングで「-nオプションが使用できない」というエラーが表示されました。

USBストレージのパワーステータス取得に対応していない場合は、-nオプションは使用できません。

機種によっては、/etc/smartd.confの微調整が必要がな場合もあります。

ちなみに、メール通知はちゃんと行われますので、Tinker Board 2Sでも機能的には全く問題ありません。


温度やセルフテストの通知設定

/etc/smartd.confですが、デバイスごと・ログごとに、細かい通知設定が可能です。

例えば温度に関しては、前述の設定では通知は特に飛ばないと思います。

どの温度でどのような警告を出すか、等は、/etc/smartd.confで細かい設定が可能です。

またセルフテストログ-l selftestや、ヘルスステータス-Hに関しても細かい設定が可能です。

このあたりは、要件によって必要な設定を行って頂ければと思います。


サーバを本格的に運用する場合、バックアップと通知は大切な要素かと思うのですが。

通知まで行うのは、なかなか重たい設定かと思います。

今回、Gmailを送信する設定と。

S.M.A.R.T.による重大な通知の設定を行ったわけですが。

やはりサーバのストレージは最も重要な要素であり、その状態には特に注意を払う必要があります。そもそもバックアップもストレージが対象ということで。

取り扱うデータが大切であれば、このあたりは、手を抜かずに、しっかり設定しておいたほうが良いと思います。

よろしければ設定してみて下さい!

スポンサーリンク

フォローする

スポンサーリンク