From 7f8ddf96a25162f06bd94a684cf700c128d18142 Mon Sep 17 00:00:00 2001 From: Joerg Steffens Date: Tue, 21 Nov 2017 12:21:49 +0100 Subject: [PATCH 1/2] udev-rules: make tape-changers also apprear in /dev/tape/by-path/ It is important to be able to access tape changer ("Medium Changers") by persistant name. While tape devices can be accessed via /dev/tape/by-id/ and /dev/tape/by-path/, tape-changers could only be accessed by /dev/tape/by-id/. However, in some cases, especially when accessing Amazon Webservice Storage Gateway VTLs (or accessing iSCSI VTLs in general?) this does not work, as all tape devices and the tape changer have the same ENV{ID_SERIAL}. The results is, that only the last device is available in /dev/tape/by-id/, as the former devices have been overwritten. As this behavior is hard to change without breaking consistentcy, this additional device in /dev/tape/by-path/ can be used to access the medium changes. The tape devices can also be accessed by this path. The content of the directory will now look like: # SCSI tape device, rewind (unchanged) /dev/tape/by-path/$env{ID_PATH} -> ../../st* # SCSI tape device, no-rewind (unchanged) /dev/tape/by-path/$env{ID_PATH}-nst -> ../../nst* # SCSI tape changer device (newly added) /dev/tape/by-path/$env{ID_PATH}-changer -> ../../sg* Tape devices and tape changer have different ID_PATHs. SCSI tape changer get the suffix "-changer" to make them better distinguishable from tape devices. --- rules/60-persistent-storage-tape.rules | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rules/60-persistent-storage-tape.rules b/rules/60-persistent-storage-tape.rules index b604864ee8..0575f308df 100644 --- a/rules/60-persistent-storage-tape.rules +++ b/rules/60-persistent-storage-tape.rules @@ -9,6 +9,9 @@ ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_t SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \ SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}" +SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{builtin}="path_id", \ + SYMLINK+="tape/by-path/$env{ID_PATH}-changer" + SUBSYSTEM!="scsi_tape", GOTO="persistent_storage_tape_end" KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_BUS}="ieee1394" From 8d0edd1172e6b61881528fd2428ced520f6862a6 Mon Sep 17 00:00:00 2001 From: Joerg Steffens Date: Tue, 21 Nov 2017 12:52:57 +0100 Subject: [PATCH 2/2] udev-rules: make tape devices also accessable by ENV{ID_SCSI_SERIAL} Tape and tape changer devices from Amazon Webservice Storage Gateway VTLs and maybe other iSCSI VTLs all have the same ENV{ID_SERIAL}. The results is, that only the last device is available in /dev/tape/by-id/, as the former devices have been overwritten. However, the devices can be distinguished by ENV{ID_SCSI_SERIAL}. ENV{ID_SCSI_SERIAL} is not set on directly connected SCSI devices. This rule additional creates links based on the ENV{ID_SCSI_SERIAL}, if it is set. In my case, it creates (ID_SCSI_SERIAL) /dev/tape/by-id/scsi-AMZN_SGW-6BF81D02_MC_00001 /dev/tape/by-id/scsi-AMZN_SGW-6BF81D02_TD_00001 /dev/tape/by-id/scsi-AMZN_SGW-6BF81D02_TD_00002 ... instead of only (ID_SERIAL) scsi-2414d5a4e5f5347572d364246 --- rules/60-persistent-storage-tape.rules | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/rules/60-persistent-storage-tape.rules b/rules/60-persistent-storage-tape.rules index 0575f308df..0136140a46 100644 --- a/rules/60-persistent-storage-tape.rules +++ b/rules/60-persistent-storage-tape.rules @@ -9,6 +9,11 @@ ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_t SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \ SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}" +# iSCSI devices from the same host have all the same ID_SERIAL, +# but additionally a property named ID_SCSI_SERIAL. +SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", ENV{ID_SCSI_SERIAL}=="?*", \ + SYMLINK+="tape/by-id/scsi-$env{ID_SCSI_SERIAL}" + SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{builtin}="path_id", \ SYMLINK+="tape/by-path/$env{ID_PATH}-changer" @@ -18,8 +23,10 @@ KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ie KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id" KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi" -KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}" -KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" +KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}" +KERNEL=="st*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}" +KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" +KERNEL=="nst*[0-9]", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SCSI_SERIAL}-nst" # by-path (parent device path) KERNEL=="st*[0-9]|nst*[0-9]", IMPORT{builtin}="path_id"