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

NAME

6       sgm_dd  -  copies  data  to and from files and devices. Specialized for
7       devices that understand the SCSI command set  and  does  memory  mapped
8       transfers from sg devices.
9

SYNOPSIS

11       sgm_dd [bs=BS] [count=COUNT] [ibs=BS] [if=IFILE] [iflag=FLAGS] [obs=BS]
12       [of=OFILE] [oflag=FLAGS] [seek=SEEK] [skip=SKIP] [--help] [--version]
13
14       [bpt=BPT]  [cdbsz=6|10|12|16]  [dio=0|1]  [sync=0|1]  [time=0|1]  [ver‐
15       bose=VERB]
16

DESCRIPTION

18       Copy data to and from any files. Specialized for "files" that are Linux
19       SCSI generic (sg) devices and raw devices. Uses memory mapped transfers
20       on  sg devices. Similar syntax and semantics to dd(1) but does not per‐
21       form any conversions.
22
23       Will only perform memory mapped transfers when IFILE or OFILE are  SCSI
24       generic (sg) devices.
25
26       If both IFILE and OFILE are sg devices then memory mapped transfers are
27       performed on IFILE. If no other flags are specified then indirect IO is
28       performed on OFILE. If 'oflag=dio' is given then direct IO is attempted
29       on OFILE. If 'oflag=smmap' is given then shared mmap-ed IO (sharing the
30       mmap-ed  reserve  buffer  associated  with IFILE) is attempted. In both
31       latter cases if the faster IO option is not available, they  fall  back
32       to indirect IO and report this at the end of the copy.
33
34       The  first  group in the synopsis above are "standard" Unix dd(1) oper‐
35       ands. The second group are extra options added by this  utility.   Both
36       groups are defined below.
37

OPTIONS

39       bpt=BPT
40              each  IO  transaction  will be made using BPT blocks (or less if
41              near the end of the copy). Default is 128 for block  sizes  less
42              that  2048 bytes, otherwise the default is 32. So for bs=512 the
43              reads and writes will each convey 64  KiB  of  data  by  default
44              (less  if  near the end of the transfer or memory restrictions).
45              When cd/dvd drives are accessed, the  block  size  is  typically
46              2048  bytes  and  bpt  defaults to 32 which again implies 64 KiB
47              transfers.
48
49       bs=BS  where BS must be the block size of  the  physical  device.  Note
50              that  this differs from dd(1) which permits BS to be an integral
51              multiple. Default is 512 which is usually correct for disks  but
52              incorrect for cdroms (which normally have 2048 byte blocks). For
53              this utility the maximum size of each individual IO operation is
54              BS * BPT bytes.
55
56       cdbsz=6 | 10 | 12 | 16
57              size  of  SCSI  READ  and/or  WRITE commands issued on sg device
58              names.  Default is 10 byte SCSI command blocks (unless  calcula‐
59              tions  indicate  that  a 4 byte block number may be exceeded, in
60              which case it defaults to 16 byte SCSI commands).
61
62       count=COUNT
63              copy COUNT blocks from IFILE to OFILE. Default  is  the  minimum
64              (of  IFILE  and  OFILE)  number of blocks that sg devices report
65              from SCSI READ CAPACITY commands or that block devices (or their
66              partitions)  report. Normal files are not probed for their size.
67              If skip=SKIP or skip=SEEK are given and  the  count  is  derived
68              (i.e.   not  explicitly  given) then the derived count is scaled
69              back so that the copy will not overrun the device. If  the  file
70              name is a block device partition and COUNT is not given then the
71              size of the partition rather than the size of the  whole  device
72              is  used.  If  COUNT  is not given and cannot be derived then an
73              error message is issued and no copy takes place.
74
75       dio=0 | 1
76              permits direct IO to be selected  on  the  write-side  (i.e.  on
77              OFILE).   Only  allowed  when the read-side (i.e. IFILE) is a sg
78              device. When 1 there may be a "zero  copy"  copy  (i.e.  mmap-ed
79              transfer  on  the  read  into  the user space and direct IO from
80              there on the write, potentially two DMAs  and  no  data  copying
81              from the CPU). Default is 0.  The same action as 'dio=1' is also
82              available with 'oflag=dio'.
83
84       ibs=BS if given must be the same as BS given to 'bs=' option.
85
86       if=IFILE
87              read from IFILE instead of stdin. If IFILE is '-' then stdin  is
88              read.  Starts  reading  at the beginning of IFILE unless SKIP is
89              given.
90
91       iflag=FLAGS
92              where FLAGS is a comma separated list of one or more flags  out‐
93              lined  below.   These  flags  are  associated with IFILE and are
94              ignored when IFILE is stdin.
95
96       obs=BS if given must be the same as BS given to 'bs=' option.
97
98       of=OFILE
99              write to OFILE instead of stdout. If OFILE is '-' then writes to
100              stdout.  If  OFILE  is  /dev/null then no actual writes are per‐
101              formed.  If OFILE is '.' (period) then it is  treated  the  same
102              way as /dev/null (this is a shorthand notation). If OFILE exists
103              then it is _not_ truncated; it is overwritten from the start  of
104              OFILE unless 'oflag=append' or SEEK is given.
105
106       oflag=FLAGS
107              where  FLAGS is a comma separated list of one or more flags out‐
108              lined below.  These flags are  associated  with  OFILE  and  are
109              ignored when OFILE is /dev/null, '.' (period), or stdout.
110
111       seek=SEEK
112              start  writing  SEEK  bs-sized  blocks  from the start of OFILE.
113              Default is block 0 (i.e. start of file).
114
115       skip=SKIP
116              start reading SKIP bs-sized blocks  from  the  start  of  IFILE.
117              Default is block 0 (i.e. start of file).
118
119       sync=0 | 1
120              when  1,  does  SYNCHRONIZE CACHE command on OFILE at the end of
121              the transfer. Only active when OFILE is a sg device file name.
122
123       time=0 | 1
124              when 1, times transfer and  does  throughput  calculation,  out‐
125              putting  the results (to stderr) at completion. When 0 (default)
126              doesn't perform timing.
127
128       verbose=VERB
129              as VERB increases so does the amount of  debug  output  sent  to
130              stderr.   Default  value is zero which yields the minimum amount
131              of debug output.  A value of 1 reports extra information that is
132              not  repetitive.  A  value 2 reports cdbs and responses for SCSI
133              commands that are not  repetitive  (i.e.  other  that  READ  and
134              WRITE). Error processing is not considered repetitive. Values of
135              3 and 4 yield output for all SCSI commands (and Unix read()  and
136              write() calls) so there can be a lot of output.
137
138       --help outputs usage message and exits.
139
140       --version
141              outputs version number information and exits.
142

FLAGS

144       Here is a list of flags and their meanings:
145
146       append causes  the  O_APPEND flag to be added to the open of OFILE. For
147              normal files this will lead to data appended to the end  of  any
148              existing  data.   Cannot  be  used  together  with the seek=SEEK
149              option as they conflict.  The default action of this utility  is
150              to  overwrite  any  existing data from the beginning of the file
151              or, if SEEK is given, starting at block SEEK. Note that attempt‐
152              ing  to 'append' to a device file (e.g.  a disk) will usually be
153              ignored or may cause an error to be reported.
154
155       dio    is only active with oflag  (i.e.  'oflag=dio').  Its  action  is
156              described in the 'dio=1' option description above.
157
158       direct causes the O_DIRECT flag to be added to the open of IFILE and/or
159              OFILE. This flag requires some memory  alignment  on  IO.  Hence
160              user  memory buffers are aligned to the page size. Has no effect
161              on sg, normal or raw files.
162
163       dpo    set the DPO bit (disable page out) in SCSI READ and  WRITE  com‐
164              mands.  Not supported for 6 byte cdb variants of READ and WRITE.
165              Indicates that data is unlikely to be required to stay in device
166              (e.g.  disk)  cache.   May speed media copy and/or cause a media
167              copy to have less impact on other device users.
168
169       dsync  causes the O_SYNC flag to be added to the open of  IFILE  and/or
170              OFILE.  The  "d"  is  prepended  to  lower  confusion  with  the
171              'sync=0|1' option which has another action (i.e. a  synchronisa‐
172              tion to media at the end of the transfer).
173
174       excl   causes  the  O_EXCL flag to be added to the open of IFILE and/or
175              OFILE.
176
177       fua    causes the FUA (force unit access) bit to be set  in  SCSI  READ
178              and/or WRITE commands. This only has effect with sg devices. The
179              6 byte variants of the SCSI READ and WRITE commands do not  sup‐
180              port the FUA bit.  Only active for sg device file names.
181
182       null   has no affect, just a placeholder.
183
184       smmap  is  only active for oflag. It sets shared mmap IO usage on OFILE
185              if it is a sg device node. The IFILE  also  needs  to  be  a  sg
186              device node (or there is no mmap-ed reserve buffer to share).
187

RETIRED OPTIONS

189       Here are some retired options that are still present:
190
191       fua=0 | 1 | 2 | 3
192              force  unit  access  bit.  When  3, fua is set on both IFILE and
193              OFILE; when 2, fua is set on IFILE; when 1, fua is set on OFILE;
194              when 0 (default), fua is cleared on both. See the 'fua' flag.
195

NOTES

197       A  raw  device  must  be bound to a block device prior to using sgm_dd.
198       See raw(8) for more information about binding raw devices. To be  safe,
199       the sg device mapping to SCSI block devices should be checked with 'cat
200       /proc/scsi/scsi' before use.
201
202       Raw device partition information can often be found with fdisk(8)  [the
203       "-ul" argument is useful in this respect].
204
205       Various  numeric  arguments (e.g. SKIP) may include multiplicative suf‐
206       fixes or be given in hexadecimal. See the "NUMERIC  ARGUMENTS"  section
207       in the sg3_utils(8) man page.
208
209       The  count,  skip and seek parameters can take 64 bit values (i.e. very
210       big numbers). Other values are limited to what can fit in a  signed  32
211       bit number.
212
213       Data  usually  gets  to  the user space in a 2 stage process: first the
214       SCSI adapter DMAs into kernel buffers and then  the  sg  driver  copies
215       this  data  into  user memory (write operations reverse this sequence).
216       With memory mapped transfers a kernel buffer reserved by sg  is  memory
217       mapped  (see the mmap(2) system call) into the user space. When this is
218       done the second (redundant) copy from kernel buffers to user  space  is
219       not needed. Hence the transfer is faster and requires less "grunt" from
220       the CPU.
221
222       All informative, warning and error output is sent  to  stderr  so  that
223       dd's output file can be stdout and remain unpolluted. If no options are
224       given, then the usage message is output and nothing else happens.
225
226       For sg devices this utility issues SCSI READ and WRITE  (SBC)  commands
227       which  are  appropriate  for  disks  and reading from CD/DVD/BD drives.
228       Those commands are not formatted correctly for tape devices  so  sgm_dd
229       should not be used on tape devices.
230
231       This  utility  stops  the  copy  if  any error is encountered. For more
232       advanced "copy on error" logic see the sg_dd  utility  (and  its  'coe'
233       flag).
234

EXAMPLES

236       See the examples given in the man page for sg_dd(8).
237

SIGNALS

239       The signal handling has been borrowed from dd: SIGINT, SIGQUIT and SIG‐
240       PIPE output the number of remaining blocks to be  transferred  and  the
241       records  in + out counts; then they have their default action.  SIGUSR1
242       causes the same information to be output yet the copy  continues.   All
243       output caused by signals is sent to stderr.
244

EXIT STATUS

246       The exit status of sgm_dd is 0 when it is successful. Otherwise see the
247       sg3_utils(8) man page. Since this utility works at a higher level  than
248       individual  commands, and there are 'coe' and 'retries' flags, individ‐
249       ual SCSI command failures do not necessary cause the process to exit.
250

AUTHORS

252       Written by Doug Gilbert and Peter Allworth.
253

REPORTING BUGS

255       Report bugs to <dgilbert at interlog dot com>.
256
258       Copyright © 2000-2009 Douglas Gilbert
259       This software is distributed under the GPL version 2. There is NO  war‐
260       ranty;  not  even  for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR‐
261       POSE.
262

SEE ALSO

264       The simplest variant of this utility is called sg_dd.  A POSIX  threads
265       version  of this utility called sgp_dd is in the sg3_utils package. The
266       lmbench package contains lmdd which is also interesting.  raw(8), dd(1)
267
268
269
270sg3_utils-1.27                    March 2009                         SGM_DD(8)
Impressum