1SG_VERIFY(8) SG3_UTILS SG_VERIFY(8)
2
3
4
6 sg_verify - invoke SCSI VERIFY command(s) on a block device
7
9 sg_verify [--0] [--16] [--bpc=BPC] [--count=COUNT] [--dpo] [--ff]
10 [--ebytchk=BCH] [--group=GN] [--help] [--in=IF] [--lba=LBA] [--ndo=NDO]
11 [--quiet] [--readonly] [--verbose] [--version] [--vrprotect=VRP] DEVICE
12
14 Sends one or more SCSI VERIFY (10 or 16) commands to DEVICE. These SCSI
15 commands are defined in the SBC-2 and SBC-3 standards at
16 http://www.t10.org and SBC-4 drafts.
17
18 When --ndo=NDO is not given then the verify starts at the logical block
19 address given by the --lba=LBA option and continues for --count=COUNT
20 blocks. No more than --bpc=BPC blocks are verified by each VERIFY com‐
21 mand so if necessary multiple VERIFY commands are sent. Medium verifi‐
22 cation operations are performed by the DEVICE (e.g. assuming each
23 block has additional EEC data, check this against the logical block
24 contents). No news is good news (i.e. if there are no verify errors
25 detected then no messages are sent to stderr and the Unix exit status
26 is 0).
27
28 When --ndo=NDO is given then the --bpc=BPC option is ignored. A single
29 VERIFY command is issued and a comparison starts at the logical block
30 address given by the --lba=LBA option and continues for --count=COUNT
31 blocks. The VERIFY command has an associated data-out buffer that is
32 NDO bytes long. The contents of the data-out buffer are obtained from
33 the FN file (if --in=FN is given) or from stdin. A comparison takes
34 place between data-out buffer and the logical blocks on the DEVICE. If
35 the comparison is good then no messages are sent to stderr and the Unix
36 exit status is 0. If the comparison fails then a sense buffer with a
37 sense key of MISCOMPARE is returned; in this case the Unix exit status
38 will be 14. Messages will be sent to stderr associated with MISCOMPARE
39 sense buffer unless the --quiet option is given.
40
41 In SBC-3 revision 34 the BYTCHK field in all SCSI VERIFY commands was
42 expanded from one to two bits. That required some changes in the
43 options of this utility, see the section below on OPTION CHANGES.
44
46 Arguments to long options are mandatory for short options as well. The
47 options are arranged in alphabetical order based on the long option
48 name.
49
50 -0, --0
51 a buffer NDO bytes long full of zeros is sent as the data-out
52 part of a VERIFY command. So stdin is not read and if --in=IF is
53 given, an error is generated. Useful when BCH is 3 to check if
54 some or all of DEVICE (e.g. a disk) is zero filled blocks.
55
56 -S, --16
57 uses a VERIFY(16) command (default VERIFY(10)). Even without
58 this option, using an --lba=LBA which is too large, will cause
59 the utility to issue a VERIFY(16) command.
60
61 -b, --bpc=BPC
62 this option is ignored if --ndo=NDO is given. Otherwise BPC
63 specifies the maximum number of blocks that will be verified by
64 a single SCSI VERIFY command. The default value is 128 blocks
65 which equates to 64 KB for a disk with 512 byte blocks. If BPC
66 is less than COUNT then multiple SCSI VERIFY commands are sent
67 to the DEVICE. For the default VERIFY(10) BPC cannot exceed
68 0xffff (65,535) while for VERIFY(16) BPC cannot exceed
69 0x7fffffff (2,147,483,647). For recent block devices (disks)
70 this value may be constrained by the maximum transfer length
71 field in the block limits VPD page.
72
73 -c, --count=COUNT
74 where COUNT specifies the number of blocks to verify. The
75 default value is 1 . If COUNT is greater than BPC (or its
76 default value of 128) and NDO is not given, 0 or less than mul‐
77 tiple SCSI VERIFY commands are sent to the device. Otherwise
78 COUNT becomes the contents of the verification length field of
79 the SCSI VERIFY command issued. The sg_readcap utility can be
80 used to find the maximum number of blocks that a block device
81 (e.g. a disk) has.
82
83 -d, --dpo
84 disable page out changes the cache retention priority of blocks
85 read on the device's cache to the lowest priority. This means
86 that blocks read by other commands are more likely to remain in
87 the device's cache.
88
89 -E, --ebytchk=BCH
90 sets the BYTCHK field to BCH overriding the value (1) set by the
91 --ndo=NDO option. Values of 1, 2 or 3 are accepted for BCH how‐
92 ever sbc3r34 reserves the value 2. If this option is given then
93 --ndo=NDO must also be given. If BCH is 3 then NDO should be the
94 size of one logical block (plus the size of some or all of the
95 protection information if VRP is greater than 0).
96
97 -f, --ff
98 a buffer NDO bytes long full of 0xff bytes is sent as the
99 data-out part of a VERIFY command. So stdin is not read and if
100 --in=IF is given, an error is generated. Useful when BCH is 3 to
101 check if some or all of DEVICE (e.g. a disk) is 0xff byte filled
102 blocks.
103
104 -g, --group=GN
105 where GN becomes the contents of the group number field in the
106 SCSI VERIFY(16) command. It can be from 0 to 63 inclusive. The
107 default value for GN is 0. Note that this option is ignored for
108 the SCSI VERIFY(10) command.
109
110 -h, --help
111 output the usage message then exit.
112
113 -i, --in=IF
114 where IF is the name of a file from which NDO bytes will be read
115 and placed in the data-out buffer. This is only done when the
116 --ndo=NDO option is given. If this option is not given then
117 stdin is read. If IF is "-" then stdin is also used.
118
119 -l, --lba=LBA
120 where LBA specifies the logical block address of the first block
121 to start the verify operation. LBA is assumed to be decimal
122 unless prefixed by '0x' or a trailing 'h' (see below). The
123 default value is 0 (i.e. the start of the device).
124
125 -n, --ndo=NDO
126 NDO is the number of bytes to obtain from the FN file (if
127 --in=FN is given) or from stdin. Those bytes are placed in the
128 data-out buffer associated with the SCSI VERIFY command and NDO
129 is placed in the verification length field in the cdb. The
130 default value for NDO is 0 and the maximum value is dependent on
131 the OS. If the --ebytchk=BCH option is not given then the BYTCHK
132 field in the cdb is set to 1.
133
134 -q, --quiet
135 suppress the sense buffer messages associated with a MISCOMPARE
136 sense key that would otherwise be sent to stderr. Still set the
137 exit status to 14 which is the sense key value indicating a MIS‐
138 COMPARE .
139
140 -r, --readonly
141 opens the DEVICE read-only rather than read-write which is the
142 default. The Linux sg driver needs read-write access for the
143 SCSI VERIFY command but other access methods may require
144 read-only access.
145
146 -v, --verbose
147 increase the level of verbosity, (i.e. debug output).
148
149 -V, --version
150 print the version string and then exit.
151
152 -P, --vrprotect=VRP
153 where VRP is the value in the vrprotect field in the VERIFY com‐
154 mand cdb. It must be a value between 0 and 7 inclusive. The
155 default value is zero.
156
158 BYTCHK is the name of a field (two bits wide) in the VERIFY(10) and
159 VERIFY(16) commands. When set to 1 or 3 (sbc3r34 reserves the value 2)
160 it indicates that associated with the SCSI VERIFY command, a data-out
161 buffer will be sent for the device (disk) to check. Using the --ndo=NDO
162 option sets the BYTCHK field to 1 and NDO is the number of bytes placed
163 in the data-out buffer. Those bytes are obtained from stdin or IF (from
164 the --in=FN option). The --ebytchk=BCH option may be used to override
165 the BYTCHK field value of 1 with BCH.
166
167 The calculation of NDO is left up to the user. Its value depends on the
168 logical block size (which can be found with the sg_readcap utility),
169 the COUNT and the VRP values. If the VRP is greater than 0 then each
170 logical block will contain an extra 8 bytes (at least) of protection
171 information.
172
173 When the BYTCHK field is 0 then the verification process done by the
174 device (disk) is vendor specific. It typically involves checking each
175 block on the disk against its error correction codes (ECC) which is
176 additional data also held on the disk.
177
178 Many Operating Systems put limits on the maximum size of the data-out
179 (and data-in) buffer. For Linux at one time the limit was less than 1
180 MB but has been increased somewhat.
181
183 Earlier versions of this utility had a --bytchk=NDO option which set
184 the BYTCHK bit and set the cdb verification length field to NDO. The
185 shorter form of that option was -B NDO. For backward compatibility that
186 option is still present but not documented. In its place is the
187 --ndo=NDO whose shorter form of -n NDO. --ndo=NDO sets the BYTCHK
188 field to 1 unless that is overridden by the --ebytchk=BCH.
189
191 Various numeric arguments (e.g. LBA) may include multiplicative suf‐
192 fixes or be given in hexadecimal. See the "NUMERIC ARGUMENTS" section
193 in the sg3_utils(8) man page.
194
195 The amount of error correction and the number of retries attempted
196 before a block is considered defective are controlled in part by the
197 Verify Error Recovery mode page. A note in the SBC-3 draft (rev 29 sec‐
198 tion 6.4.9 on the Verify Error Recovery mode page) advises that to min‐
199 imize the number of checks (and hence have the most "sensitive" verify
200 check) do the following in that mode page: set the EER bit to 0, the
201 PER bit to 1, the DTE bit to 1, the DCR bit to 1, the verify retry
202 count to 0 and the verify recovery time limit to 0. Mode pages can be
203 modified with the sdparm utility.
204
205 The SCSI VERIFY(6) command defined in the SSC-2 standard and later
206 (i.e. for tape drive systems) is not supported by this utility.
207
209 The exit status of sg_verify is 0 when it is successful. When BCH is
210 other than 0 then a comparison takes place and if it fails then the
211 exit status is 14 which happens to be the sense key value of MISCOM‐
212 PARE. Otherwise see the EXIT STATUS section in the sg3_utils(8) man
213 page.
214
215 Earlier versions of this utility set an exit status of 98 when there
216 was a MISCOMPARE.
217
219 Written by Douglas Gilbert.
220
222 Report bugs to <dgilbert at interlog dot com>.
223
225 Copyright © 2004-2019 Douglas Gilbert
226 This software is distributed under a FreeBSD license. There is NO war‐
227 ranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR‐
228 POSE.
229
231 sdparm(sdparm), sg_modes(sg3_utils), sg_readcap(sg3_utils),
232 sg_inq(sg3_utils)
233
234
235
236sg3_utils-1.45 December 2019 SG_VERIFY(8)