Linux で SATA ドライブのシリアル番号を表示するスクリプト

仕事柄、ストレージを扱うことが多いのですが、SATAドライブのシリアル番号を調べる必要がありました。
サーバーのSATAポートに直接接続されているものであれば hdparm で調べられますが、LSI のSAS-HBA に接続されているドライブには hdparm は使用できません。

こんなときは sg3_utils を使用することで SAS-HBA 越しの SATA ドライブのシリアル番号を取得できます。

sg_sat_identify DEVICE

と指定すればドライブの IDENTIFY DEVICE DATA を見ることができます。しかしさすがに見づらいのでスクリプトと od で整形して表示するようにしました。


# シリアル番号の取得
# 入力:
# $1 デバイスファイル
get_serial_number()
{
 local a=(`sg_sat_identify --raw $1 | od -j 20 -N 20 -t a -A n`)
 for i in `seq 0 2 18`
 do
  if [ "${a[$i + 1]}" != "sp" ]
  then
   ser="$ser${a[$i + 1]}"
  fi
  if [ "${a[$i]}" != "sp" ]
  then
   ser="$ser${a[$i]}"
  fi
 done
 echo $ser
}

いががでしょうか。

sg_sat_identify がエラーを返したとき終了ステータスを取得する方法がわかりません・・・

コメント

このブログの人気の投稿

バイナリーファイルを C 言語の配列で出力

CentOS 6.5 でシリアルポートに接続する方法