diff options
author | Simon Guest <[email protected]> | 2017-12-21 06:42:07 +1300 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2017-12-20 09:42:07 -0800 |
commit | 993669a7bf17a26843630c547999be0b27483497 (patch) | |
tree | e443e3501a3acf6ba4b993d16b4b3a22934c19ee | |
parent | 89a66a0457cd392ab8c6ad6d9c138fedaa425067 (diff) |
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 <[email protected]>
Signed-off-by: Simon Guest <[email protected]>
Closes #6956
-rwxr-xr-x | cmd/vdev_id/vdev_id | 17 | ||||
-rw-r--r-- | man/man5/vdev_id.conf.5 | 8 |
2 files changed, 24 insertions, 1 deletions
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 diff --git a/man/man5/vdev_id.conf.5 b/man/man5/vdev_id.conf.5 index eff8c27cc..50caa92c0 100644 --- a/man/man5/vdev_id.conf.5 +++ b/man/man5/vdev_id.conf.5 @@ -90,7 +90,7 @@ internally uses this value to determine which HBA or switch port a device is connected to. The default is 4. .TP -\fIslot\fR <bay|phy|port|id|lun> +\fIslot\fR <bay|phy|port|id|lun|ses> Specifies from which element of a SAS identifier the slot number is taken. The default is bay. @@ -103,6 +103,12 @@ taken. The default is bay. \fIid\fR - use the scsi id as the slot number. \fIlun\fR - use the scsi lun as the slot number. + +\fIses\fR - use the SCSI Enclosure Services (SES) enclosure device slot number, +as reported by +.BR sg_ses (8). +This is intended for use only on systems where \fIbay\fR is unsupported, +noting that \fIport\fR and \fIid\fR may be unstable across disk replacement. .SH EXAMPLES A non-multipath configuration with direct-attached SAS enclosures and an arbitrary slot re-mapping. |