結論:異常を感じたら検査より先にバックアップする

I/Oエラー、読み込み停止、異音、ファイル破損などが起きている場合、繰り返し検査する前に重要データを別媒体へ退避します。セルフテストはドライブへアクセスするため、故障が進んだ装置へ追加負荷を与える可能性があります。

  1. 対象ディスクを正確に特定する
  2. 健康情報とOSログを保存する
  3. 重要データをバックアップする
  4. 必要な場合だけ短時間テストを行う
  5. 異常の継続や増加を見て交換を判断する

対象ディスクを特定する

lsblk -d -o NAME,MODEL,SERIAL,SIZE,ROTA,TRAN
findmnt --target /var/lib/docker

ROTA=1は一般に回転媒体、ROTA=0はSSDなどの非回転媒体を示します。USBケース経由ではモデルやSMART情報が正しく取得できない場合があります。デバイス名は再接続で変わり得るため、モデルとシリアルを併記します。

検査ツールを用意する

# Debian・Ubuntu系
sudo apt install smartmontools nvme-cli

# Fedora・RHEL系
sudo dnf install smartmontools nvme-cli

実際のパッケージ名や利用可能なバージョンはディストリビューションで確認してください。

smartctl -aと-xの違い:SATA SSD・HDDを確認する

対象を確認したら、まず-aで機種情報、総合判定、SMART属性やログを表示します。/dev/sdaは例です。パーティションの/dev/sda1ではなく、確認したい物理ドライブを指定してください。

# SMART情報の確認(セルフテストを新しく開始する操作ではない)
sudo smartctl -a /dev/sda

# 対応する拡張ログなども含めて、より広く確認
sudo smartctl -x /dev/sda

ATAでは-aに総合判定、属性、エラーログ、セルフテスト履歴などが含まれます。-xは対応する追加情報も取得するため、詳しく調べるときの候補です。どちらも読み取り中心の情報取得ですが、休止中のHDDが起動する場合があります。表示項目はドライブと接続方式によって異なります。

確認項目見方
総合ヘルス判定失敗なら直ちにバックアップ。合格でも故障を否定しない
Reallocated / Pending / UncorrectableHDDでは増加傾向と読み取りエラーを重視する
温度一時値だけでなく負荷時の推移とメーカー仕様を確認する
Power_On_Hours使用期間を把握する参考。寿命を単独で決める値ではない
Self-test log過去のテスト失敗と該当位置を確認する

smartctl -aの出力例と列の読み方

次は説明用に作成したSATA HDDの出力例です。実機の測定結果ではありません。項目名や数値はメーカー・機種で異なるため、この例と同じかどうかだけで判断しないでください。

SMART overall-health self-assessment test result: PASSED

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   095   095   000    Old_age   Always       -       4200
194 Temperature_Celsius     0x0022   065   050   000    Old_age   Always       -       35
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
列・表示読み方
VALUEドライブが算出した現在の正規化値。RAW_VALUEそのものでも、健康度の百分率でもない
WORSTドライブが記録した正規化値の最悪値。扱いにメーカー差がある
THRESHメーカーが設定したしきい値。対応する属性でVALUEがしきい値以下になると問題として報告される
WHEN_FAILEDFAILING_NOWは現在、In_the_pastは過去のしきい値到達を示す。-でも故障を否定するものではない
RAW_VALUEメーカー固有の生データ。回数・時間・温度などの場合があるが、単位と符号化は機種仕様で確認する
Pre-fail/Old_age属性の分類。Pre-failと表示されるだけで故障寸前という意味にはならない

この例では代替処理済み・処理待ち・回復不能の各項目が0ですが、それだけで安全とは言い切れません。HDDでは値の増加と読み取りエラーの有無を追います。SSDの属性番号やRAW_VALUEへHDDの解釈をそのまま当てはめず、メーカー情報も確認します。

PASSEDなのにエラーがある場合

PASSEDは総合判定であり、全セクターの読み取りや将来の故障を保証する表示ではありません。属性、セルフテスト履歴、OSのI/Oエラーを併せて確認します。履歴が空でも、一度もテストしていない場合があるため、テスト成功とは区別してください。

結果を保存して変化を見る

同じドライブの前回記録と比較できるよう、日時付きファイルへ保存します。以下はBashの例です。機種・シリアルで同一ドライブと確認し、共有するときはシリアルなどを伏せます。

smart_report="smart-sda-$(date +%Y%m%d-%H%M%S).txt"
sudo smartctl -a /dev/sda > "$smart_report" 2>&1
smart_status=$?
printf 'smartctl exit status: %s\n' "$smart_status"
cat "$smart_report"

smartctlの終了ステータスはビットマスクです。0以外は、デバイスを開けない、SMARTコマンドが失敗した、健康状態や履歴に問題がある、などの複数の意味を持ちます。終了値だけで「故障」と決めず、保存した出力と公式マニュアルのEXIT STATUSを確認します。

セルフテストを実行する

バックアップと対象確認が済み、ドライブがテストをサポートしている場合に実行します。

sudo smartctl -t short /dev/sda
sudo smartctl -l selftest /dev/sda

開始コマンドには完了までの目安が表示されます。直後ではなく、指定時間後にログを確認します。長時間テストは稼働時間とI/O負荷を考慮して計画します。

NVMe SSDをsmartctl・nvme-cliで確認する

smartctlはNVMeにも対応しています。対象を確認してから実行します。次の2行はコントローラーと名前空間を指定する例で、両方を実行する必要はありません。対応するデバイスとドライバーでは、どちらの指定でも健康情報を取得できます。情報の対象範囲は機種の対応状況によります。

sudo smartctl -a /dev/nvme0
sudo smartctl -a /dev/nvme0n1

/dev/nvme0n1は名前空間で、パーティションの/dev/nvme0n1p1とは異なります。NVMeの出力には、SATA HDDの属性表と同じ列は通常ありません。

次は説明用に作成したNVMe出力の抜粋です。実機の測定結果ではありません。

Critical Warning:                   0x00
Temperature:                        39 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    3%
Media and Data Integrity Errors:    0
Error Information Log Entries:      0

Critical Warning: 0x00は、この警告フィールドにビットが立っていない状態です。Percentage Used: 3%はメーカー推定による耐久性消費の目安で、厳密な残り寿命の百分率ではありません。温度、エラー履歴、OSログと合わせて見ます。

nvme-cliで確認する場合は、次のように対象を一覧して健康情報を表示します。

sudo nvme list
sudo nvme smart-log /dev/nvme0
項目確認内容
critical_warning温度、予備領域、信頼性などに関する警告ビット
percentage_usedメーカー推定による耐久性消費の目安。100未満でも故障は起こり得る
available_spare利用可能な予備領域としきい値
media_errors回復不能なデータ整合性エラー
num_err_log_entriesエラーログ件数。内容と増加状況を追加確認する
unsafe_shutdowns正常なシャットダウン手順を経なかった回数

NVM Expressはpercentage_usedを耐久性確認の重要な属性として説明しています。ただし、値の解釈と保証条件は製品仕様も確認します。

OS側のI/Oエラーも確認する

sudo journalctl -k -b | grep -Ei 'I/O error|nvme|ata|reset|timeout'
dmesg --level=err,warn

ケーブル、電源、USB変換、コントローラー、ドライバーなど、媒体以外が原因の場合もあります。タイムアウトやリセットの発生時刻とSMART情報を一緒に記録します。

SMARTとfsckの違い

SMARTは物理ドライブが報告する状態、fsckはファイルシステムの論理的な整合性を確認します。目的が異なります。

警告:通常、読み書き可能でマウント中のファイルシステムにfsckを実行してはいけません。対象形式の公式手順を確認し、バックアップ、アンマウント、レスキュー環境を準備します。

ext4とXFSで異なる具体的な手順は、fsck・e2fsck・xfs_repairによるファイルシステム検査で解説しています。

交換を検討する条件

参考資料

著者について

intrajp。Linux、クラウドインフラ、Kubernetesなどの技術情報を発信しています。この記事は、健康情報を一つの数値で断定せず、バックアップを優先する手順としてまとめました。

運営者情報と記事の方針を見る