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"
コメントする