From 993669a7bf17a26843630c547999be0b27483497 Mon Sep 17 00:00:00 2001 From: Simon Guest Date: Thu, 21 Dec 2017 06:42:07 +1300 Subject: vdev_id: new slot type ses This extends vdev_id to support a new slot type, ses, for SCSI Enclosure Services. With slot type ses, the disk slot numbers are determined by using the device slot number reported by sg_ses for the device with matching SAS address, found by querying all available enclosures. This is primarily of use on systems with a deficient driver omitting support for bay_identifier in /sys/devices. In my testing, I found that the existing slot types of port and id were not stable across disk replacement, so an alternative was required. Reviewed-by: Brian Behlendorf Signed-off-by: Simon Guest Closes #6956 --- cmd/vdev_id/vdev_id | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'cmd') diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id index 9fa2d672c..4c7b270a8 100755 --- a/cmd/vdev_id/vdev_id +++ b/cmd/vdev_id/vdev_id @@ -276,6 +276,23 @@ sas_handler() { d=$(eval echo \${$i}) SLOT=`echo $d | sed -e 's/^.*://'` ;; + "ses") + # look for this SAS path in all SCSI Enclosure Services + # (SES) enclosures + sas_address=`cat $end_device_dir/sas_address 2>/dev/null` + enclosures=`lsscsi -g | \ + sed -n -e '/enclosu/s/^.* \([^ ][^ ]*\) *$/\1/p'` + for enclosure in $enclosures; do + set -- $(sg_ses -p aes $enclosure | \ + awk "/device slot number:/{slot=\$12} \ + /SAS address: $sas_address/\ + {print slot}") + SLOT=$1 + if [ -n "$SLOT" ] ; then + break + fi + done + ;; esac if [ -z "$SLOT" ] ; then return -- cgit v1.2.3