diff options
Diffstat (limited to 'doc/sg_format.8')
-rw-r--r-- | doc/sg_format.8 | 725 |
1 files changed, 725 insertions, 0 deletions
diff --git a/doc/sg_format.8 b/doc/sg_format.8 new file mode 100644 index 00000000..7c00cc50 --- /dev/null +++ b/doc/sg_format.8 @@ -0,0 +1,725 @@ +.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) |