カテゴリー
Uncategorized

SATA hotplug on Ricoh IT2 LS

Ricoh IT2 LS, Ubuntu 10.10 で内蔵 SATA 端子を用いたホットプラグが出来た。電源も内蔵端子から引っ張ってこれるし、気に入った。

lvm に対応した plug/unplug スクリプトを作ってみたが、/sys/class/scsi_device/*/device/delete が見えないときがある。md は使ってないから気が向いたら。

plug

#!/bin/sh
dmesg | grep '\[sd\w\] Attached SCSI disk' > /tmp/status1.sata
for i in $(find /sys/class/scsi_host/* -type d -o -type l);do
echo 0 - 0 > $i/scan
done
sleep 5s
dmesg | grep '\[sd\w\] Attached SCSI disk' > /tmp/status2.sata
# enable lvm
vgimport -a
for DEVICE in $(diff /tmp/status1.sata /tmp/status2.sata | grep sd | sed 's/.*\(sd\w\).*/\1/'); do
echo "${DEVICE}"
for i in $(find /dev -name "${DEVICE}?"); do
vgname=`pvs -o vg_name --noheadings $i 2>/dev/null | sed "s/\s*//"`
if [ "${vgname}" != "" ]; then
echo $i $vgname
lvchange -ay "/dev/${vgname}"
fi
done
done
rm /tmp/status1.sata
rm /tmp/status2.sata

unplug

#!/bin/sh
if [ -z $1 ]; then
echo usage: $0 '/dev/sd?'
exit 1
fi
DEVICE=`echo $1 | sed 's/\/dev\/\(.*\)/\1/'`
POS=`dmesg | grep "\[${DEVICE}\] Attached SCSI disk" | sed 's/.*\(.:.:.:.\):.*/\1/'`
for i in $(find /dev -name "${DEVICE}?"); do
umount $i
vgname=`pvs -o vg_name --noheadings $i 2>/dev/null | sed "s/\s*//"`
if [ "${vgname}" != "" ]; then
echo $i $vgname
lvchange -an "/dev/${vgname}"
fi
done
vgexport -a
echo 1 > "/sys/class/scsi_device/${POS}/device/delete"

コメントを残す

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