Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SG_DECODE_SENSE(8)		   SG3_UTILS		    SG_DECODE_SENSE(8)

NAME
       sg_decode_sense - decode	SCSI sense and related data

SYNOPSIS
       sg_decode_sense [--binary=BFN] [--cdb] [--err=ES] [--file=HFN] [--help]
       [--hex]	[--inhex=HFN]  [--ignore-first]	 [--json[=JO]] [--js-file=JFN]
       [--nodecode]   [--nospace]   [--status=SS]   [--verbose]	   [--version]
       [--write=WFN] [H1 H2 H3 ...]

DESCRIPTION
       This  utility takes SCSI	sense data in binary or	as a sequence of ASCII
       hexadecimal bytes and decodes it. The primary reference for the	decod-
       ing is SPC-5 ANSI INCITS	502-2020 and the most recent draft SPC-6 revi-
       sion 6 which can	be found at https://www.t10.org	and other locations on
       the internet.

       SCSI sense data is often	found in kernel	log files as a result of some-
       thing  going  wrong or may be an	informative warning. It	is often shown
       as a sequence of	hexadecimal bytes, starting with 70, 71, 72, 73, f0 or
       f1.  Sense data could be	up to 252 bytes	long  but  typically  is  much
       shorter	than  that, 18 bytes long is often seen	and is usually associ-
       ated with the older "fixed" format sense	data.

       The sense data can be provided on the command line or  in  a  file.  If
       given  on the command line the sense data should	be a sequence of hexa-
       decimal bytes separated by space. Alternatively a  file	can  be	 given
       with the	contents in binary or ASCII hexadecimal	bytes. The latter form
       can contain several lines each with none, one or	more ASCII hexadecimal
       bytes separated by space	(comma or tab).	The hash symbol	may appear and
       it and the rest of the line is ignored making it	useful for comments.

       If the --cdb option is given then rather	than viewing the given hex ar-
       guments	as sense data, it is viewed as a SCSI command descriptor block
       (CDB). In this case the command name is printed out. That name is based
       on the first hex	byte given (know as the	opcode)	and optionally on  an-
       other field called the "service action".

       Another	alternate  action is when the --err=ES is given. ES is assumed
       to be an	"exit status" value between 0 and 255 from one of  the	utili-
       ties  in	 this  package.	A descriptive string is	printed. Other options
       are ignored apart from --verbose.

       When the	--nodecode option is given, this utility may be	used  to  con-
       vert  a	binary	file  to hexadecimal or	vice versa. The	data converted
       does not	need to	be related to SCSI sense data nor CDBs.

OPTIONS
       Arguments to long options are mandatory for short options as well.

       -b, --binary=BFN
	      the data is read in binary from a	file called  BFN.  The	option
	      cannot  be  given	with --file=HFN	or --inhex=HFN as they contra-
	      dict. The	data is	assumed	to be sense data unless	the  fI--node-
	      code is given.

       -c, --cdb
	      treat  the  given	string of hex arguments	as bytes in a SCSI CDB
	      and decode the command name.

       -e, --err=ES
	      ES should	be an "exit status" value between 0 and	 255  that  is
	      available	 from the shell	(i.e. the utility's execution context)
	      after the	utility	is finished. By	default	 an  indicative	 error
	      message  is  printed  to	stdout;	and if the --verbose option is
	      given once (or an	odd number of times) then the message  is  in-
	      stead printed to stderr. If --verbose is given two or more times
	      a	longer form of the message is output. In all cases the message
	      is  less	than  128 characters long with one trailing line feed.
	      All other	command	line options and arguments are ignored.

       -f, --file=HFN
	      the sense	data is	read in	ASCII hexadecimal from a  file	called
	      HFN.   The sense data should appear as a sequence	of bytes sepa-
	      rated by space, comma, tab, hyphen or newline.  Everything  from
	      and  including a hash symbol to the end of that line is ignored.
	      If --nospace is set then no separator is	required  between  the
	      ASCII hexadecimal	digits in HFN with bytes decoded from pairs of
	      ASCII hexadecimal	digits.

       -h, --help
	      output the usage message then exit.

       -H, --hex
	      this  option is used once	in conjunction with --write=WFN	in or-
	      der to change the	output written to WFN to lines	of  ASCII  hex
	      bytes  suitable for a C language compiler. Each line contains up
	      to 16 bytes (e.g.	a line starting	with "0x3b,0x07,0x00,0xff").
	      In other cases (i.e. when	--write=WFN is not given, or this  op-
	      tion is given more than once) then the output is as described in
	      the sg3_utils(8) manpage.
	      The  combination of --inhex=HFN and this option used three times
	      can be useful to converting hexadecimal bytes (e.g. hyphen sepa-
	      rated) into a more regular form. The short option	form  is  more
	      convenient for invoking this option three	times (e.g. '-HHH').

       -i, --inhex=HFN
	      same action as --file=HFN. This option was added for compatibil-
	      ity  with	 other	utilities in this package that have a --inhex=
	      option.

       -I, --ignore-first
	      many programs that output	hex bytes (e.g.	'hexdump -C')  have  a
	      running  count (or index)	in the first column of each line. This
	      option ignores the first hexadecimal value on  each  line.  This
	      option  has  no  effect  if --binary=BFN or --nospace are	given.
	      Blank lines and any character from and after "#" on a  line  are
	      ignored. Useful with the --file=HFN and --nodecode options.

       -j[=JO],	--json[=JO]
	      output  is  in JSON format instead of plain text form. Note that
	      arguments	to the short and long form are themselves optional and
	      if present start with "="	and no whitespace is permitted	around
	      that "=".
	      See sg3_utils_json manpage or use	'?' for	JO to get a summary.

       -J, --js-file=JFN
	      output  is in JSON format	and it is sent to a file named JFN. If
	      that file	exists then it is truncated. By	default, the JSON out-
	      put is sent to stdout.
	      When this	option is given, the --json[=JO] option	is implied and
	      need not be given. The --json[=JO] option	may still be needed to
	      set the JO parameter to non-default values.

       -N, --nodecode
	      Do not decode the	given data as sense or a cdb. Useful when  ar-
	      bitrary  data  is	 given	(e.g. when converting hex to binary or
	      vice versa).

       -n, --nospace
	      expect ASCII hexadecimal to be a string  of  hexadecimal	digits
	      with  no	spaces	between	 them. Bytes are decoded by taking two
	      hexadecimal digits at a time, so an even number of digits	is ex-
	      pected. The string of hexadecimal	digits may be on  the  command
	      line  (replacing "H1 H2 H3") or spread across multiple lines the
	      HFN given	to --file=.  On	the command  line,  spaces  (or	 other
	      whitespace  characters)  between sequences of hexadecimal	digits
	      are ignored; the maximum command line hex	string is 1023 charac-
	      ters long.

       -s, --status=SS
	      where SS is a SCSI status	byte value, given in hexadecimal.  The
	      SCSI status byte is related to, but distinct from, sense data.

       -v, --verbose
	      increase the degree of verbosity (debug messages).

       -V, --version
	      output version string then exit.

       -w, --write=WFN
	      writes the sense data out	to a file called WFN. If necessary WFN
	      is  created. If WFN exists then it is truncated prior to writing
	      the sense	data to	it. If the --hex option	 is  also  given  then
	      ASCII  hex is written to WFN (see	the --hex option description);
	      otherwise	binary is written to WFN. This option is a convenience
	      and may be helpful in converting the ASCII hexadecimal represen-
	      tation of	sense data (or anything	else) into the equivalent  bi-
	      nary or a	compilable ASCII hex form.

NOTES
       Unlike  most  utilities in this package,	this utility does not access a
       SCSI device (logical unit). This	utility	accesses a library  associated
       with  this package. Amongst other things	the library decodes SCSI sense
       data.

       The sg_raw utility takes	a ASCII	hexadecimal  sequence  representing  a
       SCSI  CDB.  When	 sg_raw	is given the '-vvv' option, it will attempt to
       decode the CDB name.

       Using the option	combination: "--inhex=HFN --nodecode --write=WFN"  may
       be used to convert hexadecimal (as produced by this and other utilities
       in this package)	to binary where	the output file	is WFN.

       Unlike  many  other  utilities there is no --raw	option.	However	binary
       data can	be input using the --binary=BFN	option while binary  data  can
       be output using the --write=WFN option (in the absence of the --hex op-
       tion).

EXAMPLES
       Sense  data  is	often  printed out in kernel logs and sometimes	on the
       command line when verbose or debug flags	are given. It will be at least
       8 bytes long, often 18 bytes long but  may  be  longer.	A  sense  data
       string might look like this:

       f0 00 03	00 00 12 34 0a	00 00 00 00 11 00 00 00
       00 00

       Cut and paste it	after the sg_decode_sense command:

	 sg_decode_sense f0 00 03 00 00	12 34 0a 00 00 00 00 11	00 00 00 00 00

       and for this sense data the output should look like this:

	Fixed format, current;	Sense key: Medium Error
	Additional sense: Unrecovered read error
	 Info fld=0x1234 [4660]

       For a medium error the Info field is the	logical	block address (LBA) of
       the lowest numbered block that the associated SCSI command was not able
       to read (verify or write).

       To convert arbitrary binary data	to hex,	suitable to be parsed by other
       sg3_utils utilities. The	--nodecode option is used in this case:

	 sg_decode_sense -N -i vpd_zbdc.hex -w vpd_zbdc.bin

       The  '-HHH'  will output	hex to the console (stdout) in a form suitable
       for other utilities in this package  to	parse  as  input.  And	sg_de-
       code_sense  can	also  be  used to convert from arbitrary hex to	binary
       with:

	 sg_decode_sense -N -b vpd_zbdc.raw -HHH

       Note that tools like hexdump and	od place  a  counter  (i.e.  an	 index
       starting	at 0) at the beginning of each line which is a pain when pars-
       ing hex.	 The '/-HHH' option(s) does not	output that leading counter on
       each line.

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

AUTHORS
       Written by Douglas Gilbert.

REPORTING BUGS
       Report bugs to <dgilbert	at interlog dot	com>.

COPYRIGHT
       Copyright (C) 2010-2022 Douglas Gilbert
       This software is	distributed under a BSD-2-Clause license. There	is  NO
       warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR-
       POSE.

SEE ALSO
       sg_requests,sg_raw(sg3_utils)

sg3_utils-1.48			   May 2023		    SG_DECODE_SENSE(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sg_decode_sense&sektion=8&manpath=FreeBSD+Ports+14.3.quarterly>

home | help