.TH SG_FORMAT "8" "February 2016" "sg3_utils\-1.42" SG3_UTILS
.SH NAME
sg_format \- format, resize a SCSI disk or format a tape
.SH SYNOPSIS
.B sg_format
[\fI\-\-cmplst=\fR{0|1}] [\fI\-\-count=COUNT\fR] [\fI\-\-dcrt\fR]
[\fI\-\-early\fR] [\fI\-\-ffmy=FFMT\fR] [\fI\-\-fmtpinfo=FPI\fR]
[\fI\-\-format\fR] [\fI\-\-help\fR] [\fI\-\-ip_def\fR] [\fI\-\-long\fR]
[\fI\-\-mode=MP\fR] [\fI\-\-pfu=PFU\fR] [\fI\-\-pie=PIE\fR] [\fI\-\-pinfo\fR]
[\fI\-\-poll=PT\fR] [\fI\-\-resize\fR] [\fI\-\-rto_req\fR]
[\fI\-\-security\fR] [\fI\-\-six\fR] [\fI\-\-size=SIZE\fR] [\fI\-\-tape=FM\fR]
[\fI\-\-verbose\fR] [\fI\-\-verify\fR] [\fI\-\-version\fR] [\fI\-\-wait\fR]
\fIDEVICE\fR
.SH DESCRIPTION
.\" Add any additional description here
.PP
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.
.PP
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.
.PP
When this utility is used without options (i.e. it is only given a
\fIDEVICE\fR 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.
.PP
When this utility is used with the "\-\-format" (or "\-F") option it will
attempt to format the given DEVICE. 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 command being issued. See the NOTES
section for more information.
.PP
Protection information is optional and is made up of one or more protection
intervals, each made up of 8 bytes associated with each logical block. Four
protection types are defined with protection type 0 being no protection
intervals. See the PROTECTION INFORMATION section below for more information.
.PP
When the \fI\-\-tape=FM\fR option is given then the SCSI FORMAT MEDIUM
command is sent to the \fIDEVICE\fR. FORMAT MEDIUM is defined in SSC and
prepares a volume for use which may include partitioning the medium. See
the section below on TAPE for more information.
.SH 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.
.TP
\fB\-C\fR, \fB\-\-cmplst\fR={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.
.TP
\fB\-c\fR, \fB\-\-count\fR=\fICOUNT\fR
where \fICOUNT\fR is the number of blocks to be formatted or media to be
resized to. Can be used with either \fI\-\-format\fR or \fI\-\-resize\fR.
With \fI\-\-format\fR this option need not be given in which case it is
assumed to be zero. With \fI\-\-format\fR the interpretation of \fICOUNT\fR
is:
.br
  (\fICOUNT\fR > 0) : only format the first \fICOUNT\fR blocks and READ
.br
                CAPACITY will report \fICOUNT\fR blocks after format
.br
  (\fICOUNT\fR = 0) and block size unchanged : use existing block count
.br
  (\fICOUNT\fR = 0) and block size changed : recommended maximum block
.br
                                       count for new block size
.br
  (\fICOUNT\fR = \-1) : use recommended maximum block count
.br
  (\fICOUNT\fR < \-1) : illegal
.br
With \fI\-\-resize\fR this option must be given and \fICOUNT\fR has this
interpretation:
.br
  (\fICOUNT\fR > 0) : after resize READ CAPACITY will report \fICOUNT\fR
.br
                blocks
.br
  (\fICOUNT\fR = 0) : after resize READ CAPACITY will report 0 blocks
.br
  (\fICOUNT\fR = \-1) : after resize READ CAPACITY will report its
.br
                 maximum number of blocks
.br
  (\fICOUNT\fR < \-1) : illegal
.br
In both cases if the given \fICOUNT\fR exceeds the maximum number of
blocks (for the block size) then the disk reports an error.
See NOTES section below.
.TP
\fB\-D\fR, \fB\-\-dcrt\fR
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.
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_format does that.
.TP
\fB\-e\fR, \fB\-\-early\fR
during a format operation, The default action of this utility is to poll the
disk every 60 seconds 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 \fI\-\-wait\fR
are mutually exclusive.
.TP
\fB\-t\fR, \fB\-\-ffmt\fR=\fIFFMT\fR
\fIFFMT\fR 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 to typically write to all blocks on the
\fIDEVICE\fR and that can take a long time.
.br
\fIFFMT\fR has values 1 and 2 for fast format with 3 being reserved
currently. The difference between 1 and 2 concerns read operations on LBAs to
which no data has been written to, since the fast format. When \fIFFMT\fR
is 1 the read operation should return "unspecified logical block data" and
complete without error. When \fIFFMT\fR is 2 the read operation should
yield check condition status with a sense key set to hardware error, medium
error or command aborted. See SBC\-4 revsion 10 section 4.35 for more
details.
.TP
\fB\-f\fR, \fB\-\-fmtpinfo\fR=\fIFPI\fR
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 INFORMATION section
below for more information.
.TP
\fB\-F\fR, \fB\-\-format\fR
issue a SCSI FORMAT UNIT command.
.B This will destroy all the data held on the media.
This option is required to change the block size of a disk. 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.
.br
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.
.br
See NOTES section for implementation details and EXAMPLES section for typical
use.
.TP
\fB\-h\fR, \fB\-\-help\fR
print out the usage information then exit.
.TP
\fB\-I\fR, \fB\-\-ip_def\fR
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 \fI\-\-security\fR
option cannot be given.
.TP
\fB\-l\fR, \fB\-\-long\fR
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).
.TP
\fB\-M\fR, \fB\-\-mode\fR=\fIMP\fR
\fIMP\fR 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.
.TP
\fB\-P\fR, \fB\-\-pfu\fR=\fIPFU\fR
sets the "Protection Field Usage" field in the parameter block associated
with a FORMAT UNIT command to \fIPFU\fR. The default value is 0, the only
other defined value currently is 1. See the PROTECTION INFORMATION section
below for more information.
.TP
\fB\-q\fR, \fB\-\-pie\fR=\fIPIE\fR
sets the "Protection Interval Exponent" field in the parameter block
associated with a FORMAT UNIT command to \fIPIE\fR. The default value is 0.
\fIPIE\fR 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.
.TP
\fB\-p\fR, \fB\-\-pinfo\fR
this option is deprecated, use the \fI\-\-fmtpinfo=FPI\fR option instead.
If used, then it sets bit 7 of byte 1 in the FORMAT UNIT cdb and that
is equivalent to setting \fI\-\-fmtpinfo=2\fR. [So if \fI\-\-pinfo\fR is
used (plus \fI\-\-fmtpinfo=FPI\fR and \fI\-\-pfu=PFU\fR are not given or
their arguments are 0) then protection type 1 is selected.]
.TP
\fB\-x\fR, \fB\-\-poll\fR=\fIPT\fR
where \fIPT\fR is the type of poll used. If \fIPT\fR 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.
.TP
\fB\-r\fR, \fB\-\-resize\fR
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 \fI\-\-count=COUNT\fR 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 \fI\-\-format\fR
or a \fI\-\-size=SIZE\fR whose argument is different to the existing block
size.
.TP
\fB\-R\fR, \fB\-\-rto_req\fR
The option is deprecated, use the \fI\-\-fmtpinfo=FPI\fR option instead.
If used, then it sets bit 6 of byte 1 in the FORMAT UNIT cdb.
.TP
\fB\-S\fR, \fB\-\-security\fR
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 \fI\-\-ip_def\fR option
cannot be given.
.TP
\fB\-6\fR, \fB\-\-six\fR
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.
.TP
\fB\-s\fR, \fB\-\-size\fR=\fISIZE\fR
where \fISIZE\fR 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 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 draft standard). Many SCSI disks have 512 byte sectors
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).
.TP
\fB\-T\fR, \fB\-\-tape\fR=\fIFM\fR
will send a FORMAT MEDIUM command to the \fIDEVICE\fR with the FORMAT field
set to \fIFM\fR. This option is used to prepare a tape (i.e. the "medium")
in a tape drive for use. Values for \fIFM\fR include 0 to do the "default"
format; 1 to partition a volume and 2 to do a default format then partition.
.TP
\fB\-v\fR, \fB\-\-verbose\fR
increase the level of verbosity, (i.e. debug output). "\-vvv" gives
a lot more debug output.
.TP
\fB\-y\fR, \fB\-\-verify\fR
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.
.TP
\fB\-V\fR, \fB\-\-version\fR
print the version string and then exit.
.TP
\fB\-w\fR, \fB\-\-wait\fR
the default format action is to set the "IMMED" bit in the FORMAT UNIT
command's (short) parameter header. If this option (i.e. \fI\-\-wait\fR) is
given then the "IMMED" bit is not set. If \fI\-\-wait\fR 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! Some recent
SSDs go to the other extreme of completing a format operation in 1.5
seconds hence waiting is not an issue.
.SH LISTS
The SBC\-3 draft (revision 36) 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 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)).
.PP
The CMPLST bit (controlled by the \fI\-\-cmplst=\fR0|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.
.PP
The sg_format utility does not permit a user to provide a defect
list (i.e. DLIST).
.SH 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 beside each logical block. 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.
.PP
SBC\-3 drafts 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.22 of draft SBC\-3
revision 36.
.PP
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
.B 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).
.PP
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 \fI\-\-fmtpinfo=FPI\fR and the
\fI\-\-pfu=PFU\fR options in this utility. The list below shows the four
protection types followed by the options of this utility needed to select
them:
.br
  \fB0\fR : \-\-fmtpinfo=0 \-\-pfu=0
.br
  \fB1\fR : \-\-fmtpinfo=2 \-\-pfu=0
.br
  \fB2\fR : \-\-fmtpinfo=3 \-\-pfu=0
.br
  \fB3\fR : \-\-fmtpinfo=3 \-\-pfu=1
.br
The default value of \fIFPI\fR (in \fI\-\-fmtpinfo=FPI\fR) is 0 and the
default value of \fIPFU\fR (in \fI\-\-pfu=PFU\fR) is 0. So if neither
\fI\-\-fmtpinfo=FPI\fR nor \fI\-\-pfu=PFU\fR are given then protection
type 0 (i.e. no protection information) is chosen.
.SH NOTES
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
\fI\-\-poll=PT\fR option has been added to control this.
.PP
When the \fI\-\-format\fR option is given without the \fI\-\-wait\fR 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 \fI\-\-early\fR option will cause sg_format to exit at that point.
Otherwise the \fIDEVICE\fR 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 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 device to become "format corrupt".
.PP
When the \fI\-\-format\fR and \fI\-\-wait\fR 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.
.PP
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 draft 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. different) 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.
.PP
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 \fI\-\-count=\fR\-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.
.PP
Short stroking is a technique to trade off capacity for performance. 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,
average performance will usually be increased.
.PP
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.
.PP
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.
.PP
The \fICOUNT\fR numeric argument may include a multiplicative suffix or be
given in hexadecimal. See the "NUMERIC ARGUMENTS" section in the
sg3_utils(8) man page.
.PP
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 \fI\-\-security\fR option) and in some cases much faster.
.PP
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 \fI\-\-ip_def\fR option). In either case format
operations on SSDs tend to be a lot faster than they are on hard disks with
spinning media.
.SH 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 \fI\-\-verify\fR option. The IMMED bit
is manipulated by the \fI\-\-wait\fR option in the same way it is for disks;
one difference is that if the \fI\-\-poll=PT\fR option is not given then it
defaults to \fIPT\fR of 1 which means the poll is done with REQUEST SENSE
commands.
.PP
The argument given to the \fI\-\-tape=FM\fR option is used to set the FORMAT
field. \fIFM\fR 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 \fI\-\-early\fR 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.
.PP
When \fIFM\fR 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.
.PP
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').
.SH EXAMPLES
These examples use Linux device names. For suitable device names in
other supported Operating Systems see the sg3_utils(8) man page.
.PP
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:
.PP
   # sg_format /dev/sdm
.PP
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:
.PP
   # sg_format \-\-format /dev/sdm
.PP
Now the same format, but waiting (passively) until the format operation is
complete:
.PP
   # sg_format \-\-format \-\-wait /dev/sdm
.PP
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:
.PP
   # sg_format \-\-format \-\-size=520 /dev/sdm
.PP
Now a resize operation so that only the first 0x10000 (65536) blocks on a disk
are accessible. The remaining blocks remain unaltered.
.PP
   # sg_format \-\-resize \-\-count=0x10000 /dev/sdm
.PP
Now resize the disk back to its normal (maximum) block count:
.PP
   # sg_format \-\-resize \-\-count=\-1 /dev/sdm
.PP
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):
.PP
   # sg_vpd \-p ei \-l /dev/sdb
.br
   extended INQUIRY data VPD page:
.br
     ACTIVATE_MICROCODE=0
.br
     SPT=1 [protection types 1 and 2 supported]
.br
     ....
.PP
Format with type 1 protection:
.PP
   # sg_format \-\-format \-\-fmtpinfo=2 /dev/sdm
.PP
After a successful format with type 1 protection, READ CAPACITY(16)
should show something like this:
.PP
   # sg_readcap \-l /dev/sdm
.br
   Read Capacity results:
.br
      Protection: prot_en=1, p_type=0, p_i_exponent=0 [type 1 protection]
.br
      Logical block provisioning: lbpme=0, lbprz=0
.br
      ....
.PP
To format with type 3 protection:
.PP
   # sg_format \-\-format \-\-fmtpinfo=3 \-\-pfu=1 /dev/sdm
.PP
For the disk shown above this will probably fail because the Extended inquiry
VPD page showed only types 1 and 2 protection are supported.
.SH EXIT STATUS
The exit status of sg_format is 0 when it is successful. Otherwise see
the sg3_utils(8) man page. Unless the \fI\-\-wait\fR 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.
.SH AUTHORS
Written by Grant Grundler, James Bottomley and Douglas Gilbert.
.SH "REPORTING BUGS"
Report bugs to <dgilbert at interlog dot com>.
.SH COPYRIGHT
Copyright \(co 2005\-2016 Grant Grundler, James Bottomley and Douglas Gilbert
.br
This software is distributed under the GPL version 2. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.SH "SEE ALSO"
.B sg_turs(8), sg_requests(8), sg_inq(8), sg_modes(8), sg_vpd(8),
.B sg_reassign(8), sg_readcap(8), sg3_utils(8),
.B sg_sanitize(8) [all in sg3_utils],
.B mt(mt-st), sdparm(8), scsiformat (old), hdparm(8)
