Linuxでホットスワップ、安全な取り外し(esata)

家のサーバマシンには左のハードディスクを入れ替えられるキットが付いている。そしてSATAはホットプラグができる。
ホットプラグはPCのが稼働した状態でも、HDDを入れ替えられるということだ。
PCの電源を入れた状態で、これにHDDをとりるけるとなんの問題もなく認識して使えたのだが、困ったことに正しい取り出し方法がわからなかった。

ここに安全にホットリリースするためのスクリプトが書いてあったので、自分の環境にも同じようなスクリプトを作った。作ったスクリプトは下に載せておく。
ようは

echo 1 > /sys/block/DEVICE/device/delete

ここに、1を書き込んでやればいい。
DEVICEはsdaやsdbなどが入る。
ディスク全体をoffにするため、パーティション指定のようにsdb1やsda2など末尾に数字を入れずディスク自体を指定するようにする。

#!/bin/sh
# shutdown SATA device.
 
#引数がなければデフォルトでsdbをシャットダウン
if [ -n "$2" ]; then
        DEVICE=$2
else
        DEVICE="sdb"
fi
 
if [ -z $DEVICE ]; then
        echo "device is not set."
        exit 1
fi
 
DEVICE_PATH="/sys/block/$DEVICE/device/delete"
 
if [ ! -e $DEVICE_PATH ]; then
        echo "Ivalid device"
        exit 1
fi
 
if [ $(mount | grep $DEVICE | wc -l) -gt 0 ]; then
        echo "Device still mounted"
        exit 1
fi
 
echo "Shuttig down $DEVICE..."
echo 1 > $DEVICE_PATH
echo "Done."

引数がない場合は、sdbをデフォルトでoffにするようにした。
デバイスの存在確認を-eで行い、存在しない場合はメッセージを出して終了する。
また、マウント中の場合も実行しないようにチェックするようにした。
mountを対象デバイス名でgrepし、wcでgrepの行数を出力し結果が1行以上ある場合はマウントされているとして、メッセージを出して終了する。

ここまでのチェックに引っかからなかった場合に、対象のファイルに1を書き込み終了する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください