「S.M.A.R.T.」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
 
(3人の利用者による、間の5版が非表示)
1行目: 1行目:
 
[[Category:ストレージ]]
 
[[Category:ストレージ]]
 
[[en:S.M.A.R.T.]]
 
[[en:S.M.A.R.T.]]
  +
[[fr:S.M.A.R.T.]]
S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) は近代的なストレージデバイスに内蔵されている補助コンポーネントです。ストレージの温度・代替処理された不良セクタの数・シークエラーなどの統計からデバイスの健康状態を推察し、故障を予測したり危険な値が出たときに通知することができます。
 
  +
[[ru:S.M.A.R.T.]]
  +
[[Wikipedia:ja:Self-Monitoring, Analysis and Reporting Technology|S.M.A.R.T.]] (Self-Monitoring, Analysis, and Reporting Technology) は、最近のストレージデバイスの多くに内蔵されている補助コンポーネントであり、これによってデバイスは動作の健康状態を監視、保存、そして分析します。ソフトウェアは、収集された統計 (温度、代替処理されたセクタ数、シークエラーなど) を用いてデバイスの健康状態の計測、デバイスの障害の予測、危険な値に達した際の通知を行うことができます。
   
 
== Smartmontools ==
 
== Smartmontools ==
   
smartmontools パッケージはストレージデバイスを診断するための2つのユーティリティ ({{ic|smartctl}} と {{ic|smartd}}) を含んでいます。[[公式リポジト]]から {{Pkg|smartmontools}} をインストールしくださ
+
smartmontools パッケージストレージデバイスの分析と監視のためのユーティリティプログラム {{ic|smartctl}} と {{ic|smartd}}、サードパーティのデータベース更新ユーティティ {{ic|update-smart-drivedb}} が含まれています。
   
  +
これらのツールを使用するには {{Pkg|smartmontools}} パッケージを[[インストール]]してください。
=== デバイスが SMART 対応かどうか確認する ===
 
デバイスが SMART 機能を有しているかどうかチェックするには次のコマンドを実行します (対象が ATA デバイスの場合 {{ic|1=--device=ata}} オプションが必要です):
 
   
  +
これらのツールを効果的に使用するには、各ストレージデバイスで SMART サポートが利用可能であり、かつ有効化されていなければなりません。[[#smartctl]] を使うことで SMART サポートを確認したり有効化したりすることができます。それが済んだら、手動で [[#テストを実行する]] ことも [[#テスト結果を表示する]] こともできますし、[[#smartd]] を使って自動的にテストを実行してメールで通知することもできます。
# smartctl --info /dev/<device>
 
   
  +
=== smartctl ===
<device> は {{ic|sda, hda,...}} などに置き換えて下さい。このコマンドはデバイスに関する全般的な情報を表示します。対応している場合、下の2行が確認できるはずです:
 
   
  +
smartctl は、「ほとんどの ATA/SATA 及び SCSI/SAS ハードドライブやソリッドステートドライブに組み込まれている Self-Monitoring, Analysis and Reporting Technology (SMART) システムを制御する」コマンドラインツールです。
SMART support is: Available - device has SMART capability.
 
SMART support is: Enabled
 
   
  +
{{ic|-i}}/{{ic|--info}} オプションは、デバイスに関する様々な情報を出力します (SMART が利用可能で有効であるかどうかに関する情報を含む):
SMART が有効でない場合、以下を実行して有効化します:
 
   
# smartctl --smart=on /dev/<device>
+
{{hc|# smartctl --info /dev/sda {{!}} grep 'SMART support is:'|
  +
SMART support is: Available - device has SMART capability.
  +
SMART support is: Enabled
  +
}}
   
  +
SMART が利用可能であるが、有効でない場合、有効化することができます:
=== デバイスの健康状態を調べる ===
 
実行中のデバイスの健康状態を調べる3つの方法があります (どのテストもユーザーデータには影響を与えません):
 
   
  +
# smartctl --smart=on /dev/''device''
# Short (デバイスの問題を高い確率で発見するテストを実行する)
 
# Extended (または Long。ディスクの完全なチェックを行う)
 
# Conveyance (デバイスの輸送中に破損が発生しなかったか確認する)
 
   
  +
場合によっては、デバイスのタイプを指定する必要があります。例えば、{{ic|1=--device=ata}} は、デバイスのタイプが ATA であることを smartctl に伝え、smartctl がそのデバイスに SCSI コマンドを発行してしまうことを防ぎます。
{{ic|-c}} (または {{ic|--capabilities}}) フラグを使うことでデバイスがどのテストに対応しているのか、そしてそれらの診断にどれくらい時間がかかるのか調べられます:
 
   
  +
==== テストを実行する ====
# smartctl -c /dev/sda
 
[…]
 
Short self-test routine
 
recommended polling time: ( 1) minutes.
 
Extended self-test routine
 
recommended polling time: ( 74) minutes.
 
Conveyance self-test routine
 
recommended polling time: ( 2) minutes.
 
[…]
 
   
  +
デバイスが実行できる自己テストには3種類あります (どのテストもユーザデータに対して安全です):
テストを実行するには:
 
   
  +
* Short: デバイスの問題を検出する可能性の高いテストを実行します。
# smartctl -t short /dev/<device>
 
  +
* Extended 或いは Long: このテストは short チェックと同じですが、時間制限が無く、完全なディスクサーフェス検査を行います。
# smartctl -t long /dev/<device>
 
  +
* Conveyance: デバイスの輸送中にダメージが発生したかどうかを調べます。
# smartctl -t conveyance /dev/<device>
 
  +
* Selective: LBA の範囲をテストします (詳細は {{man|8|smartctl|t}} を参照)。
   
  +
{{ic|-c}}/{{ic|--capabilities}} フラグは、デバイスがサポートしているテストと各テストの推定実行時間を出力します。例えば:
{{Note|SSD などは全てのテストに対応していないことがあります。}}
 
==== テスト結果を表示 ====
 
   
  +
{{hc|# smartctl -c /dev/sda|
デバイスの健康状態は {{ic|-H}} フラグで表示できます。デバイスが不健康だと報告された場合、デバイスが既に壊れているか、あるいは24時間に故障することが予想されます。できる限り早くディスクからデータを抜き出して、どこか別のところにコピーすることを推奨します:
 
  +
...
  +
Short self-test routine
  +
recommended polling time: ( 1) minutes.
  +
Extended self-test routine
  +
recommended polling time: ( 74) minutes.
  +
Conveyance self-test routine
  +
recommended polling time: ( 2) minutes.
  +
...
  +
}}
   
  +
テストを実行するには {{ic|-t}}/{{ic|1=--test=''test_name''}} フラグを使用してください:
# smartctl -H /dev/<device>
 
   
  +
# smartctl -t short /dev/''device''
最近のテスト結果のリストを表示するには:
 
  +
# smartctl -t long /dev/''device''
  +
# smartctl -t conveyance /dev/''device''
  +
# smartctl -t select,123+345 /dev/''device''
   
  +
==== テスト結果を表示する ====
# smartctl -l selftest /dev/<device>
 
   
  +
{{ic|-H}} フラグでデバイスの全体的な健康状態を表示できます。「デバイスが健康状態に問題があると報告した場合、デバイスがすでに故障しているか、24時間以内にデバイス自体が故障することが予測されていることを意味します。この場合 […] 可能な限り早くディスクからデータを取り出し、別の安全な場所に移してください。」
デバイスの詳細な情報を表示するには:
 
   
# smartctl -a /dev/<device>
+
# smartctl -H /dev/''device''
   
  +
最近のテスト結果の一覧やデバイスの詳細な情報を表示することもできます:
=== デバイスの監視 ===
 
smartd デーモンは SMART の状態を監視して、何か問題が発生したらメールを送信します。起動時にデバイスを監視するには、[[systemd]] で {{ic|smartd.service}} ユニットを有効にしてください。{{ic|/etc/smartd.conf}} で設定をすることが可能です。
 
   
  +
# smartctl -l selftest /dev/''device''
{{Tip|{{ic|/etc/smartd.conf}} は幾分難解なコマンドライン式のオプションを使って設定します。ファイルの中にあるコメントや例を見たり、[http://smartmontools.sourceforge.net/man/smartd.conf.5.html manpage] を参照してください。以下は監視オプションの例です。}}
 
  +
# smartctl -x /dev/''device''
   
==== 監視するバイスの定義 ====
+
==== 属性表を生成する ====
   
  +
#!/bin/bash
全てのデバイスの全ての属性を監視するには以下を記述します:
 
  +
function drives_csv {
  +
declare -A drive_values
  +
for d in `smartctl --scan -d scsi | cut -d' ' -f1`; do
  +
drive_values["-Drive-----------------"]="${drive_values[-Drive-----------------]},$d"
  +
for l in `smartctl -A $d | grep ATTRIBUTE_NAME -A30 | grep -v ATTRIBUTE_NAME | column -H1,3,4,5,6,7,8,9,11,12,13,14,15 -t -o, | sed 's/ //g'`; do
  +
key=`echo $l | cut -d',' -f1`
  +
value=`echo $l | cut -d',' -f2`
  +
existing=${drive_values["$key"]}
  +
drive_values["${key}"]="${existing},${value}"
  +
#~ echo "${key},${drive_values[$key]}"
  +
done
  +
done
  +
for key in "${!drive_values[@]}"; do
  +
echo "${key}${drive_values[$key]}"
  +
done | sort
  +
}
  +
drives_csv | column -s, -t
   
  +
=== smartd ===
DEVICESCAN -a
 
   
  +
smartd デーモンは SMART の状態を監視して、何か問題が発生したら通知します。このデーモンは systemd で管理でき、設定ファイル {{ic|/etc/smartd.conf}} で設定できます。設定ファイルの構文は難解であり、この wiki ページではクイックリファレンスしか提供しません。より完全な情報は設定ファイル内の例やコメントを読んだり、{{man|5|smartd.conf}} を読んだりしてください。
{{ic|/dev/sda}} と {{ic|/dev/sdb}} の全ての SMART エラーを監視するには (他のデバイスは無視):
 
  +
  +
==== デーモン管理 ====
  +
  +
デーモンの起動、ステータスの確認、システムブート時の自動起動、最近のログファイルエントリの確認を行うには、{{ic|smartd.service}} systemd ユニットを[[起動/有効化]]してください。
  +
  +
==== 管理すべきデバイスを定義する ====
  +
  +
全ディスク上のすべての SMART エラーを監視するには、以下の設定を設定ファイルに追加しなければなりません:
  +
  +
{{hc|/etc/smartd.conf|DEVICESCAN -a}}
  +
  +
注意点として、これはデフォルトの ''smartd'' 設定であり、{{ic|-a}} パラメータ (デフォルトのパラメータ) は省略できます。
  +
  +
{{ic|/dev/sda}} と {{ic|/dev/sdb}} のすべての SMART エラーを監視し、他のデバイスすべてを無視するには:
   
 
{{hc|/etc/smartd.conf|
 
{{hc|/etc/smartd.conf|
79行目: 114行目:
 
}}
 
}}
   
外部接続されたディスクの SMART エラーを監視する場合、再起動で {{ic|/dev/sdX}} わってしまう可能性があため、UUID を使用るほう良いしょう
+
外部接続ディスクのすべての SMART エラーを監視する場合、ドライブの {{ic|/dev/sd''X''}} は再起動後に化すかもしれないのでドライブの UUID を ''smartd'' に渡賢明
  +
  +
まず、監視すべきディスクの UUID を手に入れなければなりません。{{ic|ls -lah /dev/disk/by-uuid/}} を実行して、監視したいディスクを見つけてください:
   
  +
{{hc|$ ls -lah /dev/disk/by-uuid/|
まず、監視したいディスクの UUID を確認します:
 
{{hc|ls -lah /dev/disk/by-uuid/|
 
 
lrwxrwxrwx 1 root root 9 Nov 5 22:41 820cdd8a-866a-444d-833c-1edb0f4becac -> ../../sde
 
lrwxrwxrwx 1 root root 9 Nov 5 22:41 820cdd8a-866a-444d-833c-1edb0f4becac -> ../../sde
 
lrwxrwxrwx 1 root root 10 Nov 5 22:41 b51b87f3-425e-4fe7-883f-f4ff1689189e -> ../../sdf2
 
lrwxrwxrwx 1 root root 10 Nov 5 22:41 b51b87f3-425e-4fe7-883f-f4ff1689189e -> ../../sdf2
89行目: 125行目:
 
}}
 
}}
   
次に、{{ic|/dev/disk/by-uuid/}} のパスを使って監視したいディスクを SMARTd 設定てください:
+
この例では対象のデバイスは ''sde'' です。{{ic|/dev/disk/by-uuid/}} のパスを使って ''smartd'' にこのディスクを監視するよう指示ます:
   
 
{{hc|/etc/smartd.conf|
 
{{hc|/etc/smartd.conf|
95行目: 131行目:
 
}}
 
}}
   
  +
注意点として、''smartd'' を機能させるために {{ic|-d removable}} も必要である場合があります。
==== 潜在的な問題をメールする ====
 
   
  +
これで、{{ic|/dev/sd''X''}} のパスが再起動によって変化しても、USB ディスクが監視されるようになりました。
新しいエラーが発生したり、何らかの問題が発生した時にメールされるようにするには、{{ic|-m}} を用います:
 
   
  +
==== 潜在的な問題を通知する ====
DEVICESCAN -m address@domain.com
 
   
  +
障害や新しいエラーが発生した場合にメールを送信させるには、{{ic|-m}} オプションを使用してください:
(root メールアカウントではなく) 外部にメールを送信するには、MTA (Mail Transport Agent) か MUA (Mail User Agent) のインストール・設定が必要です。よく使われる MTA は [[msmtp]] と [[SSMTP]] です。よく使われる MTU は sendmail や [[Postfix]] です。メールするだけなら、[[en2:S-nail|S-nail]] を設定するだけで足ります。
 
   
  +
{{hc|/etc/smartd.conf|
{{ic|-M test}} オプションを使うと smartd デーモンが起動するたびにテストメールが送信されます:
 
  +
DEVICESCAN -m address@domain.com
  +
}}
   
  +
(root メールアカウントではなく) 外部にメールを送信するには、MTA (Mail Transport Agent) か MUA (Mail User Agent) のインストール・設定が必要です。一般的な MUA は [[msmtp]] と [[Postfix]] ですが、おそらく最も簡単な [[dma]] で十分でしょう。一般的な MTA は sendmail と [[Postfix]] です。メールだけであれば [[S-nail]] を設定するだけで十分ですが、[//web.archive.org/web/20161011211420/https://dominicm.com/configure-email-notifications-on-arch-linux/ これらの手順]に従う必要があります。
{{hc|/etc/smartd.conf|DEVICESCAN -m address@domain.com -M test}}
 
   
  +
{{ic|-M test}} オプションで、smartd デーモンが起動する度にテストメールを送信します:
メールが届くまでに時間がかかることもあります。すぐに対応が必要な場合、以下のようにスクリプトを定義すると良いでしょう:
 
   
{{hc|/etc/smartd.conf|DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify}}
+
{{hc|/etc/smartd.conf|
  +
DEVICESCAN -m address@domain.com -M test
  +
}}
   
  +
メールが届くまでに時間がかかることもあります。ハードドライブの障害が発生したときにすぐに対応が必要な場合、メールの送信に加えて実行されるスクリプトを定義することもできます:
メールを送信してシステムの通知を表示するには、{{ic|/usr/local/bin/smartdnotify}} に以下を記述:
 
  +
  +
{{hc|/etc/smartd.conf|
  +
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify
  +
}}
  +
  +
メールとシステム通知を送信するには、{{ic|/usr/local/bin/smartdnotify}} に以下のようなコードを記述してください:
   
 
#!/bin/sh
 
#!/bin/sh
  +
# Send email
 
# Send mail
 
 
echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"
 
echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"
 
 
# Notify user
 
# Notify user
 
wall "$SMARTD_MESSAGE"
 
wall "$SMARTD_MESSAGE"
  +
  +
デスクトップ環境を使っている場合、デスクトップ上にポップアップを表示させたい場合があります。そのようなときは、以下のスクリプトを使用することができます ({{ic|''X_user''}} と {{ic|''X_userid''}} は X を実行しているユーザとユーザ ID にそれぞれ置き換えてください):
  +
  +
{{hc|/usr/local/bin/smartdnotify|2=
  +
#!/bin/sh
  +
  +
sudo -u ''X_user'' DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/''X_userid''/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
  +
}}
  +
  +
このスクリプトは {{Pkg|libnotify}} と完全なデスクトップ環境を必要とします。詳細は [[デスクトップ通知]] を見てください。
  +
  +
また、カスタムのスクリプトを {{ic|/usr/share/smartmontools/smartd_warning.d/}} に置くこともできます:
  +
  +
このスクリプトは、システム上のログイン中の全ユーザに libnotify を介して通知を送ります。
  +
  +
{{hc|/usr/share/smartmontools/smartd_warning.d/smartdnotify|2=
  +
#!/bin/sh
  +
  +
IFS=$'\n'
  +
for LINE in `w -hs`
  +
do
  +
USER=`echo $LINE {{!}} awk '{print $1}'`
  +
USER_ID=`id -u $USER`
  +
DISP_ID=`echo $LINE {{!}} awk '{print $8}'`
  +
sudo -u $USER DISPLAY=$DISP_ID DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
  +
done
  +
}}
  +
  +
このスクリプトは {{Pkg|libnotify}}、{{Pkg|procps-ng}} そして完全なデスクトップ環境を必要とします。
  +
  +
以下でカスタムのスクリプトを実行することができます: {{hc|/etc/smartd.conf|DEVICESCAN -m @smartdnotify}}
   
 
==== 電源管理 ====
 
==== 電源管理 ====
電源管理によってコンピュータを制御している場合、低電力モードの HDD を扱う方法を設定するべきです。通常、SMART コマンドが実行されるとディスクのプラッタはスピンアップします。以下のオプションを使うことで、低電圧モードの HDD を定期的にスピンアップさせて高電圧モードになってしまうを防げます:
 
DEVICESCAN -n standby,15,q
 
   
  +
電源管理の制御下にあるコンピュータを使用している場合、低消費電力モードでディスクを扱う方法を smartd に指示する必要があります。通常、ディスクプラッタは、smartd によって発行された SMART コマンドに応答してスピンアップします。なので、以下のオプションを使用しなかった場合、smartd によって定期的にポーリングされたときに、低消費電力モードにあるディスクがスピンアップして高電力モードになる場合があります。
詳しい情報は [http://sourceforge.net/apps/trac/smartmontools/wiki/Powermode smartmontools wiki] を見てください。
 
   
  +
{{hc|/etc/smartd.conf|
デバイスによっては -n が機能しない場合があります。syslog に以下のようなエラーメッセージが出力されます:
 
  +
DEVICESCAN -n standby,15,q
  +
}}
  +
  +
詳細は [https://www.smartmontools.org/wiki/Powermode smartmontools wiki] を参照してください。
  +
  +
一部のデバイスでは {{ic|-n}} が機能しません。syslog に以下のエラーメッセージが出力されます:
   
  +
{{hc|# journalctl -u smartd|
{{
 
hc|journalctl -u smartd|
 
 
CHECK POWER MODE: incomplete response, ATA output registers missing
 
CHECK POWER MODE: incomplete response, ATA output registers missing
 
Device: /dev/sdb [SAT], no ATA CHECK POWER STATUS support, ignoring -n Directive
 
Device: /dev/sdb [SAT], no ATA CHECK POWER STATUS support, ignoring -n Directive
 
}}
 
}}
   
別の方法として smartd の -i オプションを用することがあります。状態を確認するためにディスクをスピンアップする頻度を制御します。デフォルトは30分です。頻度を変更するには {{ic|/etc/default/smartmontools}} を作成・編集 (例: 3時間ごとに確認):
+
別の方法として smartd の {{ic|-i}} オプションを使用することができます。このオプションは、ドライブの状態を確認するためにディスクをスピンアップする頻度を制御します。デフォルトは30分です。頻度を変更するには {{ic|/etc/conf.d/smartd}} を編集してください。
   
  +
{{hc|/etc/conf.d/smartd|
{{
 
  +
output=SMARTD_ARGS="-i 10800" Check status every 10800 seconds (3 hours)
hc|
 
head=/etc/default/smartmontools|
 
output=SMARTD_ARGS="-i 21600"
 
 
}}
 
}}
   
しく[http://www.smartmontools.org/browser/trunk/smartmontools/smartd.8.in smartd manpage] を参照してください。
+
{{man|8|smartd}} を参照してください。
   
==== 自己診断の予定組む ====
+
==== 自己テストスケジュールする ====
   
smartd はスケジュールに従って自己診断の実行をするようディスクに通知ことができます以下の {{ic|/etc/smartd.conf}} の設定では毎日午前2-3時の間に短い自己診断、土曜日の午前3-4時の間に長い自己診断が行われるようにします:
+
smartd はスケジュールに従って自己診断の実行をするようディスクに指示を出すことができます以下の {{ic|/etc/smartd.conf}} の設定では毎日午前2-3時の間に短い自己診断、土曜日の午前3-4時の間に長い自己診断が行われるようにします:
   
  +
{{hc|/etc/smartd.conf|
DEVICESCAN -s (S/../.././02|L/../../6/03)
 
  +
DEVICESCAN -s (S/../.././02{{!}}L/../../6/03)
  +
}}
   
==== 温度わったら警告する ====
+
==== 温度化を警告する ====
  +
smartd はディスクの温度を記録して、急激な温度上昇が起こった時や温度の上限に達した時に警告をすることができます。以下の例では温度が4度以上変わった時と35度に到達した時にログを記録し、さらに温度が40度と危険なときにはログを取ってメールを送信します:
 
  +
smartd はディスクの温度を記録して、急激な温度上昇が起こった時や温度の上限に達した時に警告をすることができます。以下の例では、温度が4度以上変化したときにログを取り、温度が35度に達したときにログを取り、40度に達したときに警告をログに記録しメールを送信します:
DEVICESCAN -W 4,35,40
 
  +
  +
{{hc|/etc/smartd.conf|
  +
DEVICESCAN -W 4,35,40
  +
}}
   
 
{{Tip|
 
{{Tip|
* {{ic|smartctl -A /dev/<device> &#124; grep Temperature_Celsius}} を実行することで現在のディスクの温度を知ることができます。
+
* コマンド {{ic|smartctl -A /dev/''device'' {{!}} grep Temperature_Celsius}} を実行することで現在のディスクの温度を知ることができます。
* 特定のディスクが専ら他のディスクより熱い/冷たい場合、{{ic|DEVICESCAN}} を削除して個々のデバイスを定義し、適切な温度設定をしてください。}}
+
* 一部のディスクが専ら他のディスクより熱い/冷たい場合、{{ic|DEVICESCAN}} を削除して個々のデバイスを定義し、適切な温度設定をしてください。
  +
}}
==== 完全な {{ic|smartd.conf}} の例 ====
 
  +
  +
==== 完全な smartd.conf の例 ====
   
 
上記の例を全てまとめると以下のような設定になります:
 
上記の例を全てまとめると以下のような設定になります:
   
* {{ic|DEVICESCAN}} (smartd は全てのディスクを監視対象にし、監視を実行する)
+
* {{ic|DEVICESCAN}}: smartd ディスクをスキャンし、検出されたディスクすべてを監視する
* {{ic|-a}} (全ての属性を監視する)
+
* {{ic|-a}}: 全ての属性を監視する
* {{ic|-o on}} (自動オンラインデータ収集を有効化する)
+
* {{ic|-o on}}: オンラインデータの自動収集を有効化する
* {{ic|-S on}} (自動属性保存を有効化する)
+
* {{ic|-S on}}: 属性の自動保存を有効化する
* {{ic|-n standby,q}} (ディスクが待機中の時チェックを実行せず、ディスクアクセスが発生しないようにログに書き込まない)
+
* {{ic|-n standby,q}}: ディスクが待機中の時チェックを実行せず、ディスクアクセスが発生しないようにログに書き込まない
* {{ic|-s ...}} (短いもしくは長いテストの予定を立てる)
+
* {{ic|-s ...}}: 短いテストと長いテストの予定を立てる
* {{ic|-W ...}} (温度を監視する)
+
* {{ic|-W ...}}: 温度を監視する
* {{ic|-m ...}} (メールアラート)
+
* {{ic|-m ...}}: メールアラート
  +
  +
{{hc|/etc/smartd.conf|
  +
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02{{!}}L/../../6/03) -W 4,35,40 -m ''username-or-email''
  +
}}
  +
  +
=== update-smart-drivedb ===
  +
  +
このユーティリティは smartmontools のソースリポジトリから {{ic|drivedb.h}} の最新バージョンをダウンロードし、新しいデバイスとそのパラメータを認識できるようにします。
   
  +
ダウンロードされたファイルは {{ic|/usr/share/smartmontools/drivedb.h}} にあるデフォルトのものを置き換えることができます。このファイルは、各ドライブに対してコンマで区切られた値を含む平文ファイルです。
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,40 -m <username or email>
 
   
  +
あなたのドライブがまだ認識されない場合は、[https://www.smartmontools.org/wiki/FAQ#MyATASATAdriveisnotinthesmartctlsmartddatabase 上流に投稿する]ことができます。
==== {{ic|smartd}} サービスの起動・リロードと状態の確認 ====
 
# systemctl start smartd
 
   
  +
コマンドラインオプションの完全なリストは {{man|8|update-smart-drivedb}} を見てください。
または
 
# systemctl reload smartd
 
   
  +
== コンソールアプリケーション ==
状態を確認する:
 
   
  +
* {{App|skdump|SMART デバイスの監視と管理、及びハードディスクドライブの健康状態の監視と報告を行うユーティリティ。|https://0pointer.de/blog/projects/being-smart.html|{{Pkg|libatasmart}}}}
# systemctl status smartd
 
   
  +
* {{ic|iostat -x}} ({{Pkg|sysstat}} に含まれる) もいくつかのディスクの健康指標を提供します。特に、f_await 列の値が大きい場合は、ディスクがリクエストに素早く応答していないことを意味しており、障害が発生しているのかもしれません。
全ての {{ic|smartd}} ログ:
 
   
  +
== GUI アプリケーション ==
# journalctl -u smartd
 
   
  +
* {{App|DisKMonitor|SMART デバイスと MDRaid 健康状態を監視する KDE 向けツール集。|https://github.com/papylhomme/diskmonitor|{{AUR|diskmonitor}}}}
=== GUI アプリケーション ===
 
  +
* {{App|[[Wikipedia:ja:GNOME Disks|GNOME Disks]]|{{Pkg|libatasmart}} を使用する GNOME フロントエンドで、ハードディスクドライブの健康状態を監視し、報告します。{{Grp|gnome}} に含まれています。|https://apps.gnome.org/DiskUtility/|{{Pkg|gnome-disk-utility}}}}
  +
* {{App|GSmartControl|smartctl の GUI です。ドライブの SMART データを調査して健康状態を判定することができ、ドライブに様々なテストを実行することもできます。|https://gsmartcontrol.shaduri.dev/|{{Pkg|gsmartcontrol}}}}
  +
* {{App|Plasma Disks|KDE Plasma のためのハードディスクの健康状態の監視。{{Grp|plasma}} に含まれています。|https://invent.kde.org/plasma/plasma-disks/|{{Pkg|plasma-disks}}}}
   
  +
== 参照 ==
* {{App|Gsmartcontrol|smartctl ハードディスクドライブ状態調査ツールの GNOME フロントエンド。|http://gsmartcontrol.sourceforge.net|{{Pkg|gsmartcontrol}} または {{AUR|gsmartcontrol-svn}}}}
 
   
  +
* [https://www.smartmontools.org/ Smartmontools ホームページ]
== 情報元 ==
 
  +
* [https://help.ubuntu.com/community/Smartmontools Ubuntu Wiki の Smartmontools]
  +
* [[Gentoo: smartmontools]]
   
  +
{{TranslationStatus|S.M.A.R.T.|2024-06-15|809164}}
* [http://www.smartmontools.org/ Smartmontools ホームページ]
 
* [https://help.ubuntu.com/community/Smartmontools Smartmontools on Ubuntu Wiki]
 

2024年6月15日 (土) 12:21時点における最新版

S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) は、最近のストレージデバイスの多くに内蔵されている補助コンポーネントであり、これによってデバイスは動作の健康状態を監視、保存、そして分析します。ソフトウェアは、収集された統計 (温度、代替処理されたセクタ数、シークエラーなど) を用いてデバイスの健康状態の計測、デバイスの障害の予測、危険な値に達した際の通知を行うことができます。

Smartmontools

smartmontools パッケージには、ストレージデバイスの分析と監視のためのユーティリティプログラム smartctlsmartd、サードパーティのデータベース更新ユーティリティ update-smart-drivedb が含まれています。

これらのツールを使用するには smartmontools パッケージをインストールしてください。

これらのツールを効果的に使用するには、各ストレージデバイスで SMART サポートが利用可能であり、かつ有効化されていなければなりません。#smartctl を使うことで SMART サポートを確認したり有効化したりすることができます。それが済んだら、手動で #テストを実行する ことも #テスト結果を表示する こともできますし、#smartd を使って自動的にテストを実行してメールで通知することもできます。

smartctl

smartctl は、「ほとんどの ATA/SATA 及び SCSI/SAS ハードドライブやソリッドステートドライブに組み込まれている Self-Monitoring, Analysis and Reporting Technology (SMART) システムを制御する」コマンドラインツールです。

-i/--info オプションは、デバイスに関する様々な情報を出力します (SMART が利用可能で有効であるかどうかに関する情報を含む):

# smartctl --info /dev/sda | grep 'SMART support is:'
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

SMART が利用可能であるが、有効でない場合、有効化することができます:

# smartctl --smart=on /dev/device

場合によっては、デバイスのタイプを指定する必要があります。例えば、--device=ata は、デバイスのタイプが ATA であることを smartctl に伝え、smartctl がそのデバイスに SCSI コマンドを発行してしまうことを防ぎます。

テストを実行する

デバイスが実行できる自己テストには3種類あります (どのテストもユーザデータに対して安全です):

  • Short: デバイスの問題を検出する可能性の高いテストを実行します。
  • Extended 或いは Long: このテストは short チェックと同じですが、時間制限が無く、完全なディスクサーフェス検査を行います。
  • Conveyance: デバイスの輸送中にダメージが発生したかどうかを調べます。
  • Selective: LBA の範囲をテストします (詳細は smartctl(8) § t を参照)。

-c/--capabilities フラグは、デバイスがサポートしているテストと各テストの推定実行時間を出力します。例えば:

# smartctl -c /dev/sda
...
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  74) minutes.
Conveyance self-test routine
recommended polling time:        (   2) minutes.
...

テストを実行するには -t/--test=test_name フラグを使用してください:

# smartctl -t short /dev/device
# smartctl -t long /dev/device
# smartctl -t conveyance /dev/device
# smartctl -t select,123+345 /dev/device

テスト結果を表示する

-H フラグでデバイスの全体的な健康状態を表示できます。「デバイスが健康状態に問題があると報告した場合、デバイスがすでに故障しているか、24時間以内にデバイス自体が故障することが予測されていることを意味します。この場合 […] 可能な限り早くディスクからデータを取り出し、別の安全な場所に移してください。」

# smartctl -H /dev/device

最近のテスト結果の一覧やデバイスの詳細な情報を表示することもできます:

# smartctl -l selftest /dev/device
# smartctl -x /dev/device

全ディスクの属性表を生成する

#!/bin/bash
function drives_csv {
	declare -A drive_values
	for d in `smartctl --scan -d scsi | cut -d' ' -f1`; do
		drive_values["-Drive-----------------"]="${drive_values[-Drive-----------------]},$d"
		for l in `smartctl -A $d | grep ATTRIBUTE_NAME -A30 | grep -v ATTRIBUTE_NAME | column -H1,3,4,5,6,7,8,9,11,12,13,14,15 -t -o, | sed 's/ //g'`; do
			key=`echo $l | cut -d',' -f1`
			value=`echo $l | cut -d',' -f2`
			existing=${drive_values["$key"]}
			drive_values["${key}"]="${existing},${value}"
			#~ echo "${key},${drive_values[$key]}"
		done
	done
	for key in "${!drive_values[@]}"; do
		echo "${key}${drive_values[$key]}"
	done | sort
}
drives_csv | column -s, -t

smartd

smartd デーモンは SMART の状態を監視して、何か問題が発生したら通知します。このデーモンは systemd で管理でき、設定ファイル /etc/smartd.conf で設定できます。設定ファイルの構文は難解であり、この wiki ページではクイックリファレンスしか提供しません。より完全な情報は設定ファイル内の例やコメントを読んだり、smartd.conf(5) を読んだりしてください。

デーモン管理

デーモンの起動、ステータスの確認、システムブート時の自動起動、最近のログファイルエントリの確認を行うには、smartd.service systemd ユニットを起動/有効化してください。

管理すべきデバイスを定義する

全ディスク上のすべての SMART エラーを監視するには、以下の設定を設定ファイルに追加しなければなりません:

/etc/smartd.conf
DEVICESCAN -a

注意点として、これはデフォルトの smartd 設定であり、-a パラメータ (デフォルトのパラメータ) は省略できます。

/dev/sda/dev/sdb のすべての SMART エラーを監視し、他のデバイスすべてを無視するには:

/etc/smartd.conf
/dev/sda -a
/dev/sdb -a

外部接続のディスクのすべての SMART エラーを監視する場合、ドライブの /dev/sdX は再起動後に変化するかもしれないので、ドライブの UUID を smartd に渡すのが賢明です。

まず、監視すべきディスクの UUID を手に入れなければなりません。ls -lah /dev/disk/by-uuid/ を実行して、監視したいディスクを見つけてください:

$ ls -lah /dev/disk/by-uuid/
lrwxrwxrwx 1 root root   9 Nov  5 22:41 820cdd8a-866a-444d-833c-1edb0f4becac -> ../../sde
lrwxrwxrwx 1 root root  10 Nov  5 22:41 b51b87f3-425e-4fe7-883f-f4ff1689189e -> ../../sdf2
lrwxrwxrwx 1 root root   9 Nov  5 22:42 ea2199dd-8f9f-4065-a7ba-71bde11a462c -> ../../sda
lrwxrwxrwx 1 root root  10 Nov  5 22:41 fe9e886a-8031-439f-a909-ad06c494fadb -> ../../sdf1

この例では、対象のデバイスは sde です。/dev/disk/by-uuid/ のパスを使って smartd にこのディスクを監視するように指示します:

/etc/smartd.conf
/dev/disk/by-uuid/820cdd8a-866a-444d-833c-1edb0f4becac -a

注意点として、smartd を機能させるために -d removable も必要である場合があります。

これで、/dev/sdX のパスが再起動によって変化しても、USB ディスクが監視されるようになりました。

潜在的な問題を通知する

障害や新しいエラーが発生した場合にメールを送信させるには、-m オプションを使用してください:

/etc/smartd.conf
DEVICESCAN -m address@domain.com

(root メールアカウントではなく) 外部にメールを送信するには、MTA (Mail Transport Agent) か MUA (Mail User Agent) のインストール・設定が必要です。一般的な MUA は msmtpPostfix ですが、おそらく最も簡単な dma で十分でしょう。一般的な MTA は sendmail と Postfix です。メールだけであれば S-nail を設定するだけで十分ですが、これらの手順に従う必要があります。

-M test オプションで、smartd デーモンが起動する度にテストメールを送信します:

/etc/smartd.conf
DEVICESCAN -m address@domain.com -M test

メールが届くまでに時間がかかることもあります。ハードドライブの障害が発生したときにすぐに対応が必要な場合、メールの送信に加えて実行されるスクリプトを定義することもできます:

/etc/smartd.conf
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify

メールとシステム通知を送信するには、/usr/local/bin/smartdnotify に以下のようなコードを記述してください:

#!/bin/sh
# Send email
echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"
# Notify user
wall "$SMARTD_MESSAGE"

デスクトップ環境を使っている場合、デスクトップ上にポップアップを表示させたい場合があります。そのようなときは、以下のスクリプトを使用することができます (X_userX_userid は X を実行しているユーザとユーザ ID にそれぞれ置き換えてください):

/usr/local/bin/smartdnotify
#!/bin/sh

sudo -u X_user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/X_userid/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical

このスクリプトは libnotify と完全なデスクトップ環境を必要とします。詳細は デスクトップ通知 を見てください。

また、カスタムのスクリプトを /usr/share/smartmontools/smartd_warning.d/ に置くこともできます:

このスクリプトは、システム上のログイン中の全ユーザに libnotify を介して通知を送ります。

/usr/share/smartmontools/smartd_warning.d/smartdnotify
#!/bin/sh

IFS=$'\n'
for LINE in `w -hs`
do
    USER=`echo $LINE | awk '{print $1}'`
    USER_ID=`id -u $USER`
    DISP_ID=`echo $LINE | awk '{print $8}'`
    sudo -u $USER DISPLAY=$DISP_ID DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus notify-send "S.M.A.R.T Error ($SMARTD_FAILTYPE)" "$SMARTD_MESSAGE" --icon=dialog-warning -u critical
done

このスクリプトは libnotifyprocps-ng そして完全なデスクトップ環境を必要とします。

以下でカスタムのスクリプトを実行することができます:

/etc/smartd.conf
DEVICESCAN -m @smartdnotify

電源管理

電源管理の制御下にあるコンピュータを使用している場合、低消費電力モードでディスクを扱う方法を smartd に指示する必要があります。通常、ディスクプラッタは、smartd によって発行された SMART コマンドに応答してスピンアップします。なので、以下のオプションを使用しなかった場合、smartd によって定期的にポーリングされたときに、低消費電力モードにあるディスクがスピンアップして高電力モードになる場合があります。

/etc/smartd.conf
DEVICESCAN -n standby,15,q

詳細は smartmontools wiki を参照してください。

一部のデバイスでは -n が機能しません。syslog に以下のエラーメッセージが出力されます:

# journalctl -u smartd
CHECK POWER MODE: incomplete response, ATA output registers missing
Device: /dev/sdb [SAT], no ATA CHECK POWER STATUS support, ignoring -n Directive

別の方法として smartd の -i オプションを使用することができます。このオプションは、ドライブの状態を確認するためにディスクをスピンアップする頻度を制御します。デフォルトは30分です。頻度を変更するには /etc/conf.d/smartd を編集してください。

/etc/conf.d/smartd
SMARTD_ARGS="-i 10800"  Check status every 10800 seconds (3 hours)

詳細は smartd(8) を参照してください。

自己テストをスケジュールする

smartd は、スケジュールに従って自己診断の実行をするようディスクに指示を出すことができます。以下の /etc/smartd.conf の設定では毎日午前2-3時の間に短い自己診断、土曜日の午前3-4時の間に長い自己診断が行われるようにします:

/etc/smartd.conf
DEVICESCAN -s (S/../.././02|L/../../6/03)

温度の変化を警告する

smartd はディスクの温度を記録して、急激な温度上昇が起こった時や温度の上限に達した時に警告をすることができます。以下の例では、温度が4度以上変化したときにログを取り、温度が35度に達したときにログを取り、40度に達したときに警告をログに記録しメールを送信します:

/etc/smartd.conf
DEVICESCAN -W 4,35,40
ヒント:
  • コマンド smartctl -A /dev/device | grep Temperature_Celsius を実行することで、現在のディスクの温度を知ることができます。
  • 一部のディスクが専ら他のディスクより熱い/冷たい場合、DEVICESCAN を削除して個々のデバイスを定義し、適切な温度設定をしてください。

完全な smartd.conf の例

上記の例を全てまとめると以下のような設定になります:

  • DEVICESCAN: smartd ディスクをスキャンし、検出されたディスクすべてを監視する
  • -a: 全ての属性を監視する
  • -o on: オンラインデータの自動収集を有効化する
  • -S on: 属性の自動保存を有効化する
  • -n standby,q: ディスクが待機中の時チェックを実行せず、ディスクアクセスが発生しないようにログに書き込まない
  • -s ...: 短いテストと長いテストの予定を立てる
  • -W ...: 温度を監視する
  • -m ...: メールアラート
/etc/smartd.conf
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,40 -m username-or-email

update-smart-drivedb

このユーティリティは smartmontools のソースリポジトリから drivedb.h の最新バージョンをダウンロードし、新しいデバイスとそのパラメータを認識できるようにします。

ダウンロードされたファイルは /usr/share/smartmontools/drivedb.h にあるデフォルトのものを置き換えることができます。このファイルは、各ドライブに対してコンマで区切られた値を含む平文ファイルです。

あなたのドライブがまだ認識されない場合は、上流に投稿することができます。

コマンドラインオプションの完全なリストは update-smart-drivedb(8) を見てください。

コンソールアプリケーション

  • skdump — SMART デバイスの監視と管理、及びハードディスクドライブの健康状態の監視と報告を行うユーティリティ。
https://0pointer.de/blog/projects/being-smart.html || libatasmart
  • iostat -x (sysstat に含まれる) もいくつかのディスクの健康指標を提供します。特に、f_await 列の値が大きい場合は、ディスクがリクエストに素早く応答していないことを意味しており、障害が発生しているのかもしれません。

GUI アプリケーション

  • DisKMonitor — SMART デバイスと MDRaid 健康状態を監視する KDE 向けツール集。
https://github.com/papylhomme/diskmonitor || diskmonitorAUR
  • GNOME Diskslibatasmart を使用する GNOME フロントエンドで、ハードディスクドライブの健康状態を監視し、報告します。gnome に含まれています。
https://apps.gnome.org/DiskUtility/ || gnome-disk-utility
  • GSmartControl — smartctl の GUI です。ドライブの SMART データを調査して健康状態を判定することができ、ドライブに様々なテストを実行することもできます。
https://gsmartcontrol.shaduri.dev/ || gsmartcontrol
  • Plasma Disks — KDE Plasma のためのハードディスクの健康状態の監視。plasma に含まれています。
https://invent.kde.org/plasma/plasma-disks/ || plasma-disks

参照

翻訳ステータス: このページは en:S.M.A.R.T. の翻訳バージョンです。最後の翻訳日は 2024-06-15 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。