Provided by: sg-utils_1.02-1_i386 bug


       copies data to and from sg and raw devices


       sg_dd [OPTION]...


       Copy  data  to  and from Linux SCSI generic (sg), raw devices or normal
       files.  Similar syntax and semantics to dd(1) but does not perform  any

              each IO transaction will be made using this number of blocks (or
              less if near the end of count). Default is 128.

              this must be the block size of the physical  device.  Note  that
              this  differs  from  dd(1)  which permits "bs" to be an integral
              multiple. Default is 512 which is usually correct for disks  but
              incorrect for cdroms (which normally have 2048 byte blocks).

       coe=0 | 1
              set to 1 for continue on error: if reading assume zeros read, if
              writing then ignore and continue. Only applies to errors  on  sg
              devices  (e.g.   errors  on normal files will stop sg_dd). Error
              messages are still sent to stderr.  Default  is  0  for  do  not
              continue on error

              copy  this  number  of blocks. Default is minimum number that sg
              devices return from READ CAPACITY (if that works) or 0

              if given must be the same as bs

              read from FILE instead of stdin. A file name of - is taken to be

              if given must be the same as bs

              write to FILE instead of stdout. A file name of - is taken to be

              skip BLOCKS bs-sized blocks at start of output

              skip BLOCKS bs-sized blocks at start of input

       time=0 | 1
              when  1,  times  transfer  and  does   throughput   calculation,
              outputting  the  results  (to  stderr)  at  completion.  When  0
              (default) doesn’t perform timing

       A raw device must be bound to a block device prior to using sg_dd.  See
       raw(8)  for more information about binding raw devices. To be safe, the
       sg device mapping to SCSI block devices should  be  checked  with  "cat
       /proc/scsi/scsi" before use.

       The count is only deduced for sg devices (minimum > 0 if both input and
       output are sg devices) otherwise it defaults to 0. This is for  safety!
       Raw  device partition information can often be found with fdisk(8) [the
       "-ul" argument is useful in this respect].

       BYTES and BLOCKS  may  be  followed  by  the  following  multiplicative
       suffixes:  c  C  *1;  b  B  *512;  k  *1,024; K *1,000; m *1,048,576; M
       *1,000,000; g *1,073,741,824; and G *1,000,000,000

       All informative, warning and error output is sent  to  stderr  so  that
       dd´s output file can be stdout and remain unpolluted. If no options are
       given, then the usage message is output and nothing else happens.


       Looks quite similar in usage to dd:

          sg_dd if=/dev/sg0 of=t bs=512 count=1M

       This will copy 1 million 512 byte blocks  from  the  device  associated
       with  /dev/sg0  (which should have 512 byte blocks) to a file called t.
       Assuming /dev/sda and /dev/sg0 are the same device then  the  above  is
       equivalent to:

          dd if=/dev/sda of=t bs=512 count=1000000

       although dd´s speed may improve if bs was larger and count was suitably
       reduced. Using a raw device to do something similar on a IDE disk:

          raw /dev/raw/raw1 /dev/hda
          sg_dd if=/dev/raw/raw1 of=t bs=512 count=1M

       To copy a SCSI disk partition to an IDE disk partition:

          raw /dev/raw/raw2 /dev/hda3
          sg_dd if=/dev/sg0 skip=10123456 of=/dev/raw/raw2 bs=512

       This assumes a valid partition is found on the SCSI disk at  the  given
       skip  block  address  (past  the  5 GB point of that disk) and that the
       partition goes to the end of  the  SCSI  disk.  An  explicit  count  is
       probably a safer option.


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


       Written by Doug Gilbert and Peter Allworth.


       Report bugs to <>.


       Copyright © 2000 Douglas Gilbert
       This  software  is  distributed  under  the  GPL version 2. There is NO
       warranty; not even for MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR


       A  POSIX  threads  version  of  this  command  called  sgp_dd is in the
       sg_utils package. The lmbench  package  contains  lmdd  which  is  also
       interesting.  raw(8), dd(1)