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