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"