LoginSignup
2
3

More than 5 years have passed since last update.

smartctlでSATA接続のHDD全台について温度と不良セクタ数を表示する

Last updated at Posted at 2016-09-02
# 不良セクタチェック
lsblk -d -I 8 -n -o NAME,TYPE,TRAN -p | grep -E ' disk ' | grep -E ' (sata|sas)$' | while read LINE; do
    HDD=$(echo $LINE | cut -d' ' -f1)
    SMART=$(sudo smartctl --all $HDD)
    echo $HDD $(echo -e "$SMART" | grep -E '^(Device Model:|Serial Number:) ')
    echo -e "$SMART" | grep -E '^(  5|187|188|197|198) ' | sed -E 's/^ *(.+)$/\1/g' | sed 's/\s\{1,\}/ /g' | cut -d' ' -f 1,2,8,10
done

# 005 代替処理済のセクタ数
# 187 ハードウェアECCで回復できなかったエラー
# 188 コマンドタイムアウト回数
# 197 代替処理保留中のセクタ数
# 198 代替不可能セクタ数


# 温度チェック
lsblk -d -I 8 -n -o NAME,TYPE,TRAN -p | grep -E ' disk ' | grep -E ' (sata|sas)$' | while read LINE; do
    HDD=$(echo $LINE | cut -d' ' -f1)
    SMART=$(sudo smartctl --all $HDD)
    echo $HDD $(echo -e "$SMART" | grep -E '^(Device Model:|Serial Number:) ')
    echo -e "$SMART" | grep -E '^(190|194) ' | sed -E 's/^ *(.+)$/\1/g' | sed 's/\s\{1,\}/ /g' | cut -d' ' -f 1,2,8,10
done

# 190 エアフロー温度
# 194 温度

smartctlで取得したSMARTデータのうち必要なものを抽出して表示する。smartctlではIDが0埋めではなくスペース埋めで出てくるため先頭のスペースを削除。続いて連続したスペースを削除。これらの下処理を経てcutコマンドでID#、ATTRIBUTE_NAME、UPDATED、およびRAW_VALUE列を抽出。

lsblkでHDDを列挙する際はIオプションで8を指定してスワップやループバックデバイスなどを排除した。また、grepでTRANがsataのデバイスに絞り込みUSBメモリーなどを排除。TYPEも一応diskで絞り込んでいるが、SSDでもdiskになるためあまり意味がなく、現状SSDを排除できていない。pオプションでsdaではなく/dev/sdaという完全なデバイスパスを表示。

# smartctlが入っていない場合はインストール(Debian系)
sudo apt-get install -y smartmontools
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3