家のサーバマシンには左のハードディスクを入れ替えられるキットが付いている。そして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を書き込み終了する。