726 lines
37 KiB
Groff
726 lines
37 KiB
Groff
.TH SG_FORMAT "8" "February 2022" "sg3_utils\-1.48" SG3_UTILS
|
|
.SH NAME
|
|
sg_format \- format, format with preset, resize SCSI disk; format tape
|
|
.SH SYNOPSIS
|
|
.B sg_format
|
|
[\fI\-\-cmplst=\fR{0|1}] [\fI\-\-count=COUNT\fR] [\fI\-\-dcrt\fR]
|
|
[\fI\-\-dry\-run\fR] [\fI\-\-early\fR] [\fI\-\-ffmt=FFMT\fR]
|
|
[\fI\-\-fmtmaxlba\R] [\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\-\-preset=ID\fR] [\fI\-\-quick\fR] [\fI\-\-resize\fR] [\fI\-\-rto_req\fR]
|
|
[\fI\-\-security\fR] [\fI\-\-six\fR] [\fI\-\-size=LB_SZ\fR]
|
|
[\fI\-\-tape=FM\fR] [\fI\-\-timeout=SECS\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 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. A SCSI INQUIRY response categorizes
|
|
the 'Peripheral Device Type' (PDT) of each SCSI device. This utility uses
|
|
the PDT to check if there is a conflict between the \fIDEVICE\fR and the
|
|
given option (e.g. giving the \fI\-\-tape=FM\fR option when \fIDEVICE\fR is
|
|
a normal disk). If there is a conflict, this utility will not continue.
|
|
.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. There is a Format Status log page which reports on the
|
|
previous successful format operation(s).
|
|
.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 either \fI\-\-format\fR, \fI\-\-preset=ID\fR
|
|
or \fI\-\-tape=FM\fR, it will attempt to format the given DEVICE. In the
|
|
absence of the \fI\-\-quick\fR option there is a 15 second pause during which
|
|
time the user is invited thrice (5 seconds apart) to abort sg_format. This
|
|
occurs just prior the SCSI FORMAT UNIT, FORMAT WITH PRESET or FORMAT MEDIUM
|
|
command being issued. See the NOTES section for more information.
|
|
.PP
|
|
Protection information (PI) is optional and is made up of one or more
|
|
protection intervals, each made up of 8 bytes associated with a logical
|
|
block. When PI is active each logical block will have 1, 2, 4, 8, etc
|
|
protection intervals (i.e. a power of two), interleaved with (and following)
|
|
the user data to which they refer. Four protection types are defined with
|
|
protection type 0 being no protection intervals. See the PROTECTION
|
|
INFORMATION section below for more information.
|
|
.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 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.
|
|
.PP
|
|
The FORMAT WITH PRESET was added in draft SBC\-4 revision 18. A preset
|
|
pattern, selected by the PRESET IDENTIFIER field (\fI\-\-id=FWPID\fR),
|
|
is written to the disk. See the FORMAT PRESETS VPD page (0xb8) for a list
|
|
of available Format preset identifiers and their associated data.
|
|
.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.
|
|
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 \fI\-\-ffmt=FFMT\fR 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.
|
|
.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.
|
|
.br
|
|
With \fI\-\-format\fR the interpretation of \fICOUNT\fR is:
|
|
.br
|
|
(\fICOUNT\fR > 0) : only format the first \fICOUNT\fR blocks and READ
|
|
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
|
|
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
|
|
blocks
|
|
.br
|
|
(\fICOUNT\fR = 0) : after resize READ CAPACITY will report 0 blocks
|
|
.br
|
|
(\fICOUNT\fR = \-1) : after resize READ CAPACITY will report its
|
|
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
|
|
but \fI\-\-ffmt=FFMT\fR, 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.
|
|
.br
|
|
If this option is given twice then certification is enabled by clearing the
|
|
DCRT bit and setting the FOV bit. Both these bits are found in the parameter
|
|
list associated with the FORMAT UNIT cdb.
|
|
.TP
|
|
\fB\-d\fR, \fB\-\-dry\-run\fR
|
|
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.
|
|
.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 (or every 10 seconds if \fIFFMT\fR 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 \fI\-\-wait\fR are mutually exclusive.
|
|
.TP
|
|
\fB\-t\fR, \fB\-\-ffmt\fR=\fIFFMT\fR
|
|
\fIFFMT\fR (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 \fIDEVICE\fR. That can take a long time (e.g. with hard disks
|
|
over 10 TB in size that can be days). With \fIFFMT\fR set that time may be
|
|
reduced to minutes or less. So it is worth trying if it is available.
|
|
.br
|
|
\fIFFMT\fR has values 1 and 2 for fast format with 3 being reserved
|
|
currently. These two values include this description: "The device server
|
|
initializes the medium ... without overwriting the medium (i.e. resources
|
|
for managing medium access are initialized and the medium is not written)".
|
|
The difference between 1 and 2 concerns read operations on LBAs to which no
|
|
data has been written to, after the fast format. When \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 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.
|
|
.TP
|
|
\fB\-b\fR, \fB\-\-fmtmaxlba\fR
|
|
This option is only active if it is given together with the
|
|
\fI\-\-preset=ID\fR option. If so it sets the FMTMAXLBA field in the FORMAT
|
|
WITH PRESET command.
|
|
.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 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.
|
|
.TP
|
|
\fB\-F\fR, \fB\-\-format\fR
|
|
issue one of the three SCSI "format" commands. In the absence of the
|
|
\fI\-\-preset=ID\fR and \fI\-\-tape=FM\fR options, the SCSI FORMAT UNIT
|
|
command is issued.
|
|
.B 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 \fI\-\-quick\fR 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.
|
|
.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
|
|
Host managed zoned devices (e.g. many zoned disks) have a different PDT
|
|
compared to other disks but can still be formatted as if they were 'normal'
|
|
disks.
|
|
.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. Also accepts \fI\-\-ip_def\fR for this option.
|
|
.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.
|
|
.br
|
|
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 .
|
|
.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\-E\fR, \fB\-\-preset\fR=\fIID\fR
|
|
this option instructs this utility to issue a SCSI FORMAT WITH PRESET
|
|
command. The PRESET IDENTIFIER field in that cdb is set to \fIID\fR. The
|
|
IMMED field in that cdb is also set unless the \fI\-\-wait\fR option is
|
|
also given, in which case it is cleared.
|
|
.TP
|
|
\fB\-Q\fR, \fB\-\-quick\fR
|
|
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 \fIDEVICE\fR.
|
|
When this option is given that step (i.e. the 15 second warning period)
|
|
is skipped.
|
|
.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=LB_SZ\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=\fILB_SZ\fR
|
|
where \fILB_SZ\fR is the logical block size (i.e. number of user bytes in each
|
|
block) to format the device to. The default value is whatever is currently
|
|
reported by the block descriptor in a MODE SENSE command. If the block size
|
|
given by this option is different from the current value then a MODE SELECT
|
|
command is used to change it prior to the FORMAT UNIT command being
|
|
started (as recommended in the SBC standards). Some SCSI disks have 512 byte
|
|
logical blocks by default and allow an alternate logical block size of 4096
|
|
bytes. If the given size in unacceptable to the disk, most likely an "Invalid
|
|
field in parameter list" message will appear in sense data (requires the
|
|
use of '\-v' to decode sense data).
|
|
.br
|
|
Note that formatting a disk to add or remove protection information is not
|
|
regarded as a change to its logical block size so this option should not
|
|
be used.
|
|
.TP
|
|
\fB\-T\fR, \fB\-\-tape\fR=\fIFM\fR
|
|
will send a FORMAT MEDIUM command to the \fIDEVICE\fR with its 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\-m\fR, \fB\-\-timeout\fR=\fISECS\fR
|
|
where \fISECS\fR is the FORMAT UNIT, FORMAT WITH PRESET or FORMAT MEDIUM
|
|
command timeout in seconds. \fISECS\fR will only be used if it exceeds the
|
|
internal timeout which is 20 seconds if the IMMED bit is set and 72000
|
|
seconds (20 hours) or higher if the IMMED bit is not set. If the disk size
|
|
exceeds 4 TB then the timeout value is increased to 144000 seconds (40 hours).
|
|
And if it is greater than 8 TB then the timeout value is increased to
|
|
288000 seconds (80 hours). If the timeout is exceeded then the operating
|
|
system will typically abort the command. Aborting a command may escalate to
|
|
a LUN reset (or worse). A timeout may also leave the disk or tape format
|
|
operation incomplete. And that may result in the disk or tape being in
|
|
a "format corrupt" state requiring another format to remedy the situation.
|
|
So for various reasons command timeouts are best avoided.
|
|
.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 then the
|
|
FORMAT UNIT, FORMAT WITH PRESET or FORMAT MEDIUM command waits until the
|
|
format operation completes before returning its response. This can be many
|
|
hours on large disks. See the \fI\-\-timeout=SECS\fR option.
|
|
.br
|
|
Alternatively this option may be useful when used together with
|
|
\fI\-\-ffmt=FFMT\fR (and \fIFFMT\fR greater than 0) since the fast format
|
|
may only be a matter of seconds.
|
|
.SH LISTS
|
|
The SBC\-3 draft (revision 20) defines PLIST, CLIST, DLIST and GLIST in
|
|
section 4.10 on "Medium defects". Briefly, the PLIST is the "primary"
|
|
list of manufacturer detected defects, the CLIST ("certification" list)
|
|
contains those detected during the format operation, the DLIST is a list of
|
|
defects that can be given to the format operation. The GLIST is the grown
|
|
list which starts in the format process as CLIST+DLIST and can "grow" later
|
|
due to automatic reallocation (see the ARRE and AWRE bits in the
|
|
Read\-Write Error Recovery mode page (see sdparm(8))) and use of the
|
|
SCSI REASSIGN BLOCKS command (see sg_reassign(8)).
|
|
.PP
|
|
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.
|
|
.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 interleaved in each logical block. Each protection
|
|
interval follows the user data to which it refers. A protection interval
|
|
contains 8 bytes made up of a 2 byte "logical block guard" (CRC), a 2
|
|
byte "logical block application guard", and a 4 byte "logical block
|
|
reference tag". Devices with 512 byte logical block size typically have
|
|
one protection interval appended, making its logical block data 520 bytes
|
|
long. Devices with 4096 byte logical block size often have 8 protection
|
|
intervals spread across its logical block data for a total size of 4160
|
|
bytes. Note that for all other purposes the logical block size is considered
|
|
to be 512 and 4096 bytes respectively.
|
|
.PP
|
|
The SBC\-3 standard have added several "protection types" to the PI
|
|
introduced in the SBC\-2 standard. SBC\-3 defines 4 protection types (types
|
|
0 to 3) with protection type 0 meaning no PI is maintained. While a device
|
|
may support one or more protection types, it can only be formatted with 1
|
|
of the 4. To change a device's protection type, it must be re\-formatted.
|
|
For more information see the Protection Information in section 4.21 of
|
|
draft SBC\-4 revision 16.
|
|
.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
|
|
After a format that changes the logical block size or the number of logical
|
|
blocks on a disk, the operating system may need to be told to re\-initialize
|
|
its setting for that disk. In Linux that can be done with:
|
|
.br
|
|
echo 1 > /sys/block/sd{letter(s)}/device/rescan
|
|
.br
|
|
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.
|
|
.PP
|
|
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, \fI\-\-preset=ID\fR or \fI\-\-tape=FM\fR option
|
|
is given without the \fI\-\-wait\fR 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 \fI\-\-early\fR option
|
|
will cause sg_format to exit at that point. Otherwise the \fIDEVICE\fR is
|
|
polled every 60 seconds or every 10 seconds if \fIFFMT\fR is non\-zero. The
|
|
poll is with TEST UNIT READY or REQUEST SENSE commands until one reports
|
|
an "all clear" (i.e. the format operation has completed). Normally these
|
|
polling commands will result in a progress indicator (expressed as a
|
|
percentage) being output to the screen. If the user gets bored watching the
|
|
progress report then sg_format process can be terminated (e.g. with
|
|
control\-C) without affecting the format operation which continues. However
|
|
a target or device reset (or a power cycle) will probably cause the format
|
|
to cease and the \fIDEVICE\fR to become "format corrupt".
|
|
.PP
|
|
When the \fI\-\-format\fR (\fI\-\-preset=ID\fR or \fI\-\-tape\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 20 hours applicable to some format
|
|
operations). This may result in the OS resetting the disk leaving the format
|
|
operation incomplete. This may leave the disk in a "format corrupt" state
|
|
requiring another format to remedy the situation. Modern SCSI devices should
|
|
yield a "not ready" sense key with an additional sense indicating a format
|
|
is in progress. With older devices the user should take precautions that
|
|
nothing attempts to access a device while it is being formatted. Unmounting
|
|
in mounted file systems on a \fIDEVICE\fR prior to calling this utility
|
|
is strongly advised.
|
|
.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 standard
|
|
calls "format corrupt". A block descriptor in a subsequent MODE SENSE
|
|
will report the requested new block size while a READ CAPACITY command
|
|
will report the existing (i.e. previous) block size. Alternatively
|
|
the READ CAPACITY command may fail, reporting the device is not ready,
|
|
potentially requiring a format. The solution to this situation is to
|
|
do a format again (and this time the new block size does not have to
|
|
be given) or change the block size back to the original size.
|
|
.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 \-\-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.
|
|
.PP
|
|
The FMTDATA field shown in the FORMAT UNIT cdb does not have a corresponding
|
|
option in this utility. When set in the cdb it indicates an additional
|
|
parameter list will be sent to the \fIDEVICE\fR along with the cdb. It is set
|
|
as required, basically when any field in the parameter list header is set.
|
|
.PP
|
|
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.
|
|
.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.
|
|
.PP
|
|
Host managed zoned devices (aka zoned disks) have a different Peripheral
|
|
Device Type [PDT=20 or 0x14] from normal disks. They can be considered
|
|
as a superset of normal disks (e.g. SSDs and hard disks) at least from
|
|
the perspective of the number of SCSI commands they support. Typically
|
|
they can be formatted just like other SCSI disks. They have their own
|
|
T10 standards: ZBC standard (INCITS 536\-2016) and draft ZBC\-2.
|
|
.br
|
|
Two other zoned disk variants ("host aware" and "Domains and Realms") use
|
|
the same PDT as other disks (i.e. PDT=0) and can be formatted by this
|
|
utility as if they were normal disks.
|
|
.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.
|
|
.PP
|
|
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.
|
|
.PP
|
|
# sg_format \-\-format \-\-ffmt=1 \-\-size=512 /dev/sdd
|
|
.PP
|
|
Now /dev/sdd should have 512 byte logical block size. And to switch it back:
|
|
.PP
|
|
# sg_format \-\-format \-\-ffmt=1 \-\-size=4096 /dev/sdd
|
|
.PP
|
|
Since fast formats can be very quick (a matter of seconds) using the
|
|
\-\-wait option may be appropriate.
|
|
.PP
|
|
And to use the Format with preset command this invocation could be used:
|
|
.PP
|
|
# sg_format \-\-preset=1 \-\-fmtmaxlba /dev/sdd
|
|
.PP
|
|
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.
|
|
.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.
|
|
.PP
|
|
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
|
|
\fI\-\-verbose\fR option once should supply enough additional output to
|
|
settle those nerves.
|
|
.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\-2022 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 lsscsi(8), mt(mt\-st), sdparm(8), scsiformat (old), hdparm(8)
|