USB接続のSSD/HDDのSMART情報を見る方法

HDDやSSDの健康状態はS.M.A.R.T情報を調べると確認できます.ところが外付けドライブなどでは少し工夫しないとSMART情報が見えない場合もあります.

SMART情報が見えない理由

これは,PCとHDD/SSDとの接続に以下のような様々な組み合わせがあって

  • CPU → SATAコントローラ → HDD/SSD
  • CPU → USBコントローラ → 外付ドライブ( その中のSATAコントローラ → HDD/SSD)

その組み合わせによってSMART情報をやり取りする仕組みが異なっているためです.

よく使われる接続方式

ATA
SATAeSATAはこれに該当します
SCSI
最近はあまり見なくなりました.古いサーバ機だといまだにSCSIかもしれません.
nvme
NVM Express 方式です.つまり NVMe.今後の主流になると思います
sat
SCSI to ATA Translation の略です.USB接続の外付けHDDなどは大抵これになります.

smartctl コマンドのオプション

接続形式を明示的に指定するには,smartctl に -d オプションを付与します.

"-d" オプションのデフォルト値はautoです.例えば,/dev/sdaとして認識されているドライブのSMART情報を見る場合は,

$ sudo /usr/sbin/smartctl -a /dev/sda

を実行しますが,これは

$ sudo /usr/sbin/smartctl -d auto -a /dev/sda

を実行したことになります.

USB接続の外付けケースや,USB変換ケーブルを使っている場合は,とりあえず sat を指定するとうまくいくことが多いです.

$ sudo /usr/sbin/smartctl -d sat -a /dev/sda

pipで入れたパッケージを一括更新する

python のパッケージをコマンド一行で最新版にアップデートする方法です

コマンド

普段 sudo を使わずに,--user つけてpipを実行している場合

$ pip3 list --format freeze --outdated | while IFS='==' read pkg dummy; do  pip3 install --user --upgrade $pkg ; done

普段 sudo を使ってpipを実行している場合

$ pip3 list --format freeze --outdated | while IFS='==' read pkg dummy; do sudo  pip3 install --upgrade $pkg ; done

これだけです

注意

上記の例ではpip3を使っています.実際にコマンドを実行する際には,使っている環境に合わせて pip-3 とか pip とかに書き換えて使用してください

解説

pip コマンドと bash を組み合わせています

更新が必要なパッケージを pip3 コマンドで調べます

$  pip3 list --format freeze --outdated

例えば以下のような出力が得られます

Mako==1.0.7

これを bash の read コマンドで読み取ります

説明のために読み取った値を表示するだけのコードを書いておきます

$ pip3 list --format freeze --outdated | while   IFS='==' read pkg dummy; do  echo "pkg:[$pkg]   dummy:[$dummy]"; done

変数IFSを使って区切り文字として"=="を指定しています.この場合 read コマンドは,"Make==1.0.7"という入力行にたいして,最初のトークン"Mako"を変数pkgに,残りのトークン"1.0.7"を変数dummyに格納します

これで変数pkg にパッケージ名が入るので,あとは pip3 install --user --upgrade $pkg でパッケージを更新していきます