man pages section 1M: System Administration Commands

Exit Print View

Updated: July 2014

sg_format (1m)


sg_format - format or resize a SCSI disk (perhaps change its block size)


sg_format [--cmplst=0|1] [--count=COUNT] [--dcrt]  [--early]
[--fmtpinfo=FPI]  [--format]  [--help]  [--long] [--pfu=PFU]
[--pie=PIE]  [--pinfo]  [--poll=PT]  [--resize]  [--rto_req]
[--security]  [--six]  [--size=SIZE] [--verbose] [--version]
[--wait] DEVICE


SG3_UTILS                                            SG_FORMAT(8)

     sg_format - format or resize a SCSI disk (perhaps change its
     block size)

     sg_format [--cmplst=0|1] [--count=COUNT] [--dcrt]  [--early]
     [--fmtpinfo=FPI]  [--format]  [--help]  [--long] [--pfu=PFU]
     [--pie=PIE]  [--pinfo]  [--poll=PT]  [--resize]  [--rto_req]
     [--security]  [--six]  [--size=SIZE] [--verbose] [--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 recommends.
     The manufacturer's recommendation typically leaves  aside  a
     certain number of tracks, spread across the media, for reas-
     signment of blocks to logical  block  addresses  during  the
     life of the disk.

     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 has obsoleted the "for-
     mat  device"  mode page. Many of the low level details found
     in that mode page are now left up to the discretion  of  the

     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 cor-
     rupt"  state (see NOTES section). This usage will not modify
     the disk.

     When this utility is used  with  the  "--format"  (or  "-F")
     option  it will attempt to format the given DEVICE. There is
     a 10 second pause during which  time  the  user  is  invited
     twice (5 seconds apart) to abort sg_format. This occurs just
     prior the SCSI FORMAT UNIT command  being  issued.  See  the
     NOTES section for more information.

sg3_utils-1.33      Last change: January 2012                   1

SG3_UTILS                                            SG_FORMAT(8)

     Protection information is optional and is made up of 8 addi-
     tional bytes associated with each logical block.  Four  pro-
     tection  types  are  defined with protection type 0 being no
     additional protection bytes. See the PROTECTION  TYPES  sec-
     tion below for more information.

     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.  The default is 1 in which case the
          existing  GLIST  (grown list) is ignored.  If the value
          is 0 then the existing GLIST is taken into account. See
          the  LISTS section below. In most cases this bit should
          be left set; some MO disk drives need this bit cleared.

     -c, --count=COUNT
          where  COUNT is the number of blocks to be formatted or
          media to be resized to. Can be used with either  --for-
          mat 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
                          CAPACITY will report COUNT blocks after
            (COUNT  =  0) and block size unchanged : use existing
          block count
            (COUNT = 0) and block size changed : recommended max-
          imum 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 = 0) : after resize READ CAPACITY will  report
          0 blocks
            (COUNT = -1) : after resize READ CAPACITY will report
                           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.

sg3_utils-1.33      Last change: January 2012                   2

SG3_UTILS                                            SG_FORMAT(8)

     -D, --dcrt
          this option sets the DCRT bit in the FORMAT  UNIT  com-
          mand's parameter list header. It will "disable certifi-
          cation". Certification verifies that blocks are  usable
          during  the format process. Using this option may speed
          the format.  The default action of this  utility  (i.e.
          when this option is not given) is to clear the DCRT bit
          thereby requesting "media certification". When the DCRT
          bit  is set, the FOV bit must also be set hence sg_for-
          mat does that.

     -e, --early
          during a format operation, The default action  of  this
          utility  is to poll the disk every 60 seconds to deter-
          mine 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.

     -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 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 TYPES
          section below for more information.

     -F, --format
          issue  a  SCSI  FORMAT UNIT command.  This will destroy
          all the data This option  is  required  to  change  the
          block  size  of  a  disk. The user is given a 10 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.
          See  NOTES section for implementation details and EXAM-
          PLES section for typical use.

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

     -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

sg3_utils-1.33      Last change: January 2012                   3

SG3_UTILS                                            SG_FORMAT(8)

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

     -P, --pfu=PFU
          sets the "Protection Field Usage" field in the  parame-
          ter 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 TYPES 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.   This  field  first
          appeared in SBC-3 revision 18.

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

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

     -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 con-
          tents  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=SIZE
          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.

sg3_utils-1.33      Last change: January 2012                   4

SG3_UTILS                                            SG_FORMAT(8)

     -S, --security
          sets the "Security Initialization" (SI) bit in the FOR-
          MAT  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 sec-
          tion on the SCSI SANITIZE command.

     -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=SIZE
          where  SIZE  is the block size (i.e. number of bytes in
          each block) to format the device to. The default  value
          is whatever is currently reported by the block descrip-
          tor 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 draft standard). Many SCSI disks have 512 byte sec-
          tors  by  default  and  allow up to 16 bytes extra in a
          sector (i.e. 528 byte sectors).  If the given  size  in
          unacceptable  with  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).

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

     -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 the FORMAT UNIT command
          waits  until  the  format  operation  completes  before
          returning its response. This can be many hours on large
          disks. This utility sets a 15 hour timeout  on  such  a
          FORMAT UNIT command!

     The  SBC-3  draft  (revision 29) defines PLIST, CLIST, DLIST
     and GLIST in section 4.13 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

sg3_utils-1.33      Last change: January 2012                   5

SG3_UTILS                                            SG_FORMAT(8)

     is  the  grown  list  which  starts in the format process as
     CLIST+DLIST and can "grow" later due to automatic  realloca-
     tion  (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)).

     The  CMPLST  bit  (controlled  by  the  --cmplst=0|1 option)
     determines whether the existing GLIST, when the format oper-
     ation is invoked, is taken into account. The sg_format util-
     ity 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).

     SBC-3  drafts  have  added several "protection types" to the
     "protection information" introduced in the  SBC-2  standard.
     See  the  "protection  information" section (section 4.21 in
     draft SBC-3 rev 29). 8 bytes of protection  information  are
     added  to each logical block (a 2 byte "logical block guard"
     (CRC), a 2 byte "logical block application guard", and  a  4
     byte "logical block reference tag"). SBC-3 defines 4 protec-
     tion types (types 0 to 4) with protection type 0 meaning  no
     protection information is maintained.

     A device that supports protection information (i.e. supports
     one or more protection types of 1 or higher) sets the  "PRO-
     TECT" bit in its standard INQUIRY response. It also sets the
     SPT field in the EXTENDED INQUIRY VPD page response to indi-
     cate which protection types it supports. The current protec-
     tion 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 then choose to format that disk with that pro-
     tection type by setting the "FMTPINFO" and "Protection Field
     Usage"  fields in the FORMAT UNIT command. Those fields cor-
     respond to the --fmtpinfo=FPI and the --pfu=PFU  options  in
     this  utility. If FPI and PFU are both 0 (their default val-
     ues) then protection type 0 is chosen. If FPI is 2  and  PFU
     is  0  then protection type 1 is chosen. If FPI is 3 and PFU
     is 0 then protection type 2 is chosen. If FPI is 3  and  PFU
     is 1 then protection type 3 is chosen.

     See   attributes(5)   for   descriptions  of  the  following

sg3_utils-1.33      Last change: January 2012                   6

SG3_UTILS                                            SG_FORMAT(8)

     |Availability   | system/storage/sg3_utils |
     |Stability      | Uncommitted              |
     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 option is given without the --wait  option
     then  the  SCSI FORMAT UNIT 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  with  TEST UNIT READY or REQUEST
     SENSE commands until it reports an  "all  clear"  (i.e.  the
     format operation has completed). Normally these polling com-
     mands 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
     device to become "format corrupt".

     When the --format 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 15 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.

     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 com-
     mand. If the MODE SELECT command  succeeds  and  the  FORMAT
     fails  then  the disk may be in a state that the draft stan-
     dard calls "format corrupt". A block descriptor in a  subse-
     quent  MODE  SENSE  will report the requested new block size
     while a READ CAPACITY command will report the existing (i.e.

sg3_utils-1.33      Last change: January 2012                   7

SG3_UTILS                                            SG_FORMAT(8)

     different)  block size. Alternatively the READ CAPACITY com-
     mand may fail, reporting the device  is  not  ready,  poten-
     tially 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 corre-
     sponds 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.

     Short stroking is a technique to trade off capacity for per-
     formance. Rotating disk performance is  usually  highest  on
     the  outer tracks (i.e. lower logical block addresses) so by
     resizing or reformatting a disk to a smaller capacity, aver-
     age performance will usually be increased.

     Other utilities may be useful in finding information associ-
     ated with formatting. These include sg_inq(8) to fetch stan-
     dard 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  vin-

     The COUNT numeric argument may include a multiplicative suf-
     fix 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

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

sg3_utils-1.33      Last change: January 2012                   8

SG3_UTILS                                            SG_FORMAT(8)

     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 for-
     mat 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 maxi-
     mum 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

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

     Format with type 1 protection:

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

     Format with type 3 protection:

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

     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_read-
     cap(8) after the format operation may be wise.

sg3_utils-1.33      Last change: January 2012                   9

SG3_UTILS                                            SG_FORMAT(8)

     Written by  Grant  Grundler,  James  Bottomley  and  Douglas

     Report bugs to <dgilbert at interlog dot com>.

     Copyright  (C) 2005-2012 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

     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],  sdparm(8),  scsiformat
     (old), hdparm(8)

     This   software   was   built   from   source  available  at   The   original
     community       source       was       downloaded       from

     Further information about this software can be found on  the
     open        source        community        website        at

sg3_utils-1.33      Last change: January 2012                  10