sg_persist(8) - phpMan

Command: man perldoc info search(apropos)  


SG_PERSIST(8)                               SG3_UTILS                               SG_PERSIST(8)

NAME
       sg_persist - use SCSI PERSISTENT RESERVE command to access registrations and reservations

SYNOPSIS
       sg_persist [OPTIONS] DEVICE

       sg_persist [OPTIONS] --device=DEVICE

       sg_persist --help | --version

DESCRIPTION
       This  utility  allows Persistent reservations and registrations to be queried and changed.
       Persistent reservations and registrations are queried by sub-commands (called "service ac-
       tions" 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.

       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 --prout-type=TYPE option).

       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.

       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  whose most recent draft is revision 18 dated 4 January 2018) are sections 5.14 (ti-
       tled "Reservations"), 6.16 (for the PRIN command) and 6.17 (for  the  PROUT  command).  To
       safeguard  against accidental use, the --out option must be given when a PROUT sub-command
       (e.g.  --register) is used.

       The older SCSI RESERVE and RELEASE commands (both 6 and 10 byte  variants)  are  not  sup-
       ported  by this utility. In SPC-3, RESERVE and RELEASE are deprecated, replaced by Persis-
       tent Reservations. RESERVE and RELEASE have been removed from SPC-4 and Annex  B  is  pro-
       vided showing how to convert to persistent reservation commands. See a utility called 'sc-
       sires' for support of the SCSI RESERVE and RELEASE commands.

       The DEVICE is required by all variants of this utility apart from --help. The  DEVICE  can
       be  given  either  as  an argument (typically but not necessarily the last one) or via the
       --device=DEVICE option.

       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-com-
       mand" has been introduced.

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.

       -l, --alloc-length=LEN
              specify the allocation length of the PRIN command. LEN 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 LEN values are 0-8192.

       -C, --clear
              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
              --param-rk=RK).

       -d, --device=DEVICE
              DEVICE to send SCSI commands to. The DEVICE can either be provided via this  option
              or  via  a  freestanding  argument.  For  example,  these  two:  'sg_persist  --de-
              vice=/dev/sg2' and 'sg_persist /dev/sg2' are equivalent.

       -h, --help
              output a usage message showing main options. Use twice (e.g. '-hh') for  the  other
              option and more help.

       -H, --hex
              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.

       -i, --in
              specify that a SCSI PERSISTENT RESERVE IN command is required. This is the default.

       -m, --maxlen=LEN
              LEN is used as the ALLOCATION LENGTH field of the PRIN command.  LEN 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 --maxlen=LEN option  in  the  sg3_utils
              manual page.
              This  option is the same as --alloc-length=LEN option apart from the representation
              of LEN. The option defaults to decimal while --alloc-length=LEN only takes hex.

       -n, --no-inquiry
              the default action is to do a standard SCSI INQUIRY command and output make,  prod-
              uct  and revision strings plus the peripheral device type prior to executing a PRIN
              or PROUT command. With this option the INQUIRY command is skipped.

       -o, --out
              specify that a SCSI PERSISTENT RESERVE OUT command is required.

       -Y, --param-alltgpt
              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.

       -Z, --param-aptpl
              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.

       -K, --param-rk=RK
              specify the reservation key found in the parameter block of the PROUT  command.  RK
              is  assumed  to  be  hex  (up  to 8 bytes long). Default value is 0. This option is
              needed by most PROUT sub-commands.

       -S, --param-sark=SARK
              specify the service action reservation key found in  the  parameter  block  of  the
              PROUT command. SARK is assumed to be hex (up to 8 bytes long).  Default value is 0.
              This option is needed by some PROUT sub-commands.

       -P, --preempt
              Preempt is a sub-command of the PROUT command.  Preempts  the  existing  persistent
              reservation  (identified  by  --param-sark=SARK)  with the registration key that is
              registered for this I_T_L nexus (identified by --param-rk=RK). If a new reservation
              is established as a result of the preemption then the supplied --prout-type=TYPE is
              used as the type for this new reservation.

       -A, --preempt-abort
              Preempt and Abort is a sub-command of the PROUT command. Preempts the existing per-
              sistent  reservation  (identified  by  --param-sark=SARK) with the registration key
              that is registered for this I_T_L nexus (identified by  --param-rk=RK).  If  a  new
              reservation  is  established  as  a  result  of  the  preemption  then the supplied
              --prout-type=TYPE is used as the type for this new reservation. ACA and other pend-
              ing tasks are aborted.

       -T, --prout-type=TYPE
              specify  the PROUT command's 'type' argument. Required by the 'register-move', 're-
              serve', 'release' and 'preempt (and abort)' sub-commands. Valid  TYPE  values:  1->
              write  exclusive, 3-> exclusive access, 5-> write exclusive - registrants only, 6->
              exclusive access - registrants only, 7-> write exclusive - all registrants, 8-> ex-
              clusive  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).

       -s, --read-full-status
              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.

       -k, --read-keys
              Read Keys is a sub-command of the PRIN command. Lists all the reservation keys reg-
              istered  (i.e.  registrations)  with  the  given  SCSI  device. This is the default
              sub-command for the SCSI PRIN command.

       -y, --readonly
              Open DEVICE 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 forc-
              ing a read-write open thus overriding the SG_PERSIST_IN_RDONLY environment variable
              if present. See the ENVIRONMENT VARIABLES section for more.

       -r, --read-reservation
              Read  Reservation  is a sub-command of the PRIN command. List information about the
              current holder of the reservation on the DEVICE. If there is no current reservation
              this  will  be  noted.  Information about the current holder of the reservation in-
              cludes its reservation key, scope and type.

       -s, --read-status
              same as --read-full-status.

       -G, --register
              Register is a sub-command of the PROUT command. It has 3 different actions  depend-
              ing  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 regis-
              tration with '--param-rk=<old_rk>' and '--param-sark=0'.

       -I, --register-ignore
              Register and Ignore Existing Key is a sub-command of the PROUT command.  Similar to
              --register  except  that  when changing a reservation key the old key is not speci-
              fied. The '--param-sark=<new_rk>' option should also be given.

       -M, --register-move
              register (another initiator) and move (the reservation held by the current  initia-
              tor  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   --prout-type=TYPE   and
              --param-rk=RK  options  need  to  match  that  of  the  existing  reservation while
              --param-sark=SARK option specifies the reservation key of the  new  (i.e.  destina-
              tion) registration.

       -Q, --relative-target-port=RTPI
              relative target port identifier that reservation is to be moved to by PROUT 'regis-
              ter and move' sub-command. RTPI is assumed to be hex in the range 0 to ffff  inclu-
              sive. Defaults to 0 .

       -L, --release
              Release  is  a sub-command of the PROUT command. It releases the current persistent
              reservation. The --prout-type=TYPE and --param-rk=RK options, matching the reserva-
              tion, must also be specified.

       -z, --replace-lost
              Replace  Lost  Reservation is a sub-command of the PROUT command.  It "begins a re-
              covery process for the lost persistent reservation that is managed  by  application
              clients".  It  also stops the device server terminating commands due to a lost per-
              sistent  reservation.  Options  should  be  be  '--param-rk=0'  (or   not   given),
              '--param-sark=<new_rk>' and --prout-type=TYPE.

       -c, --report-capabilities
              Report  Capabilities  is  a  sub-command  of the PRIN command. It lists information
              about the aspects of persistent reservations that the DEVICE supports.

       -R, --reserve
              Reserve is a sub-command of the PROUT command. It creates a new persistent reserva-
              tion  (if  permitted). The --prout-type=TYPE and --param-rk=RK options must also be
              specified.

       -X, --transport-id=TIDS
              The TIDS 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 de-
              fined in SPC-4. They are usually 24 bytes long apart from in iSCSI. The TIDS  argu-
              ment  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  TIDS  argu-
              ment may be "-" in which case one or more TransportIDs can be read from stdin.  The
              TIDS argument may be of the form "file=<name>" in which case  one  or  more  Trans-
              portIDs  can be read from a file called <name>. See the "TRANSPORT IDs" section be-
              low for more information.

       -U, --unreg
              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.

       -v, --verbose
              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 --hex option.

       -V, --version
              print out version string. Ignore all other parameters.

       -?     output usage message. Ignore all other parameters.

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 de-
       scribed in SPC-4 (in draft revision 37 see section 7.6.4).

       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.

       When  the  --transport-id=TIDS  option  is given then the TIDS argument may be a comma (or
       single space) separated list of ASCII hex bytes that represent a single TransportID as de-
       fined  in SPC-4. Alternatively the TIDS argument may be a transport specific string start-
       ing 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,").

       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.

       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 ar-
       gument 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.

       Alternatively the TIDS argument may specify a file (or pipe) from which one or more Trans-
       portIDs  may  be read. If the TIDS argument is "-" then stdin (standard input) is read. If
       the TIDS 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 ig-
       nored. 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.

       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  CONDI-
       TION status with and ILLEGAL REQUEST sense key and an additional sense code set to INVALID
       FIELD IN PARAMETER LIST.

NOTES
       In the 2.4 series of Linux kernels the DEVICE 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.

       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.

       Most  errors  with  the  PROUT sub-commands (e.g. missing or mismatched --prout-type=TYPE)
       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.

       Some recent disks accept some PRIN and PROUT sub-commands when the media is  stopped.  One
       exception was setting the APTPL flag (with the --param-aptpl 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.

EXAMPLES
       These  examples use Linux device names. For suitable device names in other supported Oper-
       ating Systems see the sg3_utils(8) man page.

       Due to the various option defaults the simplest example executes the 'read keys'  sub-com-
       mand of the PRIN command:

          sg_persist /dev/sdb

       This is the same as the following (long-winded) command:

          sg_persist --in --read-keys --device=/dev/sdb

       To  read  the current reservation either the '--read-reservation' form or the shorter '-r'
       can be used:

          sg_persist -r /dev/sdb

       To register the new reservation key 0x123abc the following could be used:

          sg_persist --out --register --param-sark=123abc /dev/sdb

       Given the above registration succeeds, to reserve the DEVICE (with type 'write exclusive')
       the following could be used:

          sg_persist --out --reserve --param-rk=123abc
                     --prout-type=1 /dev/sdb

       To  release  the  reservation  the  following  can  be given (note that the --param-rk and
       --prout-type arguments must match those of the reservation):

          sg_persist --out --release --param-rk=123abc
                     --prout-type=1 /dev/sdb

       Finally to unregister a reservation key (and not effect other registrations which is  what
       '--clear' would do) the command is a little surprising:

          sg_persist --out --register --param-rk=123abc /dev/sdb

       Now  have  a  close  look  at  the difference between the register and unregister examples
       above.

       An example  file  that  is  suitably  formatted  to  pass  transportIDs  via  a  '--trans-
       port-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.

       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.

EXIT STATUS
       The exit status of sg_persist is 0 when it is successful. Otherwise see  the  sg3_utils(8)
       man page.

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  DEVICE  is  opened  read-only
       (e.g. in Unix that is with the O_RDONLY flag). See the --readonly option.

AUTHOR
       Written by Douglas Gilbert

REPORTING BUGS
       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT
       Copyright (C) 2004-2018 Douglas Gilbert
       This  software  is distributed under the GPL version 2. There is NO warranty; not even for
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
       sg3_utils(sg3_utils), scsires(internet)

sg3_utils-1.43                              June 2018                               SG_PERSIST(8)

Generated by $Id: phpMan.php,v 4.55 2007/09/05 04:42:51 chedong Exp $ Author: Che Dong
On Apache
Under GNU General Public License
2024-12-12 17:07 @3.129.253.214 CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0!Valid CSS!