man pages section 1M: System Administration Commands

Exit Print View

Updated: July 2014

sg_raw (1m)


sg_raw - sends an arbitrary SCSI command to a device




SG3_UTILS                                               SG_RAW(8)

     sg_raw - sends an arbitrary SCSI command to a device

     sg_raw [OPTIONS] DEVICE CDB0 CDB1 ...

     This  utility sends an arbitrary SCSI command (between 6 and
     256 bytes) to the DEVICE. There may be  no  associated  data
     transfer;  or  data  may be read from a file and sent to the
     DEVICE; or data may be received from  the  DEVICE  and  then
     displayed  or  written  to  a file. If supported by the pass
     through, bidirectional commands may be sent (i.e. containing
     both  data  to  be  sent to the DEVICE and received from the

     The SCSI command may be between 6 and 256 bytes  long.  Each
     command byte is specified in plain hex format (00..FF) with-
     out a prefix or suffix. See EXAMPLES section below.

     The commands pass through a generic SCSI interface which  is
     implemented  for  several operating systems including Linux,
     FreeBSD and Windows.

     Arguments to long options are mandatory for short options as

     -b, --binary
          Dump  data in binary form, even when writing to stdout.

     -h, --help
          Display usage information and exit.

     -i, --infile=IFILE
          Read data from IFILE instead of stdin. This  option  is
          ignored if --send is not specified.

     -k, --skip=LEN
          Skip  the  first LEN bytes of the input file or stream.
          This option is ignored if --send is not specified.

     -n, --nosense
          Don't display SCSI Sense information.

     -o, --outfile=OFILE
          Write data received from the DEVICE to OFILE. The  data
          is written in binary. By default, data is dumped in hex
          format to stdout.  If OFILE is '-' then data is  dumped
          in  binary  to  stdout.   This  option  is  ignored  if
          --request is not specified.

sg3_utils-1.31      Last change: February 2011                  1

SG3_UTILS                                               SG_RAW(8)

     -r, --request=RLEN
          Expect to receive up to RLEN bytes  of  data  from  the
          DEVICE.  RLEN may be suffixed with 'k' to use kilobytes
          (1024 bytes) instead of bytes.

     -R, --readonly
          Open  DEVICE  read-only.  The  default  (without   this
          option) is to open it read-write.

     -s, --send=SLEN
          Read  SLEN  bytes  of data, either from stdin or from a
          file, and send them to the DEVICE.

     -t, --timeout=SEC
          Wait up to SEC seconds for command completion (default:
          20).   Note  that  if a command times out the operating
          system may start by aborting the command and if that is
          unsuccessful it may attempt to reset the device.

     -v, --verbose
          Increase  level  of  verbosity.  Can  be  used multiple

     -V, --version
          Display version and license information and exit.

     See  attributes(5)  for  descriptions   of   the   following

     |Availability   | system/storage/sg3_utils |
     |Stability      | Uncommitted              |
     The sg_inq utility can be used to send an INQUIRY command to
     a device to determine its peripheral device type  (e.g.  '1'
     for  a streaming device (tape drive)) which determines which
     SCSI command sets a device  should  support  (e.g.  SPC  and
     SSC). The sg_vpd utility probes the Vital Product Pages of a
     devices which may contain useful information.

     The ability to send more than a 16 byte CDB (in  some  cases
     12  byte  CDB)  may be restricted by the pass-through inter-
     face, the low level driver or the transport.

     These examples, apart from the last one,  use  Linux  device

sg3_utils-1.31      Last change: February 2011                  2

SG3_UTILS                                               SG_RAW(8)

     names.  For suitable device names in other supported Operat-
     ing Systems see the sg3_utils(8) man page.

     sg_raw /dev/scd0 1b 00 00 00 02 00
          Eject the medium in CD drive /dev/scd0.

     sg_raw -r 1k /dev/sg0 12 00 00 00 60 00
          Perform an INQUIRY on /dev/sg0 and  dump  the  response
          data (up to 1024 bytes) to stdout.

     sg_raw -s 512 -i i512.bin /dev/sda 3b 02 00 00 00 00 00 02
          00 00
          Showing an example of writing 512 bytes to a sector  on
          a disk is a little dangerous. Instead this example will
          read i512.bin (assumed to be 512 bytes  long)  and  use
          the  SCSI WRITE BUFFER command to send it to the "data"
          buffer (that is mode 2). This is a safe operation.

     sg_raw -r 512 -o o512.bin /dev/sda 3c 02 00 00 00 00 00 02
          00 00
          This  will use the SCSI READ BUFFER command to read 512
          bytes from the "data" buffer (i.e. mode 2)  then  write
          it to the o512.bin file.  When used in conjunction with
          the previous example, if both commands work  then  'cmp
          i512.bin o512.bin' should show a match.

file=out.bin "/dev/bsg/7:0:0:0" 53 00 00 00 00 00 00 00 01 00
     sg_raw   --infile=urandom.bin   --send=512  --request=512
          This  is  a bidirectional XDREADWRITE(10) command being
          sent via a Linux bsg device. Note that  data  is  being
          read   from   "urandom.bin"  and  sent  to  the  device
          (data-out) while resulting data (data-in) is placed  in
          the "out.bin" file. Also note the length of both is 512
          bytes which corresponds to the  transfer  length  of  1
          (block) in the cdb (i.e.  the second last byte).

     sg_raw.exe PhysicalDrive1 a1 0c 0e 00 00 00 00 00 00 e0 00
          This example is from Windows and shows  a  ATA  STANDBY
          IMMEDIATE  command  being  sent to PhysicalDrive1. That
          ATA command is contained  within  the  SCSI  ATA  PASS-
          THROUGH(12)  command  (see the SAT or SAT-2 standard at
 Notice that the STANDBY  IMMEDIATE
          command  does  not send or receive any additional data,
          however if it fails sense data should be  returned  and

     The exit status of sg_raw is 0 when it is successful. Other-
     wise see the sg3_utils(8) man page.

sg3_utils-1.31      Last change: February 2011                  3

SG3_UTILS                                               SG_RAW(8)

     Written by Ingo van Lil

     Report bugs to <inguin at gmx dot de>.

     Copyright (C) 2001-2011 Ingo van Lil
     This software is distributed under the GPL version 2.  There
     is  NO warranty; not even for MERCHANTABILITY or FITNESS FOR

     sg_inq, sg_vpd, sg3_utils (sg3_utils), plscsi

     This  software  was   built   from   source   available   at    The  original
     community       source       was       downloaded       from

     Further  information about this software can be found on the
     open        source        community        website        at

sg3_utils-1.31      Last change: February 2011                  4