1SG_DD(8) SG3_UTILS SG_DD(8)
2
3
4
6 sg_dd - copies data to and from files and devices. Specialised for
7 devices that understand the SCSI command set.
8
10 sg_dd [bs=BS] [conv=CONV] [count=COUNT] [ibs=BS] [if=IFILE]
11 [iflag=FLAGS] [obs=BS] [of=OFILE] [oflag=FLAGS] [seek=SEEK] [skip=SKIP]
12 [--help] [--version]
13
14 [blk_sgio=0|1] [bpt=BPT] [cdbsz=6|10|12|16] [coe=0|1|2|3]
15 [coe_limit=CL] [dio=0|1] [odir=0|1] [of2=OFILE2] [retries=RETR]
16 [sync=0|1] [time=0|1] [verbose=VERB] [-V]
17
19 Copy data to and from any files. Specialized for "files" that are Linux
20 SCSI generic (sg) devices, raw devices or other devices that support
21 the SG_IO ioctl (which are only found in the lk 2.6 series). Similar
22 syntax and semantics to dd(1) but only one type of "conversion" is sup‐
23 ported. That optional conversion is sparse writing of the output file.
24
25 The first group in the synopsis above are "standard" Unix dd(1) oper‐
26 ands. The second group are extra options added by this utility. Both
27 groups are defined below.
28
29 This utility is only supported on Linux whereas most other utilities in
30 the sg3_utils package have been ported to other operating systems. A
31 utility called "ddpt" has similar syntax and functionality to sg_dd.
32 ddpt drops some Linux specific features while adding some other generic
33 features. This allows ddpt to be ported to other operating systems.
34
36 blk_sgio=0 | 1
37 when set to 0, block devices (e.g. /dev/sda) are treated like
38 normal files (i.e. read(2) and write(2) are used for IO). When
39 set to 1, block devices are assumed to accept the SG_IO ioctl
40 and SCSI commands are issued for IO. This is only supported for
41 2.6 series kernels. Note that ATAPI devices (e.g. cd/dvd play‐
42 ers) use the SCSI command set but ATA disks do not (unless there
43 is a protocol conversion as often occurs in the USB mass storage
44 class). If the input or output device is a block device parti‐
45 tion (e.g. /dev/sda3) then setting this option causes the parti‐
46 tion information to be ignored (since access is directly to the
47 underlying device). Default is 0. See the 'sgio' flag.
48
49 bpt=BPT
50 each IO transaction will be made using BPT blocks (or less if
51 near the end of the copy). Default is 128 for block sizes less
52 that 2048 bytes, otherwise the default is 32. So for bs=512 the
53 reads and writes will each convey 64 KiB of data by default
54 (less if near the end of the transfer or memory restrictions).
55 When cd/dvd drives are accessed, the block size is typically
56 2048 bytes and bpt defaults to 32 which again implies 64 KiB
57 transfers. The block layer when the blk_sgio=1 option is used
58 has relatively low upper limits for transfer sizes (compared to
59 sg device nodes, see /sys/block/<dev_name>/queue/max_sectors_kb
60 ).
61
62 bs=BS where BS must be the block size of the physical device (if
63 either the input or output files are accessed via SCSI com‐
64 mands). Note that this differs from dd(1) which permits BS to be
65 an integral multiple. Default is 512 which is usually correct
66 for disks but incorrect for cdroms (which normally have 2048
67 byte blocks). For this utility the maximum size of each individ‐
68 ual IO operation is BS * BPT bytes.
69
70 cdbsz=6 | 10 | 12 | 16
71 size of SCSI READ and/or WRITE commands issued on sg device
72 names (or block devices when 'iflag=sgio' and/or 'oflag=sgio' is
73 given). Default is 10 byte SCSI command blocks (unless calcula‐
74 tions indicate that a 4 byte block number may be exceeded or BPT
75 is greater than 16 bits (65535), in which case it defaults to 16
76 byte SCSI commands).
77
78 coe=0 | 1 | 2 | 3
79 set to 1 or more for continue on error. Only applies to errors
80 on sg devices or block devices with the 'sgio' flag set. Thus
81 errors on other files will stop sg_dd. Default is 0 which
82 implies stop on any error. See the 'coe' flag for more informa‐
83 tion.
84
85 coe_limit=CL
86 where CL is the maximum number of consecutive bad blocks stepped
87 over (due to "coe>0") on reads before the copy terminates. This
88 only applies when IFILE is accessed via the SG_IO ioctl. The
89 default is 0 which is interpreted as no limit. This option is
90 meant to stop the copy soon after unrecorded media is detected
91 while still offering "continue on error" capability.
92
93 conv=sparse
94 only one conversion is permitted: sparse writing of the OFILE.
95 This option has the same action as 'oflag=sparse'. This alter‐
96 nate syntax was added for FreeBSD which uses this syntax in its
97 dd command. See the FLAGS section below.
98
99 count=COUNT
100 copy COUNT blocks from IFILE to OFILE. Default is the minimum
101 (of IFILE and OFILE) number of blocks that sg devices report
102 from SCSI READ CAPACITY commands or that block devices (or their
103 partitions) report. Normal files are not probed for their size.
104 If skip=SKIP or skip=SEEK are given and the count is derived
105 (i.e. not explicitly given) then the derived count is scaled
106 back so that the copy will not overrun the device. If the file
107 name is a block device partition and COUNT is not given then the
108 size of the partition rather than the size of the whole device
109 is used. If COUNT is not given (or count=-1) and cannot be
110 derived then an error message is issued and no copy takes place.
111
112 dio=0 | 1
113 default is 0 which selects indirect (buffered) IO on sg devices.
114 Value of 1 attempts direct IO which, if not available, falls
115 back to indirect IO and notes this at completion. If direct IO
116 is selected and /proc/scsi/sg/allow_dio has the value of 0 then
117 a warning is issued (and indirect IO is performed). For finer
118 grain control use 'iflag=dio' or 'oflag=dio'.
119
120 ibs=BS if given must be the same as BS given to 'bs=' option.
121
122 if=IFILE
123 read from IFILE instead of stdin. If IFILE is '-' then stdin is
124 read. Starts reading at the beginning of IFILE unless SKIP is
125 given.
126
127 iflag=FLAGS
128 where FLAGS is a comma separated list of one or more flags out‐
129 lined below. These flags are associated with IFILE and are
130 ignored when IFILE is stdin.
131
132 obs=BS if given must be the same as BS given to 'bs=' option.
133
134 odir=0 | 1
135 when set to one opens block devices (e.g. /dev/sda) with the
136 O_DIRECT flag. User memory buffers are aligned to the page size
137 when set. The default is 0 (i.e. the O_DIRECT flag is not used).
138 Has no effect on sg, normal or raw files. If blk_sgio is also
139 set then both are honoured: block devices are opened with the
140 O_DIRECT flag and SCSI commands are issued via the SG_IO ioctl.
141
142 of=OFILE
143 write to OFILE instead of stdout. If OFILE is '-' then writes to
144 stdout. If OFILE is /dev/null then no actual writes are per‐
145 formed. If OFILE is '.' (period) then it is treated the same
146 way as /dev/null (this is a shorthand notation). If OFILE exists
147 then it is _not_ truncated; it is overwritten from the start of
148 OFILE unless 'oflag=append' or SEEK is given.
149
150 of2=OFILE2
151 write output to OFILE2. The default action is not to do this
152 additional write (i.e. when this option is not given). OFILE2 is
153 assumed to be a normal file or a fifo (i.e. a named pipe).
154 OFILE2 is opened for writing, created if necessary, and closed
155 at the end of the transfer. If OFILE2 is a fifo (named pipe)
156 then some other command should be consuming that data (e.g.
157 'md5sum OFILE2'), otherwise this utility will block.
158
159 oflag=FLAGS
160 where FLAGS is a comma separated list of one or more flags out‐
161 lined below. These flags are associated with OFILE and are
162 ignored when OFILE is /dev/null, '.' (period), or stdout.
163
164 retries=RETR
165 sometimes retries at the host are useful, for example when there
166 is a transport error. When RETR is greater than zero then SCSI
167 READs and WRITEs are retried on error, RETR times. Default value
168 is zero.
169
170 seek=SEEK
171 start writing SEEK bs-sized blocks from the start of OFILE.
172 Default is block 0 (i.e. start of file).
173
174 skip=SKIP
175 start reading SKIP bs-sized blocks from the start of IFILE.
176 Default is block 0 (i.e. start of file).
177
178 sync=0 | 1
179 when 1, does SYNCHRONIZE CACHE command on OFILE at the end of
180 the transfer. Only active when OFILE is a sg device file name or
181 a block device and 'blk_sgio=1' is given.
182
183 time=0 | 1
184 when 1, times transfer and does throughput calculation, out‐
185 putting the results (to stderr) at completion. When 0 (default)
186 doesn't perform timing.
187
188 verbose=VERB
189 as VERB increases so does the amount of debug output sent to
190 stderr. Default value is zero which yields the minimum amount
191 of debug output. A value of 1 reports extra information that is
192 not repetitive. A value 2 reports cdbs and responses for SCSI
193 commands that are not repetitive (i.e. other that READ and
194 WRITE). Error processing is not considered repetitive. Values of
195 3 and 4 yield output for all SCSI commands (and Unix read() and
196 write() calls) so there can be a lot of output. This only
197 occurs for scsi generic (sg) devices and block devices when the
198 'blk_sgio=1' option is set.
199
200 --help outputs usage message and exits.
201
202 --version
203 outputs version number information and exits.
204
205 -V outputs version number information and exits.
206
208 Here is a list of flags and their meanings:
209
210 append causes the O_APPEND flag to be added to the open of OFILE. For
211 regular files this will lead to data appended to the end of any
212 existing data. Cannot be used together with the seek=SEEK
213 option as they conflict. The default action of this utility is
214 to overwrite any existing data from the beginning of the file
215 or, if SEEK is given, starting at block SEEK. Note that attempt‐
216 ing to 'append' to a device file (e.g. a disk) will usually be
217 ignored or may cause an error to be reported.
218
219 coe continue on error. Only active for sg devices and block devices
220 that have the 'sgio' flag set. 'iflag=coe oflag=coe' and 'coe=1'
221 are equivalent. Use this flag twice (e.g. 'iflag=coe,coe') to
222 have the same action as the 'coe=2'. A medium, hardware or blank
223 check error while reading will re-read blocks prior to the bad
224 block, then try to recover the bad block, supplying zeros if
225 that fails, and finally reread the blocks after the bad block. A
226 medium, hardware or blank check error while writing is noted and
227 ignored. The recovery of the bad block when reading uses the
228 SCSI READ LONG command if 'coe' given twice or more (also with
229 the command line option 'coe=2'). Further, the READ LONG will
230 set its CORRCT bit if 'coe' given thrice. SCSI disks may auto‐
231 matically try and remap faulty sectors (see the AWRE and ARRE in
232 the read write error recovery mode page (the sdparm utility can
233 access and possibly change these attributes)). Errors occurring
234 on other files types will stop sg_dd. Error messages are sent
235 to stderr. This flag is similar
236 o 'conv=noerror,sync' in the dd(1) utility. See note about READ
237 LONG below.
238
239 dio request the sg device node associated with this flag does direct
240 IO. If direct IO is not available, falls back to indirect IO
241 and notes this at completion. If direct IO is selected and
242 /proc/scsi/sg/allow_dio has the value of 0 then a warning is
243 issued (and indirect IO is performed).
244
245 direct causes the O_DIRECT flag to be added to the open of IFILE and/or
246 OFILE. This flag requires some memory alignment on IO. Hence
247 user memory buffers are aligned to the page size. Has no effect
248 on sg, normal or raw files. If 'iflag=sgio' and/or 'oflag=sgio'
249 is also set then both are honoured: block devices are opened
250 with the O_DIRECT flag and SCSI commands are issued via the
251 SG_IO ioctl.
252
253 dpo set the DPO bit (disable page out) in SCSI READ and WRITE com‐
254 mands. Not supported for 6 byte cdb variants of READ and WRITE.
255 Indicates that data is unlikely to be required to stay in device
256 (e.g. disk) cache. May speed media copy and/or cause a media
257 copy to have less impact on other device users.
258
259 dsync causes the O_SYNC flag to be added to the open of IFILE and/or
260 OFILE. The 'd' is prepended to lower confusion with the
261 'sync=0|1' option which has another action (i.e. a synchronisa‐
262 tion to media at the end of the transfer).
263
264 excl causes the O_EXCL flag to be added to the open of IFILE and/or
265 OFILE.
266
267 flock after opening the associated file (i.e. IFILE and/or OFILE) an
268 attempt is made to get an advisory exclusive lock with the
269 flock() system call. The flock arguments are "FLOCK_EX |
270 FLOCK_NB" which will cause the lock to be taken if available
271 else a "temporarily unavailable" error is generated. An exit
272 status of 90 is produced in the latter case and no copy is done.
273
274 fua causes the FUA (force unit access) bit to be set in SCSI READ
275 and/or WRITE commands. This only has an effect with sg devices
276 or block devices that have the 'sgio' flag set. The 6 byte vari‐
277 ants of the SCSI READ and WRITE commands do not support the FUA
278 bit.
279
280 null has no affect, just a placeholder.
281
282 sgio causes block devices to be accessed via the SG_IO ioctl rather
283 than standard UNIX read() and write() commands. When the SG_IO
284 ioctl is used the SCSI READ and WRITE commands are used directly
285 to move data. sg devices always use the SG_IO ioctl. This flag
286 offers finer grain control compared to the otherwise identical
287 'blk_sgio=1' option.
288
289 sparse after each BS * BPT byte segment is read from the input, it is
290 checked for being all zeros. If so, nothing is written to the
291 output file unless this is the last segment of the transfer.
292 This flag is only active with the oflag option. It cannot be
293 used when the output is not seekable (e.g. stdout). It is
294 ignored if the output file is /dev/null . Note that this util‐
295 ity does not remove the OFILE prior to starting to write to it.
296 Hence it may be advantageous to manually remove the OFILE if it
297 is large prior to using oflag=sparse. The last segment is always
298 written so regular files will show the same length and so pro‐
299 grams like md5sum and sha1sum will generate the same value
300 regardless of whether oflag=sparse is given or not. This option
301 may be used when the OFILE is a raw device but is probably only
302 useful if the device is known to contain zeros (e.g. a SCSI disk
303 after a FORMAT command).
304
306 Here are some retired options that are still present:
307
308 append=0 | 1
309 when set, equivalent to 'oflag=append'. When clear the action is
310 to overwrite the existing file (if it exists); this is the
311 default. See the 'append' flag.
312
313 fua=0 | 1 | 2 | 3
314 force unit access bit. When 3, fua is set on both IFILE and
315 OFILE; when 2, fua is set on IFILE;, when 1, fua is set on
316 OFILE; when 0 (default), fua is cleared on both. See the 'fua'
317 flag.
318
320 Block devices (e.g. /dev/sda and /dev/hda) can be given for IFILE. If
321 neither '-iflag=direct', 'iflag=sgio' nor 'blk_sgio=1' is given then
322 normal block IO involving buffering and caching is performed. If only
323 '-iflag=direct' is given then the buffering and caching is bypassed
324 (this is applicable to both SCSI devices and ATA disks). If
325 'iflag=sgio' or 'blk_sgio=1' is given then the SG_IO ioctl is used on
326 the given file causing SCSI commands to be sent to the device and that
327 also bypasses most of the actions performed by the block layer (this is
328 only applicable to SCSI devices, not ATA disks). The same applies for
329 block devices given for OFILE.
330
331 Various numeric arguments (e.g. SKIP) may include multiplicative suf‐
332 fixes or be given in hexadecimal. See the "NUMERIC ARGUMENTS" section
333 in the sg3_utils(8) man page.
334
335 The COUNT, SKIP and SEEK arguments can take 64 bit values (i.e. very
336 big numbers). Other values are limited to what can fit in a signed 32
337 bit number.
338
339 Data usually gets to the user space in a 2 stage process: first the
340 SCSI adapter DMAs into kernel buffers and then the sg driver copies
341 this data into user memory (write operations reverse this sequence).
342 This is called "indirect IO" and there is a 'dio' option to select
343 "direct IO" which will DMA directly into user memory. Due to some
344 issues "direct IO" is disabled in the sg driver and needs a configura‐
345 tion change to activate it. This is typically done with 'echo 1 >
346 /proc/scsi/sg/allow_dio'.
347
348 All informative, warning and error output is sent to stderr so that
349 dd's output file can be stdout and remain unpolluted. If no options are
350 given, then the usage message is output and nothing else happens.
351
352 Even if READ LONG succeeds on a "bad" block when 'coe=2' (or 'coe=3')
353 is given, the recovered data may not be useful. There are no guarantees
354 that the user data will appear "as is" in the first 512 bytes.
355
356 A raw device must be bound to a block device prior to using sg_dd. See
357 raw(8) for more information about binding raw devices. To be safe, the
358 sg device mapping to SCSI block devices should be checked with 'cat
359 /proc/scsi/scsi', or sg_map before use.
360
361 Disk partition information can often be found with fdisk(8) [the "-ul"
362 argument is useful in this respect].
363
364 For sg devices (and block devices when blk_sgio=1 is given) this util‐
365 ity issues SCSI READ and WRITE (SBC) commands which are appropriate for
366 disks and reading from CD/DVD/HD-DVD/BD drives. Those commands are not
367 formatted correctly for tape devices so sg_dd should not be used on
368 tape devices. If the largest block address of the requested transfer
369 exceeds a 32 bit block number (i.e 0xffff) then a warning is issued and
370 the sg device is accessed via SCSI READ(16) and WRITE(16) commands.
371
372 The attributes of a block device (partition) are ignored when
373 'blk_sgio=1' is used. Hence the whole device is read (rather than just
374 the second partition) by this invocation:
375
376 sg_dd if=/dev/sdb2 blk_sgio=1 of=t bs=512
377
379 Looks quite similar in usage to dd:
380
381 sg_dd if=/dev/sg0 of=t bs=512 count=1MB
382
383 This will copy 1 million 512 byte blocks from the device associated
384 with /dev/sg0 (which should have 512 byte blocks) to a file called t.
385 Assuming /dev/sda and /dev/sg0 are the same device then the above is
386 equivalent to:
387
388 dd if=/dev/sda iflag=direct of=t bs=512 count=1000000
389
390 although dd's speed may improve if bs was larger and count was suitably
391 reduced. The use of the 'iflag=direct' option bypasses the buffering
392 and caching that is usually done on a block device.
393
394 Using a raw device to do something similar on a ATA disk:
395
396 raw /dev/raw/raw1 /dev/hda
397 sg_dd if=/dev/raw/raw1 of=t bs=512 count=1MB
398
399 To copy a SCSI disk partition to an ATA disk partition:
400
401 raw /dev/raw/raw2 /dev/hda3
402 sg_dd if=/dev/sg0 skip=10123456 of=/dev/raw/raw2 bs=512
403
404 This assumes a valid partition is found on the SCSI disk at the given
405 skip block address (past the 5 GB point of that disk) and that the par‐
406 tition goes to the end of the SCSI disk. An explicit count is probably
407 a safer option. The partition is copied to /dev/hda3 which is an offset
408 into the ATA disk /dev/hda . The exact number of blocks read from
409 /dev/sg0 are written to /dev/hda (i.e. no padding).
410
411 To time a streaming read of the first 1 GB (2 ** 30 bytes) on a disk
412 this utility could be used:
413
414 sg_dd if=/dev/sg0 of=/dev/null bs=512 count=2m time=1
415
416 On completion this will output a line like: "time to transfer data was
417 18.779506 secs, 57.18 MB/sec". The "MB/sec" in this case is 1,000,000
418 bytes per second.
419
420 The 'of2=' option can be used to copy data and take a md5sum of it
421 without needing to re-read the data:
422
423 mkfifo fif
424 md5sum fif &
425 sg_dd if=/dev/sg3 iflag=coe of=sg3.img oflag=sparse of2=fif bs=512
426
427 This will image /dev/sg3 (e.g. an unmounted disk) and place the con‐
428 tents in the (sparse) file sg3.img . Without re-reading the data it
429 will also perform a md5sum calculation on the image.
430
432 The signal handling has been borrowed from dd: SIGINT, SIGQUIT and SIG‐
433 PIPE output the number of remaining blocks to be transferred and the
434 records in + out counts; then they have their default action. SIGUSR1
435 causes the same information to be output yet the copy continues. All
436 output caused by signals is sent to stderr.
437
439 The exit status of sg_dd is 0 when it is successful. Otherwise see the
440 sg3_utils(8) man page. Since this utility works at a higher level than
441 individual commands, and there are 'coe' and 'retries' flags, individ‐
442 ual SCSI command failures do not necessary cause the process to exit.
443
444 An additional exit status of 90 is generated if the flock flag is given
445 and some other process holds the advisory exclusive lock.
446
448 Written by Doug Gilbert and Peter Allworth.
449
451 Report bugs to <dgilbert at interlog dot com>.
452
454 Copyright © 2000-2009 Douglas Gilbert
455 This software is distributed under the GPL version 2. There is NO war‐
456 ranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR‐
457 POSE.
458
460 There is a web page discussing sg_dd at
461 http://sg.danny.cz/sg/sg_dd.html
462
463 A POSIX threads version of this utility called sgp_dd is in the
464 sg3_utils package. Another version from that package is called sgm_dd
465 and it uses memory mapped IO to speed transfers from sg devices.
466
467 The lmbench package contains lmdd which is also interesting. For moving
468 data to and from tapes see dt which is found at http://www.scsi‐
469 faq.org/RMiller_Tools/index.html
470
471 To change mode parameters that effect a SCSI device's caching and error
472 recovery see sdparm(sdparm)
473
474 See also raw(8), dd(1), ddrescue(GNU), ddpt
475
476
477
478sg3_utils-1.27 March 2009 SG_DD(8)