436 lines
20 KiB
Groff
436 lines
20 KiB
Groff
.TH SG_PERSIST "8" "June 2018" "sg3_utils\-1.43" SG3_UTILS
|
|
.SH NAME
|
|
sg_persist \- use SCSI PERSISTENT RESERVE command to access registrations
|
|
and reservations
|
|
.SH SYNOPSIS
|
|
.B sg_persist
|
|
[\fIOPTIONS\fR] \fIDEVICE\fR
|
|
.PP
|
|
.B sg_persist
|
|
[\fIOPTIONS\fR] \fI\-\-device=DEVICE\fR
|
|
.PP
|
|
.B sg_persist
|
|
\fI\-\-help\fR | \fI\-\-version\fR
|
|
.SH DESCRIPTION
|
|
.\" Add any additional description here
|
|
.PP
|
|
This utility allows Persistent reservations and registrations to be
|
|
queried and changed. Persistent reservations and registrations are
|
|
queried by sub\-commands (called "service actions" in SPC\-4) of the
|
|
SCSI PERSISTENT RESERVE IN (PRIN) command. Persistent reservations and
|
|
registrations are changed by sub\-commands of the SCSI PERSISTENT RESERVE
|
|
OUT (PROUT) command.
|
|
.PP
|
|
There is a two stage process to obtain a persistent reservation. First an
|
|
application (an I_T nexus in standard's jargon) must register a reservation
|
|
key. If that is accepted (and it should be unless some other I_T nexus has
|
|
registered that key) then the application can try and reserve the device.
|
|
The reserve operation must specify the reservation key and a "type" (see
|
|
the \fI\-\-prout\-type=TYPE\fR option).
|
|
.PP
|
|
It is relatively safe to query the state of Persistent reservations and
|
|
registrations. With no options this utility defaults to the READ KEYS
|
|
sub\-command of the PRIN command. Other PRIN sub\-commands are
|
|
READ RESERVATION, REPORT CAPABILITIES and READ FULL STATUS.
|
|
.PP
|
|
Before trying to change Persistent reservations and registrations users
|
|
should be aware of what they are doing. The relevant sections of the SCSI
|
|
Primary Commands document (i.e. SPC\-5 ANSI INCITS 502\-2020) are sections
|
|
8.14 (titled "Reservations"), 9.16 (for the PRIN command) and 9.17 (for the
|
|
PROUT command). To safeguard against accidental use, the \fI\-\-out\fR option
|
|
must be given when a PROUT sub\-command (e.g. \fI\-\-register\fR) is used.
|
|
.PP
|
|
The older SCSI RESERVE and RELEASE commands (both 6 and 10 byte variants)
|
|
are not supported by this utility. In SPC\-3, RESERVE and RELEASE are
|
|
deprecated, replaced by Persistent Reservations. RESERVE and RELEASE
|
|
have been removed from SPC\-4 and Annex B is provided showing how to
|
|
convert to persistent reservation commands. See a utility
|
|
called 'scsires' for support of the SCSI RESERVE and RELEASE commands.
|
|
.PP
|
|
The \fIDEVICE\fR is required by all variants of this utility apart
|
|
from \fI\-\-help\fR. The \fIDEVICE\fR can be given either as an
|
|
argument (typically but not necessarily the last one) or via
|
|
the \fI\-\-device=DEVICE\fR option.
|
|
.PP
|
|
SPC\-4 does not use the term "sub\-command". It uses the term "service action"
|
|
for this and for part of a field's name in the parameter block associated
|
|
with the PROUT command (i.e. "service action reservation key"). To lessen
|
|
the potential confusion the term "sub\-command" has been introduced.
|
|
.SH OPTIONS
|
|
Arguments to long options are mandatory for short options as well.
|
|
The following options are sorted in alphabetical order, based on their
|
|
long option name.
|
|
.TP
|
|
\fB\-l\fR, \fB\-\-alloc-length\fR=\fILEN\fR
|
|
specify the allocation length of the PRIN command. \fILEN\fR is a hex value.
|
|
By default this value is set to the size of the data\-in buffer (8192).
|
|
This parameter is of use for verification that response to PRIN commands
|
|
with various allocation lengths is per section 4.3.5.6 of SPC\-4 revision 18.
|
|
Valid \fILEN\fR values are 0\-8192.
|
|
.TP
|
|
\fB\-C\fR, \fB\-\-clear\fR
|
|
Clear is a sub\-command of the PROUT command. It releases the
|
|
persistent reservation (if any) and clears all registrations from the
|
|
device. It is required to supply a reservation key that is registered
|
|
for this I_T_L nexus (identified by \fI\-\-param\-rk=RK\fR).
|
|
.TP
|
|
\fB\-d\fR, \fB\-\-device\fR=\fIDEVICE\fR
|
|
\fIDEVICE\fR to send SCSI commands to. The \fIDEVICE\fR can either be
|
|
provided via this option or via a freestanding argument. For example,
|
|
these two: 'sg_persist \-\-device=/dev/sg2' and 'sg_persist /dev/sg2'
|
|
are equivalent.
|
|
.TP
|
|
\fB\-h\fR, \fB\-\-help\fR
|
|
output a usage message showing main options. Use twice (e.g. '\-hh') for
|
|
the other option and more help.
|
|
.TP
|
|
\fB\-H\fR, \fB\-\-hex\fR
|
|
the response to a valid PRIN sub\-command will be output in hexadecimal.
|
|
By default (i.e. without this option) if the PRIN sub\-command is recognised
|
|
then the response will be decoded as per SPC\-4. May be used more than
|
|
once for more hex and less text.
|
|
.TP
|
|
\fB\-i\fR, \fB\-\-in\fR
|
|
specify that a SCSI PERSISTENT RESERVE IN command is required. This
|
|
is the default.
|
|
.TP
|
|
\fB\-m\fR, \fB\-\-maxlen\fR=\fILEN\fR
|
|
\fILEN\fR is used as the ALLOCATION LENGTH field of the PRIN command.
|
|
\fILEN\fR is by default a decimal value. To give a hex value use a '0x'
|
|
or '0X' prefix, or use a 'h' (or 'H') suffix. Can also take multipliers,
|
|
see \fI\-\-maxlen=LEN\fR option in the sg3_utils manual page.
|
|
.br
|
|
This option is the same as \fI\-\-alloc\-length=LEN\fR option apart from
|
|
the representation of \fILEN\fR. The option defaults to decimal while
|
|
\fI\-\-alloc\-length=LEN\fR only takes hex.
|
|
.TP
|
|
\fB\-n\fR, \fB\-\-no\-inquiry\fR
|
|
the default action is to do a standard SCSI INQUIRY command and output
|
|
make, product and revision strings plus the peripheral device type
|
|
prior to executing a PRIN or PROUT command. With this option the
|
|
INQUIRY command is skipped.
|
|
.TP
|
|
\fB\-o\fR, \fB\-\-out\fR
|
|
specify that a SCSI PERSISTENT RESERVE OUT command is required.
|
|
.TP
|
|
\fB\-Y\fR, \fB\-\-param\-alltgpt\fR
|
|
set the 'all target ports' (ALL_TG_PT) flag in the parameter block of the
|
|
PROUT command. Only relevant for 'register' and 'register and ignore existing
|
|
key' sub\-commands.
|
|
.TP
|
|
\fB\-Z\fR, \fB\-\-param\-aptpl\fR
|
|
set the 'activate persist through power loss' (APTPL) flag in the parameter
|
|
block of the PROUT command. Relevant for 'register', 'register and ignore
|
|
existing key' and 'register and move' sub\-commands.
|
|
.TP
|
|
\fB\-K\fR, \fB\-\-param\-rk\fR=\fIRK\fR
|
|
specify the reservation key found in the parameter block of the PROUT
|
|
command. \fIRK\fR is assumed to be hex (up to 8 bytes long). Default value
|
|
is 0. This option is needed by most PROUT sub\-commands.
|
|
.TP
|
|
\fB\-S\fR, \fB\-\-param\-sark\fR=\fISARK\fR
|
|
specify the service action reservation key found in the parameter block
|
|
of the PROUT command. \fISARK\fR is assumed to be hex (up to 8 bytes long).
|
|
Default value is 0. This option is needed by some PROUT sub\-commands.
|
|
.TP
|
|
\fB\-P\fR, \fB\-\-preempt\fR
|
|
Preempt is a sub\-command of the PROUT command. Preempts the existing
|
|
persistent reservation (identified by \fI\-\-param\-sark=SARK\fR) with
|
|
the registration key that is registered for this I_T_L nexus (identified
|
|
by \fI\-\-param\-rk=RK\fR). If a new reservation is established as
|
|
a result of the preemption then the supplied \fI\-\-prout\-type=TYPE\fR
|
|
is used as the type for this new reservation.
|
|
.TP
|
|
\fB\-A\fR, \fB\-\-preempt\-abort\fR
|
|
Preempt and Abort is a sub\-command of the PROUT command. Preempts
|
|
the existing persistent reservation (identified by \fI\-\-param\-sark=SARK\fR)
|
|
with the registration key that is registered for this I_T_L nexus (identified
|
|
by \fI\-\-param\-rk=RK\fR). If a new reservation is established as
|
|
a result of the preemption then the supplied \fI\-\-prout\-type=TYPE\fR
|
|
is used as the type for this new reservation. ACA and other pending
|
|
tasks are aborted.
|
|
.TP
|
|
\fB\-T\fR, \fB\-\-prout\-type\fR=\fITYPE\fR
|
|
specify the PROUT command's 'type' argument. Required by
|
|
the 'register\-move', 'reserve', 'release' and 'preempt (and abort)'
|
|
sub\-commands. Valid \fITYPE\fR values: 1\-> write exclusive, 3\->
|
|
exclusive access, 5\-> write exclusive \- registrants only, 6\->
|
|
exclusive access \- registrants only, 7\-> write exclusive \- all registrants,
|
|
8\-> exclusive access \- all registrants. Default value is 0 (which is
|
|
an invalid type). Each "persistent reservation type" is explained in more
|
|
detail in a subsection of that name in the read reservation section of
|
|
the PRIN command (section 6.15.3.3 of SPC\-4 revision 37).
|
|
.TP
|
|
\fB\-s\fR, \fB\-\-read\-full\-status\fR
|
|
Read Full Status is a sub\-command of the PRIN command. For each registration
|
|
with the given SCSI device, it lists the reservation key and associated
|
|
information. TransportIDs, if supplied in the response, are decoded.
|
|
.TP
|
|
\fB\-k\fR, \fB\-\-read\-keys\fR
|
|
Read Keys is a sub\-command of the PRIN command. Lists all the reservation
|
|
keys registered (i.e. registrations) with the given SCSI device. This is
|
|
the default sub\-command for the SCSI PRIN command.
|
|
.TP
|
|
\fB\-y\fR, \fB\-\-readonly\fR
|
|
Open \fIDEVICE\fR read\-only. May be useful with PRIN commands if there are
|
|
unwanted side effects with the default read\-write open. When given twice
|
|
is interpreted as forcing a read\-write open thus overriding the
|
|
SG_PERSIST_IN_RDONLY environment variable if present. See the ENVIRONMENT
|
|
VARIABLES section for more.
|
|
.TP
|
|
\fB\-r\fR, \fB\-\-read\-reservation\fR
|
|
Read Reservation is a sub\-command of the PRIN command. List information
|
|
about the current holder of the reservation on the \fIDEVICE\fR. If there
|
|
is no current reservation this will be noted. Information about the current
|
|
holder of the reservation includes its reservation key, scope and type.
|
|
.TP
|
|
\fB\-s\fR, \fB\-\-read\-status\fR
|
|
same as \fI\-\-read\-full\-status\fR.
|
|
.TP
|
|
\fB\-G\fR, \fB\-\-register\fR
|
|
Register is a sub\-command of the PROUT command. It has 3 different
|
|
actions depending on associated parameters. a) add a new registration
|
|
with '\-\-param\-rk=0' and '\-\-param\-sark=<new_rk>'; b) Change an existing
|
|
registration with '\-\-param\-rk=<old_rk>'
|
|
and '\-\-param\-sark=<new_rk>'; or c) Delete an existing registration
|
|
with '\-\-param\-rk=<old_rk>' and '\-\-param\-sark=0'.
|
|
.TP
|
|
\fB\-I\fR, \fB\-\-register\-ignore\fR
|
|
Register and Ignore Existing Key is a sub\-command of the PROUT command.
|
|
Similar to \fI\-\-register\fR except that when changing a reservation key
|
|
the old key is not specified. The '\-\-param\-sark=<new_rk>' option should
|
|
also be given.
|
|
.TP
|
|
\fB\-M\fR, \fB\-\-register\-move\fR
|
|
register (another initiator) and move (the reservation held by the current
|
|
initiator to that other initiator) is a sub\-command of the PROUT command.
|
|
It requires the transportID of the other initiator. [The standard uses the
|
|
term I_T nexus but the point to stress is that there are two initiators
|
|
(the one sending this command and another one) but only one logical unit.]
|
|
The \fI\-\-prout\-type=TYPE\fR and \fI\-\-param\-rk=RK\fR options need to
|
|
match that of the existing reservation while \fI\-\-param\-sark=SARK\fR
|
|
option specifies the reservation key of the new (i.e. destination)
|
|
registration.
|
|
.TP
|
|
\fB\-Q\fR, \fB\-\-relative\-target\-port\fR=\fIRTPI\fR
|
|
relative target port identifier that reservation is to be moved to by
|
|
PROUT 'register and move' sub\-command. \fIRTPI\fR is assumed to be hex
|
|
in the range 0 to ffff inclusive. Defaults to 0 .
|
|
.TP
|
|
\fB\-L\fR, \fB\-\-release\fR
|
|
Release is a sub\-command of the PROUT command. It releases the
|
|
current persistent reservation. The \fI\-\-prout\-type=TYPE\fR
|
|
and \fI\-\-param\-rk=RK\fR options, matching the reservation, must also be
|
|
specified.
|
|
.TP
|
|
\fB\-z\fR, \fB\-\-replace\-lost\fR
|
|
Replace Lost Reservation is a sub\-command of the PROUT command. It "begins
|
|
a recovery process for the lost persistent reservation that is managed by
|
|
application clients". It also stops the device server terminating commands
|
|
due to a lost persistent reservation. Options should be
|
|
be '\-\-param\-rk=0' (or not given), '\-\-param\-sark=<new_rk>'
|
|
and \fI\-\-prout\-type=TYPE\fR.
|
|
.TP
|
|
\fB\-c\fR, \fB\-\-report\-capabilities\fR
|
|
Report Capabilities is a sub\-command of the PRIN command. It lists
|
|
information about the aspects of persistent reservations that the
|
|
\fIDEVICE\fR supports.
|
|
.TP
|
|
\fB\-R\fR, \fB\-\-reserve\fR
|
|
Reserve is a sub\-command of the PROUT command. It creates a new
|
|
persistent reservation (if permitted). The \fI\-\-prout\-type=TYPE\fR
|
|
and \fI\-\-param\-rk=RK\fR options must also be specified.
|
|
.TP
|
|
\fB\-X\fR, \fB\-\-transport\-id\fR=\fITIDS\fR
|
|
The \fITIDS\fR argument can take one of several forms. It can be a
|
|
comma (or single space) separated list of ASCII hex bytes representing
|
|
a single TransportID as defined in SPC\-5. They are usually 24 bytes
|
|
long apart from in iSCSI. The \fITIDS\fR argument may be a transport
|
|
specific form (e.g. "sas,5000c50005b32001" is clearer than an equivalent
|
|
to the hex byte form: "6,0,0,0,5,0,c5,0,5,b3,20,1"). The \fITIDS\fR argument
|
|
may be "\-" in which case one or more TransportIDs can be read from stdin.
|
|
The \fITIDS\fR argument may be of the form "file=<name>" in which case
|
|
one or more TransportIDs can be read from a file called <name>. See
|
|
the "TRANSPORT IDs" section below for more information.
|
|
.TP
|
|
\fB\-U\fR, \fB\-\-unreg\fR
|
|
optional when the PROUT register and move sub\-command is invoked. If given
|
|
it will unregister the current initiator (I_T nexus) after the other initiator
|
|
has been registered and the reservation moved to it. When not given the
|
|
initiator (I_T nexus) that sent the PROUT command remains registered.
|
|
.TP
|
|
\fB\-v\fR, \fB\-\-verbose\fR
|
|
print out cdb of issued commands prior to execution. If used twice
|
|
prints out the parameter block associated with the PROUT command prior
|
|
to its execution as well. If used thrice decodes given transportID(s)
|
|
as well. To see the response to a PRIN command in low level form use
|
|
the \fI\-\-hex\fR option.
|
|
.TP
|
|
\fB\-V\fR, \fB\-\-version\fR
|
|
print out version string. Ignore all other parameters.
|
|
.TP
|
|
\fB\-?\fR
|
|
output usage message. Ignore all other parameters.
|
|
.SH TRANSPORT IDs
|
|
TransportIDs are used in persistent reservations to identify initiators.
|
|
The format of a TransportID differs depending on the type of transport
|
|
being used. Their format is described in SPC\-4 (in draft revision 37 see
|
|
section 7.6.4).
|
|
.PP
|
|
A TransportID is required for the PROUT 'register and move' sub\-command and
|
|
the PROUT 'register' sub\-command can have zero, one or more TransportIDs.
|
|
.PP
|
|
When the \fI\-\-transport\-id=TIDS\fR option is given then the \fITIDS\fR
|
|
argument may be a comma (or single space) separated list of ASCII hex bytes
|
|
that represent a single TransportID as defined in SPC\-4. Alternatively the
|
|
\fITIDS\fR argument may be a transport specific string starting with
|
|
either "fcp,", "spi,", "sbp,", "srp,", "iqn", "sas," or "sop,". The "iqn"
|
|
form is an iSCSI qualified name. Apart from "iqn" the other transport
|
|
specific leadin string may be given in upper case (e.g. "FCP,").
|
|
.PP
|
|
The "fcp," form should be followed by 16 ASCII hex digits that represent an
|
|
initiator's N_PORT_NAME (e.g. "fcp,10000000C9F3A571"). The "spi," form should
|
|
be followed by "<scsi_address>,<relative_target_port_identifier>" (both
|
|
decimal numbers). The "sbp," form should be followed by 16 ASCII hex digits
|
|
that represent an initiator's EUI\-64 name. The "srp," form should be
|
|
followed by 32 ASCII hex digits that represent an initiator port identifier.
|
|
The "sas," form should be followed by 16 ASCII hex digits that represent an
|
|
initiator's port SAS address (e.g. "sas,5000c50005b32001"). The "sop," form
|
|
takes a hex number that represents a routing id.
|
|
.PP
|
|
There are two iSCSI qualified name forms. The shorter form contains the
|
|
iSCSI name of the initiator
|
|
port (e.g. "iqn.5886.com.acme.diskarrays\-sn\-a8675309"). The longer form
|
|
adds the initiator session id (ISID in hex) separated by ",i,0x".
|
|
For example "iqn.5886.com.acme.diskarrays\-sn\-a8675309,i,0x1234567890ab".
|
|
On the command line to stop punctuation in an iSCSI name
|
|
being (mis)\-interpreted by the shell, putting the option argument
|
|
containing the iSCSI name in double quotes is advised. iSCSI names are
|
|
encoded in UTF\-8 so if non (7 bit) ASCII characters appear in the
|
|
iSCSI name on the command line, there will be difficulties if they are not
|
|
encoded in UTF\-8. The locale can be changed temporarily by prefixing the
|
|
command line invocation of sg_persist with "LANG=en_US.utf\-8" for example.
|
|
.PP
|
|
Alternatively the \fITIDS\fR argument may specify a file (or pipe) from which
|
|
one or more TransportIDs may be read. If the \fITIDS\fR argument is "\-"
|
|
then stdin (standard input) is read. If the \fITIDS\fR argument is of the
|
|
form "file=<name>" then a file called <name> is read.
|
|
A valid SPC\-4 TransportID is built from the transport specific string
|
|
outlined in the previous paragraphs. The parsing of the data read is
|
|
relatively simple. Empty lines are ignored. Everything from and including
|
|
a "#" on a line is ignored. Leading spaces and tabs are ignored. There
|
|
can be one transportID per line. The transportID can either be a comma,
|
|
space or tab separated list of ASCII hex bytes that represent a
|
|
TransportID as defined in SPC\-4. Padding with zero bytes to a minimum
|
|
length of 24 bytes is performed if necessary. The transportID may also
|
|
be transport specific string type discussed above.
|
|
.PP
|
|
In SPC\-3 the SPEC_I_PT bit set to one and TransportIDs were allowed for
|
|
the PROUT register and ignore existing key sub\-command. In SPC\-4 that
|
|
is disallowed yielding a CHECK CONDITION status with and ILLEGAL REQUEST
|
|
sense key and an additional sense code set to INVALID FIELD IN PARAMETER
|
|
LIST.
|
|
.SH NOTES
|
|
In the 2.4 series of Linux kernels the \fIDEVICE\fR must be
|
|
a SCSI generic (sg) device. In the 2.6 series any SCSI device
|
|
name (e.g. /dev/sdc, /dev/st1m or /dev/sg3) can be specified.
|
|
For example "sg_persist \-\-read\-keys /dev/sdb"
|
|
will work in the 2.6 series kernels.
|
|
.PP
|
|
The only scope for PROUT commands supported in the current draft of
|
|
SPC\-4 is "LU_SCOPE". Hence there seems to be no point in offering an
|
|
option to set scope to another value.
|
|
.PP
|
|
Most errors with the PROUT sub\-commands (e.g. missing or
|
|
mismatched \fI\-\-prout\-type=TYPE\fR) will result in a RESERVATION
|
|
CONFLICT status. This can be a bit confusing when you know there is
|
|
only one (active) initiator: the "conflict" is with the SPC standard, not
|
|
another initiator.
|
|
.PP
|
|
Some recent disks accept some PRIN and PROUT sub\-commands when the
|
|
media is stopped. One exception was setting the APTPL flag (with
|
|
the \fI\-\-param\-aptpl\fR option) during a key register operation,
|
|
it complained if the disk one stopped. The error indicated it wanted
|
|
the disk spun up and when that happened, the registration was
|
|
successful.
|
|
.SH EXAMPLES
|
|
These examples use Linux device names. For suitable device names in
|
|
other supported Operating Systems see the sg3_utils(8) man page.
|
|
.PP
|
|
Due to the various option defaults the simplest example executes
|
|
the 'read keys' sub\-command of the PRIN command:
|
|
.PP
|
|
sg_persist /dev/sdb
|
|
.PP
|
|
This is the same as the following (long\-winded) command:
|
|
.PP
|
|
sg_persist \-\-in \-\-read\-keys \-\-device=/dev/sdb
|
|
.PP
|
|
To read the current reservation either the '\-\-read\-reservation' form or
|
|
the shorter '\-r' can be used:
|
|
.PP
|
|
sg_persist \-r /dev/sdb
|
|
.PP
|
|
To
|
|
.B register
|
|
the new reservation key 0x123abc the following could be used:
|
|
.PP
|
|
sg_persist \-\-out \-\-register \-\-param\-sark=123abc /dev/sdb
|
|
.PP
|
|
Given the above registration succeeds, to
|
|
.B reserve
|
|
the \fIDEVICE\fR (with type 'write exclusive') the following
|
|
could be used:
|
|
.PP
|
|
sg_persist \-\-out \-\-reserve \-\-param\-rk=123abc
|
|
.br
|
|
\-\-prout\-type=1 /dev/sdb
|
|
.PP
|
|
To
|
|
.B release
|
|
the reservation the following can be given (note that
|
|
the \-\-param\-rk and \-\-prout\-type arguments must match those of the
|
|
reservation):
|
|
.PP
|
|
sg_persist \-\-out \-\-release \-\-param\-rk=123abc
|
|
.br
|
|
\-\-prout\-type=1 /dev/sdb
|
|
.PP
|
|
Finally to
|
|
.B unregister
|
|
a reservation key (and not effect other
|
|
registrations which is what '\-\-clear' would do) the command
|
|
is a little surprising:
|
|
.PP
|
|
sg_persist \-\-out \-\-register \-\-param\-rk=123abc /dev/sdb
|
|
.PP
|
|
Now have a close look at the difference between the register and
|
|
unregister examples above.
|
|
.PP
|
|
An example file that is suitably formatted to pass transportIDs via
|
|
a '\-\-transport\-id=file=transport_ids.txt' option can be found in the
|
|
examples sub\-directory of the sg3_utils package. There is also a
|
|
simple test script called sg_persist_tst.sh in the same directory.
|
|
.PP
|
|
The above sequence of commands was tested successfully on a Seagate Savvio
|
|
10K.3 disk and a 1200 SSD both of which have SAS interfaces.
|
|
.SH EXIT STATUS
|
|
The exit status of sg_persist is 0 when it is successful. Otherwise see
|
|
the sg3_utils(8) man page.
|
|
.SH ENVIRONMENT VARIABLES
|
|
Currently there is one recognised environment variable: SG_PERSIST_IN_RDONLY.
|
|
If present and only if a PRIN command has been selected then the
|
|
given \fIDEVICE\fR is opened read\-only (e.g. in Unix that is with the
|
|
O_RDONLY flag). See the \fI\-\-readonly\fR option.
|
|
.SH AUTHOR
|
|
Written by Douglas Gilbert
|
|
.SH "REPORTING BUGS"
|
|
Report bugs to <dgilbert at interlog dot com>.
|
|
.SH COPYRIGHT
|
|
Copyright \(co 2004\-2018 Douglas Gilbert
|
|
.br
|
|
This software is distributed under the GPL version 2. There is NO
|
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
.SH "SEE ALSO"
|
|
.B sg3_utils(sg3_utils), scsires(internet)
|