[stgt] SCSI ID uniqueness: VMware initiator
Yaron Sheffer
yaronf at porticor.com
Thu Oct 25 11:04:54 CEST 2012
Hi Fujita,
thanks for your response, much appreciated. Please see below.
Yaron
On 10/25/2012 07:46 AM, FUJITA Tomonori wrote:
> [...]
>> * target name needs to be globally unique.
>>
>> Trying to work around the issue, we attempted to set the SCSI ID
>> parameter for the LUN using this command: tgtadm --mode logicalunit
>> --op update --tid $tid --lun $lun --params scsi_id="my id"
>>
>>
>> * This syntax is undocumented. Can you please add it to the man page? Or
>> * can I provide such a patch?
> Please send the patch. I'll merge it.
Attached.
> [...]
>> Finally we just randomized the target ID value, which causes tgtadm to
>> generate a somewhat randomized SCSI ID, and makes VMware happy. We
>> also patched tgt-admin to dump the tid value and accept it back in its
>> "execute" mode. I will gladly share this patch, but I suspect that it
>> is the wrong thing to do from an architectural POV. Any opinions?
> scsi id is supposed to be parsistent after reboot. We can't use random
> values every time.
Sure, we persist the configuration (*including* the tid value) with the
patched tgt-admin. The SCSI_ID is derived from the tid, so it does not
change after reboot. It would have been better to persist SCSI_ID
directly, but then we would have to change the format of the tgt-admin
config file rather drastically. The format is extensible enough to
support per-target parameters, but not per-LUN parameters.
I am attaching the tgt-admin patch, although I don't think it is the
"right" way of solving this problem.
--
*Yaron Sheffer*|Co-Founder and CTO, *Porticor Cloud Security*| T:+972 73
7294673 <tel:+972-73-7294673> | M:+972 52 8698984 <tel:+972-52-8698984>
| yaronf at porticor.com <mailto:yaronf at porticor.com> |www.porticor.com
<http://www.porticor.com/>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tgtadm.8.xml.patch
Type: text/x-patch
Size: 850 bytes
Desc: not available
URL: <http://lists.wpkg.org/pipermail/stgt/attachments/20121025/76a3a17c/attachment-0004.bin>
-------------- next part --------------
--- /usr/sbin/tgt-admin.orig 2012-10-15 08:28:00.932922867 -0700
+++ tgt-admin 2012-10-16 07:02:17.448209072 -0700
@@ -35,6 +35,7 @@
-p, --pretend only print tgtadm options
--dump dump current tgtd configuration (note: does not
include detailed parameters, like write caching)
+ --fix-tid dump (and respectfully, restore) the target's TID
-v, --verbose increase verbosity (show tgtadm commands)
-h, --help show this help
@@ -53,6 +54,7 @@
my $alternate_conf="0";
my $ignore_errors = 0;
my $force = 0;
+my $fix_tid = 0;
my $pretend = 0;
my $dump = 0;
my $verbose = 0;
@@ -66,6 +68,7 @@
"s|show" => \$show,
"c|conf=s" => \$alternate_conf,
"ignore-errors" => \$ignore_errors,
+ "fix-tid" => \$fix_tid,
"f|force" => \$force,
"p|pretend" => \$pretend,
"dump" => \$dump,
@@ -200,8 +203,10 @@
{
# We have to find available tid
if ($in_configfile == 1 && $configured == 0 && $pretend == 0) {
- my $maxtid = find_max_tid();
- $next_tid = $maxtid + 1;
+ if ($fix_tid == 0) {
+ my $maxtid = find_max_tid();
+ $next_tid = $maxtid + 1;
+ }
} elsif (length $single_target && $configured == 1) {
$next_tid = $tgtadm_output_tid{$target};
} else {
@@ -226,12 +231,22 @@
if (not defined $target_options{"driver"}) {
$target_options{"driver"} = $default_driver;
}
+ if ($fix_tid == 1) {
+ if (not defined $target_options{"tid"}) {
+ print "Running in fix-tid mode, but tid not defined";
+ exit 1;
+ }
+ $next_tid = $target_options{"tid"};
+ }
my $driver = $target_options{"driver"};
execute("# Adding target: $target");
execute("tgtadm --lld $driver --op new --mode target --tid $next_tid -T $target");
foreach my $k3 (sort keys %{$conf{$k}{$k2}}) {
$option = $k3;
$value = $conf{$k}{$k2}{$k3};
+ if ($option eq "tid") {
+ next;
+ }
check_value($value);
process_options($target_options_ref,$data_key);
# If there was no option called "initiator-address", it means
@@ -752,6 +767,10 @@
my $target_name = show_target_info($current_target, "target_name");
print "<target $target_name>\n";
+ if ($fix_tid == 1) {
+ print "\ttid " . $tgtadm_output_tid{$target_name} . "\n";
+ }
+
if (scalar @drivers_combined_uniq gt 1) {
my $driver = show_target_info($current_target, "driver");
print "\tdriver $driver\n";
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4462 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.wpkg.org/pipermail/stgt/attachments/20121025/76a3a17c/attachment-0005.bin>
More information about the stgt
mailing list