Go to main content

man pages section 8: System Administration Commands

Exit Print View

Updated: Wednesday, July 27, 2022

sg_format (8)


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


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] [--ver-
ify] [--version] [--wait] DEVICE


SG_FORMAT(8)                       SG3_UTILS                      SG_FORMAT(8)

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

       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] [--ver-
       ify] [--version] [--wait] DEVICE

       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  recom-
       mends.  The manufacturer's recommendation typically leaves aside a cer-
       tain 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  accessi-
       ble  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  opera-

       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  CAPAC-
       ITY  command.   The reason for this double check is to detect a "format
       corrupt" state (see the NOTES section). This usage will not modify  the

       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  informa-

       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  fol-
       lowing)  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 writ-
       ten to the disk. See the FORMAT PRESETS VPD page (0xb8) for a  list  of
       available Format preset identifiers and their associated data.

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

       -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 = 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
                (COUNT > 0) : after resize READ  CAPACITY  will  report  COUNT
                (COUNT = 0) : after resize READ CAPACITY will report 0 blocks
                (COUNT = -1) : after resize READ CAPACITY will report its max-
              imum 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". Certifi-
              cation  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

       -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  initial-
              ized  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 oper-
              ation should return "unspecified logical block  data"  and  com-
              plete 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 com-
              mand 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 sec-
              tion 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. asso-
              ciate 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 depend-
              ing other parameters (e.g.  when  '--pie=PIE'  is  greater  than

       -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
              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 PRO-
              TECTION 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 differ-
              ent 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 informa-
              tion  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 operat-
              ing 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  vari-
              ous 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

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

       -w, --wait
              the default format action is to set the "IMMED" bit in the  FOR-
              MAT  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 FOR-
              MAT 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.

       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 (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 pro-
       tection intervals interleaved in each logical  block.  Each  protection
       interval  follows the user data to which it refers. A protection inter-
       val 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 pro-
       tection 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 Informa-
       tion in section 4.21 of draft SBC-4 revision 16.

       A  device  that supports PI information (i.e. supports one or more pro-
       tection 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  pro-
       tection  types followed by the options of this utility needed to select
         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

       See attributes(7) for descriptions of the following attributes:

       |Availability   | system/storage/sg3_utils |
       |Stability      | Pass-through uncommitted |

       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
           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 com-
       mands 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  tar-
       get  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 for-
       mat 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  opera-
       tion  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 indicat-
       ing 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 CAPAC-
       ITY command will report the existing (i.e. previous) block size. Alter-
       natively the READ CAPACITY command may fail, reporting  the  device  is
       not  ready, potentially requiring a format. The solution to this situa-
       tion 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  opera-
       tion.   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 cor-
       responds 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 corre-
       sponding 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  informa-
       tion  (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  secu-
       rity  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 pro-
       visioned  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.

       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source was downloaded from  http://sg.danny.cz/sg/p/sg3_utils-1.46.tgz.

       Further information about this software can be found on the open source
       community website at http://sg.danny.cz/sg/sg3_utils.html.

       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 fin-
       ished). 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').

       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 com-
       mand 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 pre-
       viously.  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 Pro-
       tect bit in the standard inquiry response):

          # sg_vpd -p ei -l /dev/sdb
          extended INQUIRY data VPD page:
            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 protec-
             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

          # 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

          # 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.

       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.

       Written by Grant Grundler, James Bottomley and Douglas Gilbert.

       Report bugs to <dgilbert at interlog dot com>.

       Copyright (C) 2005-2020 Grant Grundler,  James  Bottomley  and  Douglas
       This  software is distributed under the GPL version 2. There is NO war-
       ranty; not even for MERCHANTABILITY or FITNESS FOR  A  PARTICULAR  PUR-

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

sg3_utils-1.45                   January 2020                     SG_FORMAT(8)