1SG_DD(8)                           SG3_UTILS                          SG_DD(8)
2
3
4

NAME

6       sg_dd  -  copies  data  to  and from files and devices. Specialised for
7       devices that understand the SCSI command set.
8

SYNOPSIS

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

DESCRIPTION

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

OPTIONS

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

FLAGS

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

RETIRED OPTIONS

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

NOTES

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

EXAMPLES

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

SIGNALS

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

EXIT STATUS

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

AUTHORS

448       Written by Doug Gilbert and Peter Allworth.
449

REPORTING BUGS

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

SEE ALSO

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