#!/bin/bash # delete_lun.sh # 2009/10/15 OCTANT/NME # To delete a LUN : echo "1" > /sys/class/scsi_device/:::/device/delete # This script will try to do that automatically for you... # Note : si on ne connait plus le LUN, on peut le retrouver a partir du device (ici sdx) : # ls -l /dev/disk/by-id/|grep sdx lrwxrwxrwx 1 root root 9 Jul 3 12:15 scsi-360022190009936a2000033aa4a497fdd -> ../../sdx # less /proc/scsi/mpp/N (remplacer N par l'id scsi de mpp - il n'y a qu'une seul fichier de toute facon) # Dans le nom du lien, la partie apres scsi-3 est l'id du device sdx. Rechercher la chaine 60022190009936a2000033aa4a497fdd dans /proc/scsi/mpp/N # ca doit donner un truc du genre : # Lun #15 - WWN:60022190009936a2000033aa4a497fdd function usage { echo "usage: $0 lun_to_delete" } if [ $# -ne 1 ]; then usage exit fi lun_to_delete=$1 echo "Will try to delete LUN# $lun_to_delete!" echo "Scanning for iscsi host devices" for dev in `ls /sys/class/scsi_host`; do echo -n "$dev: " dev_name=`cat /sys/class/scsi_host/$dev/proc_name` echo $dev_name if [ $dev_name = "mpp" ]; then mpp_host=$dev fi if [ $dev_name = "iscsi_tcp" ]; then if [ -z $iscsi_host1 ]; then iscsi_host1=$dev else iscsi_host2=$dev fi fi done echo "Found iscsi host devices: $iscsi_host1 and $iscsi_host2. Is that right?" echo "Found mpp host device: $mpp_host." host1_id=`echo $iscsi_host1 | sed "s/host\([0-9]\)/\1/"` host2_id=`echo $iscsi_host2 | sed "s/host\([0-9]\)/\1/"` mpp_id=`echo $mpp_host | sed "s/host\([0-9]\)/\1/"` echo "iscsi host id: $host1_id and $host2_id" echo "mpp host id: $mpp_id" scsi_device1="$host1_id:0:0:$lun_to_delete" scsi_device1_path="/sys/class/scsi_device/$scsi_device1" scsi_device2="$host2_id:0:0:$lun_to_delete" scsi_device2_path="/sys/class/scsi_device/$scsi_device2" mpp_device="$mpp_id:0:0:$lun_to_delete" mpp_disk_path="/sys/class/scsi_disk/$mpp_device" disk=`ls -d $mpp_disk_path/device/block*|cut -d":" -f 5` echo "Disk device is $disk" echo "The scsi devices you want to delete shoud be $scsi_device1 and $scsi_device2" echo "mpp disk path is: $mpp_disk_path (do not delete this one!)" if [ -d "$scsi_device1_path" -a -d "$scsi_device2_path" ]; then echo "Good news: $scsi_device1_path and $scsi_device2_path do actually exist. Looks like we are on the right track :)" else echo echo "Bad news: $scsi_device1_path or $scsi_device2_path do not exist :(" echo "Maybe something went wrong, or you tried to delete a nonexistent LUN?" exit fi echo echo "You are about do remove device /dev/$disk!" echo "To delete this LUN, you shoud use *AT YOUR OWN RISK*:" cmd="echo 1 > \"$scsi_device1_path/device/delete\" && sleep 1 && echo 1 > \"$scsi_device2_path/device/delete\"" echo $cmd echo "For your own safety, nothing was actually deleted by this script :)"