macOSでsmartdを用いてS.M.A.R.T.情報を監視する方法(再改訂版)

[主題]
macOSでsmartmontoolsのdaemon(常駐プログラム)であるsmartdを用いてドライブのS.M.A.R.T.情報を監視する方法を説明したい。(最終更新日:2024.11.23)

[背景]
筆者はこの記事で、smartdをMacで運用する方法を説明した。しかし、その方法では、

  • Apple Silicon Macで、起動後30分でsmartdが停止してしまう。
  • NVMe SSDを搭載するMacで、SSDの情報を読み取れない。

という問題があった。
本稿では、これらの問題を解決し、正しく運用できるようにする事を目的とする。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Air 2023 15.3inch(Apple Silicon Mac, M2)
macOS Sonoma 14.7.1
Xcode 16.1
CommandLine Tools for Xcode 16.1.0.0.1

[手順]

  1. SAT Smart Driverのインストール
    外付け(リムーバブル)ドライブを監視する場合に必要となる。DriveDxのリリース元であるBinaryFruit社の以下のブログ記事からダウンロードして、インストールする。インストール時、リムーバブルドライブは、物理的にMacと切り離しておくこと。

    その際、Apple Siliconを搭載したMacは、カーネル機能拡張(kext)が無効になっているので、許可する。(macOS復旧での作業が必要)

  2. smartmontoolsのインストール
    macOS用のインストーラーパッケージが用意されているので、ダウンロードしてインストールする。
    なお、インストーラーパッケージは署名されていないので、右クリックから開くを選択する。

    ソースからビルドする場合(バージョンは本稿執筆時点の最新版である7.5-r5640)

    curl -LO https://output.circle-artifacts.com/output/job/770ce2e9-c512-410d-8956-2f414f43578d/artifacts/0/builds/smartmontools-7.5-r5640.src.tar.gz
    tar xf smartmontools-7.5-r5640.src.tar.gz
    cd smartmontools-7.5
    ./configure \
    --with-savestates \
    --with-attributelog \
    --with-nvme-devicescan
    make
    sudo make install
  3. smartmontoolsについて
    smartmontoolsは、起動後、所定の処理を実施後コマンドが自動的に終了するsmartctlと、起動後、自動的に終了しない、daemon(常駐プログラム)であるsmartdの二つで構成される。
    smartdは、起動されると、30分に1回(デフォルト値。可変)、接続された全(または指定された)ドライブにアクセスして、ドライブのS.M.A.R.T.情報を監視してくれる。(smartd manページより)

  4. smartd.confの設定(筆者の例)
    smartdは、smartd.confと呼ばれる設定ファイルを記述することにより、その動作を設定できる。以下に筆者の設定を例として示す。

    1. オリジナルのsmartd.confをリネームして保存

      パッケージでインストールした場合

      cd /private/etc/
      sudo mv smartd.conf smartd.conf.orig

      ソースからビルドした場合

      cd /usr/local/etc/
      sudo mv smartd.conf smartd.conf.orig
    2. 自分のsmartd.confを作成

      パッケージでインストールした場合

      cd /private/etc/
      sudo vim smartd.conf

      ソースからビルドした場合

      cd /usr/local/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)
  5. launchd plistの作成とロード
    smartdは、起動されれば、daemon(常駐プログラム)として動作するが、システム(OS)の起動・再起動などで終了した際、自動起動させる必要がある。Macでは、launchdを使えば、これを実現できる。

    この項が、この記事で発生した問題を解決する部分である。具体的には、smartdをdaemon(常駐プログラム)として登録するため、プロパティリストの登録場所を変更している。

    1. launchd plistの作成

      cd /Library/LaunchDaemons
      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>/usr/local/sbin/smartd</string>
              <key>RunAtLoad</key>
              <true/>
          </dict>
      </plist>
    2. launchd plistのロード

      cd /Library/LaunchDaemons
      sudo launchctl load -w jp.xxxx.smartd.plist
    3. smartd設定ファイルの再読み込み
      ひとたびlaunchdにより起動されたsmartd設定ファイルを再読み込みするには、以下のコマンドを用いる。

      sudo 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’となる。

[参考サイト]

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL