Provided by: sg3-utils_1.46-1build1_amd64 bug

NAME

       sg_format - format, format with preset, resize SCSI disk; format tape

SYNOPSIS

       sg_format  [--cmplst={0|1}]  [--count=COUNT]  [--dcrt] [--dry-run] [--early] [--ffmt=FFMT]
       [--fmtmaxlba-fmtpinfo=FPI] [--format] [--help] [--ip-def] [--long] [--mode=MP] [--pfu=PFU]
       [--pie=PIE]   [--pinfo]   [--poll=PT]   [--preset=ID]   [--quick]  [--resize]  [--rto_req]
       [--security] [--six] [--size=LB_SZ] [--tape=FM]  [--timeout=SECS]  [--verbose]  [--verify]
       [--version] [--wait] DEVICE

DESCRIPTION

       Not  all  SCSI  direct  access  devices need to be formatted and some have vendor specific
       formatting procedures. SCSI disks with rotating media are probably the largest group  that
       do  support a 'standard' format operation. They are typically factory formatted to a block
       size of 512 bytes with the largest number of blocks that the manufacturer recommends.  The
       manufacturer's  recommendation  typically  leaves aside a certain number of tracks, spread
       across the media, for reassignment of blocks to logical block addresses during the life of
       the disk.

       This  utility  issues  one  of  three  SCSI format commands: FORMAT UNIT, FORMAT MEDIUM or
       FORMAT WITH PRESET. In the following description, unqualified  sections  will  usually  be
       referring  to  the SCSI FORMAT UNIT command. Both FORMAT UNIT and FORMAT WITH PRESET apply
       to disks (or disk-like devices).  The FORMAT MEDIUM command is for tapes.

       This utility can format modern SCSI disks and potentially  change  their  block  size  (if
       permitted)  and  the block count (i.e. number of accessible blocks on the media also known
       as "resizing"). Resizing a disk to less than the manufacturer's recommended block count is
       sometimes  called "short stroking" (see NOTES section). Resizing the block count while not
       changing the block size may not require  a  format  operation.  The  SBC-2  standard  (see
       www.t10.org)  has  obsoleted  the "format device" mode page. Many of the low level details
       found in that mode page are now left up to the discretion of the manufacturer. There is  a
       Format Status log page which reports on the previous successful format operation(s).

       When  this  utility  is  used without options (i.e. it is only given a DEVICE argument) it
       prints out the existing block size and block count derived from  two  sources.  These  two
       sources are a block descriptor in the response to a MODE SENSE command and the response to
       a READ CAPACITY command.  The reason for this double check is to detect a "format corrupt"
       state (see the NOTES section). This usage will not modify the disk.

       When  this utility is used with either --format, --preset=ID or --tape=FM, it will attempt
       to format the given DEVICE. In the absence of the --quick option  there  is  a  15  second
       pause  during  which time the user is invited thrice (5 seconds apart) to abort sg_format.
       This occurs just prior the SCSI FORMAT UNIT, FORMAT WITH PRESET or FORMAT  MEDIUM  command
       being issued. See the NOTES section for more information.

       Protection  information  (PI)  is  optional  and  is  made  up  of  one or more protection
       intervals, each made up of 8 bytes associated with a logical block. When PI is active each
       logical  block  will  have  1,  2,  4,  8, etc protection intervals (i.e. a power of two),
       interleaved with (and following) the user data to which they refer. Four protection  types
       are  defined  with  protection  type  0  being no protection intervals. See the PROTECTION
       INFORMATION section below for more information.

       When the --tape=FM option is given then the SCSI FORMAT MEDIUM  command  is  sent  to  the
       DEVICE.  FORMAT  MEDIUM  is  defined in the SSC documents at T10 and prepares a volume for
       use. That may include partitioning the medium. See the section  below  on  TAPE  for  more
       information.

       The FORMAT WITH PRESET was added in draft SBC-4 revision 18. A preset pattern, selected by
       the PRESET IDENTIFIER field (--id=FWPID), is written to the disk. See the  FORMAT  PRESETS
       VPD  page  (0xb8)  for  a list of available Format preset identifiers and their associated
       data.

OPTIONS

       Arguments to long options are mandatory for  short  options  as  well.   The  options  are
       arranged in alphabetical order based on the long option name.

       -C, --cmplst={0|1}
              sets  the  CMPLST  ("complete  list") bit in the FORMAT UNIT cdb to 0 or 1.  If the
              value is 0 then the existing GLIST (grown list) is  taken  into  account.   If  the
              value is 1 then the existing GLIST is ignored. CMPLST defaults to 1 apart from when
              the --ffmt=FFMT option's value is non-zero in which case CMPLST defaults to 0.  See
              the  LISTS  section  below.  In  most  cases this bit should be left at its default
              value.

       -c, --count=COUNT
              where COUNT is the number of blocks to be formatted or media to be resized to.  Can
              be  used  with  either --format or --resize.  With --format this option need not be
              given in which case it is assumed to be zero.
              With --format the interpretation of COUNT is:
                (COUNT > 0) : only format the first COUNT blocks and READ  CAPACITY  will  report
              COUNT blocks after format
                (COUNT = 0) and block size unchanged : use existing block count
                (COUNT  =  0)  and  block  size changed : recommended maximum block count for new
              block size
                (COUNT = -1) : use recommended maximum block count
                (COUNT < -1) : illegal
              With --resize this option must be given and COUNT has this interpretation:
                (COUNT > 0) : after resize READ CAPACITY will report COUNT blocks
                (COUNT = 0) : after resize READ CAPACITY will report 0 blocks
                (COUNT = -1) : after resize READ CAPACITY  will  report  its  maximum  number  of
              blocks
                (COUNT < -1) : illegal
              In  both  cases  if  the  given COUNT exceeds the maximum number of blocks (for the
              block size) then the disk reports an error.  See NOTES section below.

       -D, --dcrt
              this option sets the DCRT bit in the FORMAT UNIT command's parameter  list  header.
              It  will  "disable  certification".  Certification  verifies that blocks are usable
              during the format process. Using this option may speed the format but  --ffmt=FFMT,
              if  available,  would  probably be better. The default action of this utility (i.e.
              when this option is not given) is to clear the DCRT bit thereby  requesting  "media
              certification"  (also unless another option needs it, the FOV bit will be cleared).
              When the DCRT bit is set, the FOV bit must also be set hence sg_format does that.
              If this option is given twice then certification is enabled by  clearing  the  DCRT
              bit  and  setting  the  FOV  bit.  Both  these bits are found in the parameter list
              associated with the FORMAT UNIT cdb.

       -d, --dry-run
              this option will parse the command line, do all  the  preparation  but  bypass  the
              actual  FORMAT  UNIT,  FORMAT  WITH  PRESET  or  FORMAT MEDIUM command. Also if the
              options would otherwise cause the logical block  size  to  change,  then  the  MODE
              SELECT  command  that  would  do  that  is also bypassed when the dry run option is
              given.

       -e, --early
              during a format operation, The default action of this utility is to poll  the  disk
              every  60  seconds  (or  every  10  seconds  if  FFMT is non-zero) to determine the
              progress of the format operation until it is finished. When this  option  is  given
              this  utility  will  exit  "early",  that  is  as  soon as the format operation has
              commenced. Then the user can monitor the progress of the ongoing  format  operation
              with  other  utilities (e.g. sg_turs(8) or sg_requests(8)).  This option and --wait
              are mutually exclusive.

       -t, --ffmt=FFMT
              FFMT (fast format) is placed in a field of the same name in the  FORMAT  UNIT  cdb.
              The field was introduced in SBC-4 revision 10. The default value is 0 which implies
              the former action which is typically to overwrite all blocks on  the  DEVICE.  That
              can  take  a  long time (e.g. with hard disks over 10 TB in size that can be days).
              With FFMT set that time may be reduced to minutes or less. So it is worth trying if
              it is available.
              FFMT  has values 1 and 2 for fast format with 3 being reserved currently. These two
              values include this description: "The device  server  initializes  the  medium  ...
              without  overwriting  the  medium  (i.e.  resources  for managing medium access are
              initialized and the medium is not  written)".   The  difference  between  1  and  2
              concerns  read  operations  on LBAs to which no data has been written to, after the
              fast format. When FFMT is 1 the read operation should return  "unspecified  logical
              block data" and complete without error. When FFMT is 2 the read operation may yield
              check condition status with a sense key set to  hardware  error,  medium  error  or
              command aborted. See draft SBC-4 revision 16 section 4.34 for more details.

       -b, --fmtmaxlba
              This  option is only active if it is given together with the --preset=ID option. If
              so it sets the FMTMAXLBA field in the FORMAT WITH PRESET command.

       -f, --fmtpinfo=FPI
              sets the FMTPINFO field in the FORMAT UNIT cdb to a value between  0  and  3.   The
              default  value  is  0.  The  FMTPINFO field from SBC-3 revision 16 is a 2 bit field
              (bits 7 and 6 of byte 1 in the cdb). Prior to that revision it  was  a  single  bit
              field (bit 7 of byte 1 in the cdb) and there was an accompanying bit called RTO_REQ
              (bit 6 of byte 1 in the cdb). The  deprecated  options  "--pinfo"  and  "--rto-req"
              represent  the  older  usage.  This  option  should be used in their place. See the
              PROTECTION INFORMATION section below for more information.

       -F, --format
              issue one of the three SCSI "format" commands. In the absence  of  the  --preset=ID
              and --tape=FM options, the SCSI FORMAT UNIT command is issued.  These commands will
              destroy all the data held on the media.  This option  is  required  to  change  the
              block  size of a disk. In the absence of the --quick option, the user is given a 15
              second count down to ponder the wisdom of doing this, during which  time  control-C
              (amongst  other  Unix commands) can be used to kill this process before it does any
              damage.
              When used three times (or more) the preliminary MODE SENSE and SELECT commands  are
              bypassed,  leaving  only  the initial INQUIRY and FORMAT UNIT commands. This is for
              emergency use (e.g. when the MODE SENSE/SELECT commands are not working) and cannot
              change the logical block size.
              See NOTES section for implementation details and EXAMPLES section for typical use.

       -h, --help
              print out the usage information then exit.

       -I, --ip-def
              sets  the default Initialization Pattern. Some disks (SSDs) use this to flag that a
              format should fully provision (i.e. associate a physical block with  every  logical
              block).  The same disks (SSDs) might thin provision if this option is not given. If
              this option is given then the --security  option  cannot  be  given.  Also  accepts
              --ip_def for this option.

       -l, --long
              the  default  action  of  this utility is to assume 32 bit logical block addresses.
              With 512 byte block size this permits more than 2 terabytes (almost 2 ** 41  bytes)
              on a single disk. This option selects commands and parameters that allow for 64 bit
              logical block addresses.  Specifically this option sets the "longlba" flag  in  the
              MODE SENSE (10) command and uses READ CAPACITY (16) rather than READ CAPACITY (10).
              If this option is not given and READ CAPACITY (10) or MODE SELECT  detects  a  disk
              the  needs  more  than  32  bits  to  represent  its  logical blocks then it is set
              internally. This option does not set the LONGLIST bit in the FORMAT  UNIT  command.
              The  LONGLIST  bit  is  set  as  required  depending  other  parameters  (e.g. when
              '--pie=PIE' is greater than zero).

       -M, --mode=MP
              MP is a mode page number (0 to 62 inclusive) that will  be  used  for  reading  and
              perhaps  changing  the  device  logical  block  size. The default is 1 which is the
              Read-Write Error Recovery mode page.
              Preferably the chosen (or default) mode page should be saveable (i.e.   accept  the
              SP  bit  set  in  the MODE SELECT command used when the logical block size is being
              changed). Recent version of this utility will retry  a  MODE  SELECT  if  the  SP=1
              variant  fails  with  a sense key of ILLEGAL REQUEST.  That retry will use the same
              MODE SELECT command but with SP=0 .

       -P, --pfu=PFU
              sets the "Protection Field Usage" field in the parameter block  associated  with  a
              FORMAT  UNIT  command  to PFU. The default value is 0, the only other defined value
              currently is 1. See the PROTECTION INFORMATION section below for more information.

       -q, --pie=PIE
              sets the "Protection Interval Exponent" field in  the  parameter  block  associated
              with  a  FORMAT  UNIT  command  to  PIE.  The  default value is 0.  PIE can only be
              non-zero with protection types 2 and 3.  The value of 0 is  typical  for  512  byte
              blocks;  with  4096  byte blocks a value of 3 may be appropriate (i.e. 8 protection
              intervals interleaved with 4096 bytes of user data). A device may not  support  any
              non-zero values. This field first appeared in SBC-3 revision 18.

       -p, --pinfo
              this option is deprecated, use the --fmtpinfo=FPI option instead.  If used, then it
              sets bit 7 of byte 1 in the FORMAT UNIT cdb  and  that  is  equivalent  to  setting
              --fmtpinfo=2.  [So  if  --pinfo  is used (plus --fmtpinfo=FPI and --pfu=PFU are not
              given or their arguments are 0) then protection type 1 is selected.]

       -x, --poll=PT
              where PT is the type of poll used. If PT is 0 then a TEST  UNIT  READY  command  is
              used,  otherwise  a  REQUEST  SENSE command is used. The default is currently 0 but
              this will change to 1 in the near future. See the NOTES sections below.

       -E, --preset=ID
              this option instructs this utility to issue a SCSI FORMAT WITH PRESET command.  The
              PRESET  IDENTIFIER  field  in that cdb is set to ID. The IMMED field in that cdb is
              also set unless the --wait option is also given, in which case it is cleared.

       -Q, --quick
              the default action (i.e. when the option is not given)  is  to  give  the  user  15
              seconds  to reconsider doing a format operation on the DEVICE.  When this option is
              given that step (i.e. the 15 second warning period) is skipped.

       -r, --resize
              rather than format the disk, it can be resized. This means changing the  number  of
              blocks  on the device reported by the READ CAPACITY command.  This option should be
              used with the --count=COUNT option.  The contents of  all  logical  blocks  on  the
              media  remain  unchanged  when  this  option  is  used.  This means that any resize
              operation can be reversed. This option cannot be used together with either --format
              or a --size=LB_SZ whose argument is different to the existing block size.

       -R, --rto_req
              The  option is deprecated, use the --fmtpinfo=FPI option instead.  If used, then it
              sets bit 6 of byte 1 in the FORMAT UNIT cdb.

       -S, --security
              sets  the  "Security  Initialization"  (SI)  bit  in  the  FORMAT  UNIT   command's
              initialization pattern descriptor within the parameter list. According to SBC-3 the
              default initialization pattern "shall be written using  a  security  erasure  write
              technique".  See  the NOTES section on the SCSI SANITIZE command. If this option is
              given then the --ip_def option cannot be given.

       -6, --six
              Use 6 byte variants of MODE SENSE and MODE SELECT. The default action is to use the
              10 byte variants. Some MO drives need this option set when doing a format.

       -s, --size=LB_SZ
              where  LB_SZ is the logical block size (i.e. number of user bytes in each block) to
              format the device to. The default value is whatever is currently  reported  by  the
              block descriptor in a MODE SENSE command. If the block size given by this option is
              different from the current value then a MODE SELECT command is used  to  change  it
              prior  to  the  FORMAT  UNIT  command  being  started  (as  recommended  in the SBC
              standards). Some SCSI disks have 512 byte logical blocks by default  and  allow  an
              alternate  logical  block  size of 4096 bytes. If the given size in unacceptable to
              the disk, most likely an "Invalid field in parameter list" message will  appear  in
              sense data (requires the use of '-v' to decode sense data).
              Note that formatting a disk to add or remove protection information is not regarded
              as a change to its logical block size so this option should not be used.

       -T, --tape=FM
              will send a FORMAT MEDIUM command to the DEVICE with its FORMAT field  set  to  FM.
              This  option is used to prepare a tape (i.e. the "medium") in a tape drive for use.
              Values for FM include 0 to do the "default" format; 1 to partition a volume  and  2
              to do a default format then partition.

       -m, --timeout=SECS
              where  SECS is the FORMAT UNIT, FORMAT WITH PRESET or FORMAT MEDIUM command timeout
              in seconds. SECS will only be used if it exceeds the internal timeout which  is  20
              seconds if the IMMED bit is set and 72000 seconds (20 hours) or higher if the IMMED
              bit is not set. If the disk size exceeds 4 TB then the timeout value  is  increased
              to  144000  seconds  (40  hours).   And if it is greater than 8 TB then the timeout
              value is increased to 288000 seconds (80 hours). If the timeout  is  exceeded  then
              the  operating  system  will  typically  abort  the command. Aborting a command may
              escalate to a LUN reset (or worse). A timeout may  also  leave  the  disk  or  tape
              format  operation  incomplete.  And  that may result in the disk or tape being in a
              "format corrupt" state requiring another format to remedy the  situation.   So  for
              various reasons command timeouts are best avoided.

       -v, --verbose
              increase the level of verbosity, (i.e. debug output). "-vvv" gives a lot more debug
              output.

       -y, --verify
              set the VERIFY bit in the FORMAT MEDIUM cdb. The default is that the VERIFY bit  is
              clear. This option is only appropriate for tapes.

       -V, --version
              print the version string and then exit.

       -w, --wait
              the  default  format  action is to set the "IMMED" bit in the FORMAT UNIT command's
              (short) parameter header. If this option (i.e. --wait) is given  then  the  "IMMED"
              bit  is  not  set.  If  --wait is given then the FORMAT UNIT, FORMAT WITH PRESET or
              FORMAT MEDIUM command waits until the format operation completes  before  returning
              its response. This can be many hours on large disks. See the --timeout=SECS option.
              Alternatively  this  option  may be useful when used together with --ffmt=FFMT (and
              FFMT greater than 0) since the fast format may only be a matter of seconds.

LISTS

       The SBC-3 draft (revision 20) defines PLIST, CLIST, DLIST and GLIST  in  section  4.10  on
       "Medium  defects".  Briefly,  the  PLIST  is  the  "primary" list of manufacturer detected
       defects, the CLIST ("certification"  list)  contains  those  detected  during  the  format
       operation,  the  DLIST is a list of defects that can be given to the format operation. The
       GLIST is the grown list which starts in the format process as CLIST+DLIST and  can  "grow"
       later  due  to  automatic reallocation (see the ARRE and AWRE bits in the Read-Write Error
       Recovery mode page (see sdparm(8))) and use of  the  SCSI  REASSIGN  BLOCKS  command  (see
       sg_reassign(8)).

       By  the SBC-3 standard (following draft revision 36) the CLIST and DLIST had been removed,
       leaving PLIST and GLIST. Only PLIST and GLIST are found in the SBC-4 drafts.

       The CMPLST bit (controlled by the --cmplst=0|1 option)  determines  whether  the  existing
       GLIST,  when the format operation is invoked, is taken into account. The sg_format utility
       sets the FOV bit to zero which causes DPRY=0, so the PLIST  is  taken  into  account,  and
       DCRT=0, so the CLIST is generated and used during the format process.

       The sg_format utility does not permit a user to provide a defect list (i.e. DLIST).

PROTECTION INFORMATION

       Protection  Information (PI) is additional information held with logical blocks so that an
       application and/or host bus adapter can check the correctness of those logical blocks.  PI
       is  placed  in  one  or  more protection intervals interleaved in each logical block. Each
       protection interval follows the user data  to  which  it  refers.  A  protection  interval
       contains  8 bytes made up of a 2 byte "logical block guard" (CRC), a 2 byte "logical block
       application guard", and a 4 byte "logical block reference  tag".  Devices  with  512  byte
       logical  block  size  typically  have one protection interval appended, making its logical
       block data 520 bytes long. Devices  with  4096  byte  logical  block  size  often  have  8
       protection  intervals spread across its logical block data for a total size of 4160 bytes.
       Note that for all other purposes the logical block size is considered to be 512  and  4096
       bytes respectively.

       The SBC-3 standard have added several "protection types" to the PI introduced in the SBC-2
       standard. SBC-3 defines 4 protection types (types 0 to 3) with protection type  0  meaning
       no  PI is maintained. While a device may support one or more protection types, it can only
       be formatted with 1  of  the  4.  To  change  a  device's  protection  type,  it  must  be
       re-formatted.   For  more  information  see  the Protection Information in section 4.21 of
       draft SBC-4 revision 16.

       A device that supports PI information (i.e. supports one or more protection types 1, 2 and
       3)  sets the "PROTECT" bit in its standard INQUIRY response. It also sets the SPT field in
       the EXTENDED INQUIRY VPD page response to indicate which  protection  types  it  supports.
       Given  PROTECT=1  then SPT=0 implies the device supports PI type 1 only, SPT=1 implies the
       device supports PI types 1 and 2, and various other non-obvious mappings up to SPT=7 which
       implies  protection  types 1, 2 and 3 are supported. The current protection type of a disk
       can be found in the "P_TYPE" and "PROT_EN" fields in the response of a READ CAPACITY  (16)
       command (e.g. with the 'sg_readcap --long' utility).

       Given  that  a  device  supports  a  particular protection type, a user can then choose to
       format that disk with that protection type by setting the "FMTPINFO" and "Protection Field
       Usage"  fields  in  the FORMAT UNIT command. Those fields correspond to the --fmtpinfo=FPI
       and the --pfu=PFU options in this utility. The list below shows the four protection  types
       followed by the options of this utility needed to select them:
         0 : --fmtpinfo=0 --pfu=0
         1 : --fmtpinfo=2 --pfu=0
         2 : --fmtpinfo=3 --pfu=0
         3 : --fmtpinfo=3 --pfu=1
       The  default  value  of  FPI  (in  --fmtpinfo=FPI)  is  0 and the default value of PFU (in
       --pfu=PFU) is 0. So if neither --fmtpinfo=FPI nor --pfu=PFU are given then protection type
       0 (i.e. no protection information) is chosen.

NOTES

       After  a  format  that changes the logical block size or the number of logical blocks on a
       disk, the operating system may need to be told to re-initialize its setting for that disk.
       In Linux that can be done with:
           echo 1 > /sys/block/sd{letter(s)}/device/rescan
       where  "letter(s)"  will be between 'a' and 'zzz'. The lsscsi utility in Linux can be used
       to check the various namings of a disk.

       The SBC-2 standard states that the REQUEST SENSE command  should  be  used  for  obtaining
       progress indication when the format command is underway.  However, tests on a selection of
       disks shows that TEST UNIT READY commands yield  progress  indications  (but  not  REQUEST
       SENSE  commands). So the current version of this utility defaults to using TEST UNIT READY
       commands to poll the disk to find out the progress of the format. The --poll=PT option has
       been added to control this.

       When the --format, --preset=ID or --tape=FM option is given without the --wait option then
       the corresponding SCSI command is issued with the IMMED bit  set  which  causes  the  SCSI
       command to return after it has started the format operation. The --early option will cause
       sg_format to exit at that point. Otherwise the DEVICE is polled every 60 seconds or  every
       10 seconds if FFMT is non-zero. The poll is with TEST UNIT READY or REQUEST SENSE commands
       until one reports an "all clear" (i.e. the format operation has completed). Normally these
       polling  commands  will  result  in a progress indicator (expressed as a percentage) being
       output to the screen. If the user gets bored watching the progress report  then  sg_format
       process  can  be  terminated  (e.g. with control-C) without affecting the format operation
       which continues. However a target or device reset (or a power cycle) will  probably  cause
       the format to cease and the DEVICE to become "format corrupt".

       When  the  --format  (--preset=ID  or  --tape) and --wait options are both given then this
       utility may take a long time to return. In this case care should be taken not to send  any
       other SCSI commands to the disk as it may not respond leaving those commands queued behind
       the active format command. This may cause a timeout in the OS driver  (in  a  lot  shorter
       period  than  20  hours  applicable  to some format operations). This may result in the OS
       resetting the disk leaving the format operation incomplete. This may leave the disk  in  a
       "format  corrupt"  state  requiring  another  format  to remedy the situation. Modern SCSI
       devices should yield a "not ready" sense key with an additional sense indicating a  format
       is  in progress. With older devices the user should take precautions that nothing attempts
       to access a device while it is being formatted. Unmounting in mounted file  systems  on  a
       DEVICE prior to calling this utility is strongly advised.

       When the block size (i.e. the number of bytes in each block) is changed on a disk two SCSI
       commands must be sent: a MODE SELECT to  change  the  block  size  followed  by  a  FORMAT
       command.  If the MODE SELECT command succeeds and the FORMAT fails then the disk may be in
       a state that the standard calls "format corrupt". A block descriptor in a subsequent  MODE
       SENSE  will  report the requested new block size while a READ CAPACITY command will report
       the existing (i.e. previous) block size. Alternatively the READ CAPACITY command may fail,
       reporting  the  device  is not ready, potentially requiring a format. The solution to this
       situation is to do a format again (and this time the new block size does not  have  to  be
       given) or change the block size back to the original size.

       The  SBC-2  standard  states  that  the  block count can be set back to the manufacturer's
       maximum recommended value in a format or resize operation.  This can be done by placing an
       address of 0xffffffff (or the 64 bit equivalent) in the appropriate block descriptor field
       to a MODE SELECT command. In signed (two's complement) arithmetic that  value  corresponds
       to  '-1'.  So  a  --count=-1  causes  the block count to be set back to the manufacturer's
       maximum recommended value. To see exactly which  SCSI  commands  are  being  executed  and
       parameters passed add the "-vvv" option to the sg_format command line.

       The  FMTDATA  field  shown  in the FORMAT UNIT cdb does not have a corresponding option in
       this utility. When set in the cdb it indicates an additional parameter list will  be  sent
       to  the  DEVICE along with the cdb. It is set as required, basically when any field in the
       parameter list header is set.

       Short stroking is a technique to trade off capacity for performance on hard disks.  "Hard"
       disk  is often used to mean a storage device with spinning platters which contain the user
       data. Solid State Disk (SSD) is the newer form of storage device that contains  no  moving
       parts.  Hard  disk  performance  is usually highest on the outer tracks (usually the lower
       logical block addresses) so by resizing or reformatting a  disk  to  a  smaller  capacity,
       average performance will usually be increased.

       Other  utilities  may  be  useful in finding information associated with formatting. These
       include sg_inq(8) to fetch standard INQUIRY information (e.g.  the  PROTECT  bit)  and  to
       fetch the EXTENDED INQUIRY VPD page (e.g. RTO and GRD_CHK bits). The sdparm(8) utility can
       be used to access and potentially change the now obsolete format mode page.

       scsiformat is another utility available for formatting SCSI disks  with  Linux.  It  dates
       from  1997  (most  recent  update)  and  may be useful for disks whose firmware is of that
       vintage.

       The COUNT numeric argument may include a multiplicative suffix or be given in hexadecimal.
       See the "NUMERIC ARGUMENTS" section in the sg3_utils(8) man page.

       The  SCSI  SANITIZE  command was introduced in SBC-3 revision 27. It is closely related to
       the ATA sanitize disk feature set and can be used to remove all existing data from a disk.
       Sanitize  is  more  likely  to be implemented on modern disks (including SSDs) than FORMAT
       UNIT's security initialization feature (see the --security option) and in some cases  much
       faster.

       SSDs  that  support  thin  provisioning  will  typically unmap all logical blocks during a
       format. The reason is to improve  the  SSD's  endurance.  Also  thin  provisioned  formats
       typically  complete  faster than fully provisioned ones on the same disk (see the --ip_def
       option). In either case format operations on SSDs tend to be a lot faster than they are on
       hard disks with spinning media.

TAPE

       Tape  system  use a variant of the FORMAT UNIT command used on disks. Tape systems use the
       FORMAT MEDIUM command which is simpler with only three fields in the cdb  typically  used.
       Apart  from  sharing  the  same opcode the cdbs of FORMAT UNIT and FORMAT MEDIUM are quite
       different. FORMAT MEDIUM's fields are VERIFY,  IMMED  and  FORMAT  (with  TRANSFER  LENGTH
       always  set to 0).  The VERIFY bit field is set with the --verify option. The IMMED bit is
       manipulated by the --wait option in the same way it is for disks; one difference  is  that
       if  the  --poll=PT option is not given then it defaults to PT of 1 which means the poll is
       done with REQUEST SENSE commands.

       The argument given to the --tape=FM option is used to set the FORMAT field.  FM  can  take
       values  from "-1" to "15" where "-1" (the default) means don't do a tape format; value "8"
       to "15" are for vendor specific formats. The --early option may also be used  to  set  the
       IMMED bit and then exit this utility (rather than poll periodically until it is finished).
       In this case the tape drive will still be  busy  doing  the  format  for  some  time  but,
       according  to  T10,  should still respond in full to the INQUIRY and REPORT LUNS commands.
       Other commands (including REQUEST SENSE) should yield a "not  ready"  sense  key  with  an
       additional  sense  code  of  "Logical  unit  not  ready, format in progress". Additionally
       REQUEST SENSE should contain a progress indication in its sense data.

       When FM is 1 or 2 then the  settings  in  the  Medium  partition  mode  page  control  the
       partitioning. That mode page can be viewed and modified with the sdparm utility.

       Prior  to  invoking  this  utility  the tape may need to be positioned to the beginning of
       partition 0. In Linux that can typically be done with the mt utility (e.g. 'mt -f /dev/st0
       rewind').

EXAMPLES

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

       In the first example below simply find out the existing block count and size derived  from
       two sources: a block descriptor in a MODE SELECT command response and from the response of
       a READ CAPACITY commands. No changes are made:

          # sg_format /dev/sdm

       Now a simple format, leaving the block count and size as they were previously.  The FORMAT
       UNIT  command is executed in IMMED mode and the device is polled every 60 seconds to print
       out a progress indication:

          # sg_format --format /dev/sdm

       Now the same format, but waiting (passively) until the format operation is complete:

          # sg_format --format --wait /dev/sdm

       Next is a format in which the block size is changed to 520 bytes and the  block  count  is
       set to the manufacturer's maximum value (for that block size). Note, not all disks support
       changing the block size:

          # sg_format --format --size=520 /dev/sdm

       Now a resize operation so that only the  first  0x10000  (65536)  blocks  on  a  disk  are
       accessible. The remaining blocks remain unaltered.

          # sg_format --resize --count=0x10000 /dev/sdm

       Now resize the disk back to its normal (maximum) block count:

          # sg_format --resize --count=-1 /dev/sdm

       One  reason  to  format  a  SCSI  disk is to add protection information. First check which
       protection types are supported by a disk (by  checking  the  SPT  field  in  the  Extended
       inquiry VPD page together with the Protect bit in the standard inquiry response):

          # sg_vpd -p ei -l /dev/sdb
          extended INQUIRY data VPD page:
            ACTIVATE_MICROCODE=0
            SPT=1 [protection types 1 and 2 supported]
            ....

       Format with type 1 protection:

          # sg_format --format --fmtpinfo=2 /dev/sdm

       After  a successful format with type 1 protection, READ CAPACITY(16) should show something
       like this:

          # sg_readcap -l /dev/sdm
          Read Capacity results:
             Protection: prot_en=1, p_type=0, p_i_exponent=0 [type 1 protection]
             Logical block provisioning: lbpme=0, lbprz=0
             ....

       To format with type 3 protection:

          # sg_format --format --fmtpinfo=3 --pfu=1 /dev/sdm

       For the disk shown above this will probably fail because the  Extended  inquiry  VPD  page
       showed only types 1 and 2 protection are supported.

       Here  are  examples of using fast format (FFMT field in FORMAT UNIT cdb) to quickly switch
       between 512 and 4096 byte logical block size. Assume disk starts with  4096  byte  logical
       block size and all important data has been backed up.

          # sg_format --format --ffmt=1 --size=512 /dev/sdd

       Now /dev/sdd should have 512 byte logical block size. And to switch it back:

          # sg_format --format --ffmt=1 --size=4096 /dev/sdd

       Since  fast formats can be very quick (a matter of seconds) using the --wait option may be
       appropriate.

       And to use the Format with preset command this invocation could be used:

          # sg_format --preset=1 --fmtmaxlba /dev/sdd

       The FORMAT PRESETS VPD page (0xb8) should be consulted to check that Preset identifier 0x1
       is  there  and  has the expected format (i.e. "default host aware zoned block device model
       with 512 bytes of user data in each logical block").  That VPD page can be viewed with the
       sg_vpd utility.

EXIT STATUS

       The  exit  status  of sg_format is 0 when it is successful. Otherwise see the sg3_utils(8)
       man page. Unless the --wait option is given, the exit status may not reflect  the  success
       of otherwise of the format.  Using sg_turs(8) and sg_readcap(8) after the format operation
       may be wise.

       The Unix convention is that "no news is good news" but that can be a bit  unnerving  after
       an  operation  like  format,  especially  if  it  finishes  quickly (i.e. before the first
       progress poll is sent). Giving the --verbose option once should supply  enough  additional
       output to settle those nerves.

AUTHORS

       Written by Grant Grundler, James Bottomley and Douglas Gilbert.

REPORTING BUGS

       Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT

       Copyright © 2005-2020 Grant Grundler, James Bottomley and 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

       sg_turs(8),   sg_requests(8),   sg_inq(8),   sg_modes(8),    sg_vpd(8),    sg_reassign(8),
       sg_readcap(8),  sg3_utils(8),  sg_sanitize(8)  [all  in  sg3_utils], lsscsi(8), mt(mt-st),
       sdparm(8), scsiformat (old), hdparm(8)