macOSでsmartdを用いてS.M.A.R.T.情報を監視する方法(改訂版)
smartd停止の原因が分かった。対応策を別記事にまとめたので、参照されたい。(2024.11.23)
確認の結果、本稿の方法で起動したsmartdは、少し時間が経つと停止してしまう事が判明した。従って本稿の存在意義が問われる状況だが、記事には個人的に有用なものが含まれているため、公開を続けることにする。(2024.10.22)
[主題]
macOSでsmartmontoolsのdaemon(常駐プログラム)であるsmartdを用いてドライブのS.M.A.R.T.情報を監視する方法を説明したい。
[背景]
筆者はこれまで、DriveDxを使ってきた。smartmontoolsもインストールしていたが、その使い方が十分理解できていなかった。
そんな時、いくつかある外付けドライブのうち2個が同時にissue(課題)があると、DriveDxがレポートしてきた。本当なのかも知れないが、両方ともSSDなので、ちょっと信じがたいと思った。
そこで、DriveDxの代わりになる手段はないものかと考え、元々インストールしていたsmartmontoolsについて調査したところ、smartdというdaemon(常駐プログラム)を用いれば良さそうなことが分かった。
しかし、Macでsmartdをdaemon(常駐プログラム)として動かす方法は、筆者が検索した限りでは見つからなかった。そこで、今更ながら、macOSでsmartdを動かす方法を、備忘録も兼ねて記述してみることにした。
[環境]
参考までに、筆者の環境を記載しておく
MacBook Air 2023 15.3inch(Apple Silicon M2)
macOS Sonoma 14.1.2
[手順]
-
SAT Smart Driverのインストール
外付け(リムーバブル)ドライブを監視する場合に必要となる。DriveDxのリリース元であるBinaryFruit社の以下のブログ記事からダウンロードして、インストールする。インストール時、リムーバブルドライブは、物理的にMacと切り離しておくこと。その際、Apple Siliconを搭載したMacは、カーネル機能拡張(kext)が無効になっているので、許可する。(macOS復旧での作業が必要)
-
smartmontoolsのインストール
macOS用のインストーラーパッケージが用意されているので、ダウンロードしてインストールする。間違っても、ソースからビルドしようとは、考えない事。
なお、インストーラーパッケージは署名されていないので、右クリックから開くを選択する。 -
smartmontoolsについて
smartmontoolsは、起動後、所定の処理を実施後コマンドが自動的に終了するsmartctlと、起動後、自動的に終了しない、daemon(常駐プログラム)であるsmartdの二つで構成される。
smartdは、起動されると、30分に1回(デフォルト値。可変)、接続された全(または指定された)ドライブにアクセスして、ドライブのS.M.A.R.T.情報を監視してくれる。(smartd manページより) -
smartd.confの設定(筆者の例)
smartdは、smartd.confと呼ばれる設定ファイルを記述することにより、その動作を設定できる。以下に筆者の設定を例として示す。-
オリジナルのsmartd.confをリネームして保存
cd /private/etc/ sudo mv smartd.conf smartd.conf.orig
-
自分のsmartd.confを作成
cd /private/etc/ sudo vim smartd.conf
記述する内容
# This is configuration for smartd on my MacBook Air 2023 15 # /dev/disk0 -M test -m roushi@localhost # For E-Mail test # /dev/disk0(Startup Disk) is NVMe, so excluded from DEVICESCAN. Thus I # intentionally add as diffrent device. # # See https://bugs.launchpad.net/ubuntu/+source/smartmontools/+bug/1685332 # /dev/disk0 -d nvme \ # Disk is NVMe -H \ # Check NVMe device health -l error \ # Check NVMe error count -m roushi@localhost # Send E-Mail to this address DEVICESCAN -d removable \ # Disk is removable -o on \ # Automatic test when smartd starts -m roushi@localhost # Send E-Mail to this address
簡単な解説
-
3行目。#がついているのは、E-Mailのテスト用。テスト時にコメント(#)を外し、テスト後はコメントアウトする。
-
10行目。-dディレクティブは、デバイスのタイプを指定する。
起動ディスクはNVMeデバイスのため、それを指定する。 -
11, 12行目。NVMeデバイスでサポートされるのは、この2項目のみ。
-
16行目。DEVICESCANは、接続された全ドライブを監視対象にするという意味。
-
同16行目。この-dディレクティブは、DEVICESCAN対象デバイスのタイプが、リムーバブルであることを指定する。
これがないと、smartdは、ドライブが取り外されて見つからない時にFailedOpenDevice
というメールを送ってくる。 -
17行目。-oディレクティブは、onにしておくと、smartdが起動して以降4時間毎に
SMART自動オフラインテスト
を実行する。 -
14, 18行目。-mディレクティブは、送信したいメールアドレスを指定する。
-
あえて削ったもの
-aディレクティブ
ググって良く目にする-aディレクティブはない。理由は、ATAデバイスではデフォルトのため。(smartd.conf manページによる)-sディレクティブ
セルフテストのスケジューリングを指定する。筆者は、smartdデフォルトのスキャンで十分と考えたので外した。
ショートテストを毎日2-3時に、ロングテストを毎週土曜日3-4時に実行する場合、以下のようにする。-s (S/../.././02|L/../../6/03)
-
-
-
launchd plistの作成とロード
smartdは、起動されれば、daemon(常駐プログラム)として動作するが、システム(OS)の起動・再起動や、ユーザーのログイン・ログアウトなどで終了した際、自動起動させる必要がある。Macでは、launchdを使えば、これを実現できる。 -
launchd plistの作成
cd ~/Library/LaunchAgents vim jp.xxxx.smartd.plist
xxxxには、自分の名字をローマ字で入れる。(リバースドメイン名)
記述する内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>jp.xxxx.smartd</string> <key>ProgramArguments</key> <array> <string>/Path/To/executeSmartd.sh</string> <key>RunAtLoad</key> <true/> </dict> </plist>
10行目、samartd起動用シェルスクリプトのパスは、次項で作成するシェルスクリプトの絶対パスを記入する。
-
samartd起動用シェルスクリプト
筆者はユーザレベルのLibraryフォルダにLaunchAgentsScriptsというフォルダを設け、そこにスクリプトを保存している。cd ~/Library mkdir -p LaunchAgentsScripts cd LaunchAgentsScripts vim executeSmartd.sh
記述内容
#!/bin/sh # # Execute smartd when it is not running # 2022.11.13 桃源老師 # # To get command exit status itself, command # result should be redirected to /dev/null smartd_status=`ps aux | grep smartd | grep -v grep > /dev/null 2>&1 ; echo $?` if [ $smartd_status -eq 1 ]; then eval /usr/local/sbin/smartd echo `ps aux | grep smartd | grep -v grep` >> $HOME/Library/Logs/smartd_status.log fi
スクリプト実行権の付与
chmod +x executeSmartd.sh
-
launchd plistのロード
cd ~/Library/LaunchAgents launchctl load -w jp.xxxx.smartd.plist
-
smartd設定ファイルの再読み込み
ひとたびlaunchdにより起動されたsmartd設定ファイルを再読み込みするには、以下のコマンドを用いる。killall -HUP smartd
[補足]
smartdの挙動について以下を確認した。
-
外付けデバイスを、smartd稼働中に接続しても、監視対象にはならない事を確認した。(デバッグモード=’smartd -d’で確認)
これは推測だが、DEVICESCAN機能が働くのは、smartdの設定ファイルであるsmartd.confを再読み込みした場合のみと思われる。
つまり、ポータブルMacなどで、外付けデバイスの構成が変わったら、smartd.confの再読み込みが必要と思われる。
-
外付けデバイスをマウントしていなくても、接続されていれば監視しに行く事を確認した。
-
物理的に切断した場合、’removed ATA device: No such file or directory’となる。
-
再接続すると、’reconnected ATA device’となる。
-
上記smartd.conf設定にて、smartdを起動/再起動すると、Macの内蔵SSDからのS.M.A.R.T.情報取得に失敗した旨のメールが1度だけ届く。
[参考サイト]
以上。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント