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

NAME

6       sg_xcopy  - copy data to and from files and devices using SCSI EXTENDED
7       COPY (XCOPY)
8

SYNOPSIS

10       sg_xcopy  [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       [bpt=BPT]    [cat=0|1]    [dc=0|1]    [id_usage={hold|discard|disable}]
15       [list_id=ID]  [prio=PRIO] [time=0|1] [verbose=VERB] [--on_dst|--on_src]
16       [--verbose]
17

DESCRIPTION

19       Copy data to and from any files. Specialized for "files" that are Linux
20       SCSI devices that support the SCSI EXTENDED COPY (XCOPY) command.
21
22       During  the  draft  stages  of SPC-4 the T10 committee has expanded the
23       XCOPY command so that it now has two variants: "LID1" (for a List Iden‐
24       tifier  length of 1 byte) and "LID4" (for a List Identifier length of 4
25       bytes).  This utility supports the older, LID1 variant  which  is  also
26       found in SPC-3 and earlier.  While the LID1 variant in SPC-4 is command
27       level (binary) compatible with XCOPY as defined in SPC-3, some  of  the
28       command  naming  has  changed. This utility uses the older, SPC-3 XCOPY
29       names.
30
31       This utility has similar syntax and semantics  to  dd(1)  but  with  no
32       "conversions" is supported.
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 in combined, alphabetical order.
37
38       By default the XCOPY command is sent to OFILE. This can be changed with
39       the --on_src or iflag=xflag options which cause the XCOPY command to be
40       sent to IFILE instead. Also see the section on ENVIRONMENT VARIABLES.
41
42       The  ddpt  utility  supports the same xcopy(LID1) functionality as this
43       utility with the same options and flags. Additionally ddpt  supports  a
44       subset  of xcopy(LID4) functionality variously called "xcopy version 2,
45       lite" or ODX.  ODX is a market name and stands for Offloaded Data  Xfer
46       (i.e. transfer).
47

OPTIONS

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  logical  block
52              sizes  less that 2048 bytes, otherwise the default is 32. So for
53              bs=512 the reads and writes will each convey 64 KiB of  data  by
54              default (less if near the end of the transfer or memory restric‐
55              tions). When cd/dvd drives are accessed, the logical block  size
56              is  typically  2048  bytes  and  bpt  defaults to 32 which again
57              implies 64 KiB transfers.
58
59       bs=BS  where BS must be the logical block size of the  physical  device
60              (if  either the input or output files are accessed via SCSI com‐
61              mands). Note that this differs from dd(1) which permits BS to be
62              an integral multiple. Defaults to the device logical block size.
63
64       cat={0|1}
65              sets  the  SCSI EXTENDED COPY command segment descriptor CAT bit
66              to 0 or 1 (default: 0). The CAT bit (in conjunction with the PAD
67              bit)  controls  the  handling of residual data. See section HAN‐
68              DLING OF RESIDUAL DATA for details.
69
70       dc={0|1}
71              sets the SCSI EXTENDED COPY command segment descriptor DC bit to
72              0 or 1 (default: 0). The DC bit controls whether COUNT refers to
73              the source (dc=0) or the target (dc=1) descriptor.
74
75       conv=CONV
76              all CONV arguments are ignored.
77
78       app=APPEND
79              all APPEND arguments are ignored.
80
81       count=COUNT
82              copy COUNT blocks from IFILE to OFILE. Default  is  the  minimum
83              (IFILE  if  dc=0  or  OFILE  if dc=1) number of blocks that SCSI
84              devices report from SCSI READ CAPACITY commands  or  that  block
85              devices  (or  their  partitions)  report.  Normal  files are not
86              probed for their size. If skip=SKIP or skip=SEEK are  given  and
87              the  count  is  derived  (i.e.  not  explicitly  given) then the
88              derived count is scaled back so that the copy will  not  overrun
89              the  device.  If  the  file name is a block device partition and
90              COUNT is not given then the size of the  partition  rather  than
91              the  size of the whole device is used. If COUNT is not given (or
92              count=-1) and cannot be derived then an error message is  issued
93              and no copy takes place.
94
95       ibs=BS if given must be the same as BS given to 'bs=' option.
96
97       id_usage={hold|discard|disable}
98              sets  the SCSI EXTENDED COPY command parameter list field called
99              LIST ID USAGE to 0 if the argument is 'hold', to 2 if the  argu‐
100              ment is 'discard', or to '3' if the argument is 'disable'.
101              If  the  device  has  the  ability to hold data (as indicated by
102              "held  data  limit"  being  greater  than  zero)  then  id_usage
103              defaults to 'hold' otherwise it defaults to 'discard'.
104
105       if=IFILE
106              read  from IFILE instead of stdin. If IFILE is '-' then stdin is
107              read. Starts reading at the beginning of IFILE  unless  SKIP  is
108              given.
109
110       iflag=FLAGS
111              where  FLAGS is a comma separated list of one or more flags out‐
112              lined below.  These flags are  associated  with  IFILE  and  are
113              ignored when IFILE is stdin.
114
115       list_id=ID
116              sets  the SCSI EXTENDED COPY command parameter list field called
117              LIST IDENTIFIER to ID. ID should be a value between  0  and  255
118              (inclusive). ID usually defaults to 1 unless id_usage=disable in
119              which case it defaults to 0.
120
121       obs=BS if given must be the same as BS given to 'bs=' option.
122
123       of=OFILE
124              write to OFILE instead of stdout. If OFILE is '-' then writes to
125              stdout.   If  OFILE  is /dev/null then no actual writes are per‐
126              formed.  If OFILE is '.' (period) then it is  treated  the  same
127              way as /dev/null (this is a shorthand notation). If OFILE exists
128              then it is _not_ truncated; it is overwritten from the start  of
129              OFILE unless 'oflag=append' or SEEK is given.
130
131       oflag=FLAGS
132              where  FLAGS is a comma separated list of one or more flags out‐
133              lined below.  These flags are  associated  with  OFILE  and  are
134              ignored when OFILE is /dev/null, '.' (period), or stdout.
135
136       prio=PRIO
137              sets  the SCSI EXTENDED COPY command parameter list field called
138              PRIORITY to PRIO.  The default value is 1.
139
140       seek=SEEK
141              start writing SEEK bs-sized blocks  from  the  start  of  OFILE.
142              Default is block 0 (i.e. start of file).
143
144       skip=SKIP
145              start  reading  SKIP  bs-sized  blocks  from the start of IFILE.
146              Default is block 0 (i.e. start of file).
147
148       time={0|1}
149              when 1, times transfer and  does  throughput  calculation,  out‐
150              putting  the results (to stderr) at completion. When 0 (default)
151              doesn't perform timing.
152
153       verbose=VERB
154              as VERB increases so does the amount of  debug  output  sent  to
155              stderr.   Default  value is zero which yields the minimum amount
156              of debug output.  A value of 1 reports extra information that is
157              not  repetitive.  A  value 2 reports cdbs and responses for SCSI
158              commands that are not  repetitive  (i.e.  other  that  READ  and
159              WRITE). Error processing is not considered repetitive. Values of
160              3 and 4 yield output for all SCSI commands (and Unix read()  and
161              write() calls) so there can be a lot of output.
162
163       -h, --help
164              outputs usage message and exits.
165
166       --on_dst
167              send  the  XCOPY command to the output file/device (i.e. OFILE).
168              This is  the  default  unless  overridden  by  the  --on_src  or
169              iflag=xflag  options.  Also see the section below on ENVIRONMENT
170              VARIABLES.
171
172       --on_src
173              send the XCOPY command to the input file/device (i.e. IFILE).
174
175       -v, --verbose
176              equivalent to verbose=1. When used  twice,  equivalent  to  ver‐
177              bose=2, etc.
178
179       -V, --version
180              outputs version number information and exits.
181

FLAGS

183       Here is a list of flags and their meanings:
184
185       append causes  the  O_APPEND flag to be added to the open of OFILE. For
186              regular files this will lead to data appended to the end of  any
187              existing  data.   Cannot  be  used  together  with the seek=SEEK
188              option as they conflict.  The default action of this utility  is
189              to  overwrite  any  existing data from the beginning of the file
190              or, if SEEK is given, starting at block SEEK. Note that attempt‐
191              ing  to 'append' to a device file (e.g.  a disk) will usually be
192              ignored or may cause an error to be reported.
193
194       excl   causes the O_EXCL flag to be added to the open of  IFILE  and/or
195              OFILE.
196
197       flock  after  opening  the associated file (i.e. IFILE and/or OFILE) an
198              attempt is made to get  an  advisory  exclusive  lock  with  the
199              flock()  system  call.  The  flock  arguments  are  "FLOCK_EX  |
200              FLOCK_NB" which will cause the lock to  be  taken  if  available
201              else  a  "temporarily  unavailable"  error is generated. An exit
202              status of 90 is produced in the latter case and no copy is done.
203
204       null   has no affect, just a placeholder.
205
206       pad    sets the SCSI EXTENDED COPY command segment descriptor PAD  bit.
207              The  PAD bit (in conjunction with the CAT bit) controls the han‐
208              dling of residual data.(See section HANDLING  OF  RESIDUAL  DATA
209              for details.
210
211       xcopy  has no affect; for compatibility with ddpt.
212

HANDLING OF RESIDUAL DATA

214       The pad and cat bits control the handling of residual data. As the data
215       can be specified either in terms of source or target logical block size
216       and  both  might  have different block sizes residual data is likely to
217       happen in these cases.  If both logical block sizes are identical these
218       bits have no effect as residual data will not occur.
219
220       If  none  of  these  bits  are  set,  the EXTENDED COPY command will be
221       aborted with additional sense 'UNEXPECTED INEXACT SEGMENT'.
222
223       If only the cat bit is set the residual data will be retained and  made
224       available  for  subsequent  segment  descriptors. Residual data will be
225       discarded for the last segment descriptor.
226
227       If the pad bit is set for the source descriptor only, any residual data
228       for both source or destination will be discarded.
229
230       If  the  pad  bit  is  set  for the target descriptor only any residual
231       source data will be handled as if the cat bit is set, but any  residual
232       destination data will be padded to make a whole block transfer.
233
234       If  the  pad  bit is set for both source and target any residual source
235       data will be discarded, and  any  residual  destination  data  will  be
236       padded.
237

ENVIRONMENT VARIABLES

239       If  the command line invocation does not explicitly (and unambiguously)
240       indicate whether the XCOPY SCSI command should be sent to  IFILE  (i.e.
241       the  source)  or  OFILE (i.e. the destination) then a check is made for
242       the presence of the XCOPY_TO_SRC  and  XCOPY_TO_DST  environment  vari‐
243       ables.  If either one exists (but not both) then it indicates where the
244       SCSI XCOPY command will be sent. By default the XCOPY command  is  sent
245       to OFILE.
246

RETIRED OPTIONS

248       Here are some retired options that are still present:
249
250       append=0 | 1
251              when set, equivalent to 'oflag=append'. When clear the action is
252              to overwrite the existing file  (if  it  exists);  this  is  the
253              default.  See the 'append' flag.
254

NOTES

256       Copying  data  behind an Operating System's back can cause problems. In
257       the   case   of   Linux,   users   should   look    at    this    link:
258       http://linux-mm.org/Drop_Caches
259       This command sequence may be useful:
260         sync; echo 3 > /proc/sys/vm/drop_caches
261
262       Various  numeric  arguments (e.g. SKIP) may include multiplicative suf‐
263       fixes or be given in hexadecimal. See the "NUMERIC  ARGUMENTS"  section
264       in the sg3_utils(8) man page.
265
266       The  COUNT,  SKIP  and SEEK arguments can take 64 bit values (i.e. very
267       big numbers). Other values are limited to what can fit in a  signed  32
268       bit number.
269
270       All  informative,  warning  and  error output is sent to stderr so that
271       dd's output file can be stdout and remain unpolluted. If no options are
272       given, then the usage message is output and nothing else happens.
273
274       If  a device supports xcopy operations then it should set the 3PC field
275       (3PC stands for Third Party Copy) in  its  standard  INQUIRY  response.
276       This  utility  will attempt a xcopy operation irrespective of the value
277       in the 3PC field but if it is zero (cleared) one would expect the xcopy
278       operation to fail.
279
280       The  status  of  the  SCSI  EXTENDED  COPY  command can be queried with
281       sg_copy_results(sg3_utils)
282
283       Currently only block-to-block  transfers  are  implemented;  IFILE  and
284       OFILE must refer to a SCSI block device.
285
286       No account is taken of partitions so, for example, /dev/sbc2, /dev/sdc,
287       /dev/sg2, and /dev/bsg/3:0:0:1 would all refer to the same  thing:  the
288       whole logical unit (i.e. the whole disk) starting at LBA 0. So any par‐
289       tition indication (e.g. /dev/sdc2) is  ignored.  The  user  should  set
290       SKIP,   SEEK  and  COUNT  with information obtained from a command like
291       'fdisk -l -u /dev/sdc' to account for partitions.
292
293       XCOPY (LID1) capability has been added to the ddpt utility which is  in
294       a  package  of  the  same name. The ddpt utility will run on other OSes
295       (e.g. FreeBSD and Windows) while sg_xcopy only runs on Linux. Also ddpt
296       permits the arguments to ibs= and ibs= to be different.
297

EXAMPLES

299       Copy 2M of data from the start of one device to another:
300
301       # sg_xcopy if=/dev/sdo of=/dev/sdp count=2048 list_id=2 dc=1
302       sg_xcopy: if=/dev/sdo skip=0 of=/dev/sdp seek=0 count=1024
303       Start of loop, count=1024, bpt=65535, lba_in=0, lba_out=0
304       sg_xcopy: 1024 blocks, 1 command
305
306       Check the status of the EXTENDED COPY command:
307
308       # sg_copy_results --status --list_id=2 /dev/sdp
309       Receive copy results (copy status):
310           Held data discarded: Yes
311           Copy manager status: Operation completed without errors
312           Segments processed: 1
313           Transfer count units: 0
314           Transfer count: 0
315

SIGNALS

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

EXIT STATUS

324       The  exit  status of sg_xcopy is 0 when it is successful. Otherwise see
325       the sg3_utils(8) man page.
326
327       An additional exit status of 90 is generated if the flock flag is given
328       and some other process holds the advisory exclusive lock.
329

AUTHORS

331       Written by Hannes Reinecke and Douglas Gilbert.
332

REPORTING BUGS

334       Report bugs to <dgilbert at interlog dot com>.
335
337       Copyright © 2000-2018 Hannes Reinecke and Douglas Gilbert
338       This  software is distributed under the GPL version 2. There is NO war‐
339       ranty; not even for MERCHANTABILITY or FITNESS FOR  A  PARTICULAR  PUR‐
340       POSE.
341

SEE ALSO

343       There      is      a      web      page     discussing     sg_dd     at
344       http://sg.danny.cz/sg/sg_dd.html
345
346       A POSIX threads version  of  this  utility  called  sgp_dd  is  in  the
347       sg3_utils  package.  Another version from that package is called sgm_dd
348       and it uses memory mapped IO to speed transfers from sg devices.
349
350       The lmbench package contains lmdd which is also interesting. For moving
351       data  to  and  from  tapes  see  dt  which is found at http://www.scsi
352       faq.org/RMiller_Tools/index.html
353
354       To change mode parameters that effect a SCSI device's caching and error
355       recovery see sdparm(sdparm)
356
357       See     also    dd(1),    sg_copy_results(sg3_utils),    ddrescue(GNU),
358       ddpt,ddptctl(ddpt)
359
360
361
362sg3_utils-1.43                    August 2018                      SG_XCOPY(8)
Impressum