blob: 8548f18cc951f4330b72180cf0780127557768e1 [file] [log] [blame]
Please Note:
>>> Up to and including sg3_utils-1.33 the Solaris code was built
>>> and tested on an OpenSolaris VM run with VirtualBox on Ubuntu
>>> 11.10 . Now with Ubuntu 12.04 those VMs crash immediately when
>>> started with VirtualBox. Further, Oracle (who owns SUN and thus
>>> Solaris) no longer supports OpenSolaris and its package
>>> repository has been withdrawn. The author can find no generic VMs
>>> for Oracle Solaris 11 that run on VirtualBox or VMWare. The author
>>> is also displeased with the withdrawal of the Open Software
>>> OS and is disinclined to build a Solaris 11 system just to
>>> virtualize it.
>>> So as of sg3_utils-1.34 the Solaris port is provided "as-is" without
>>> testing on a Solaris platform.
Douglas Gilbert
13th October 2012
Introduction
============
The Solaris port of sg3_utils contains those utilities that are
_not_ specific to Linux.
The dd variants from the sg3_utils package (e.g. sg_dd) rely on too many
Linux idiosyncrasies to be easily ported. A new package called 'ddpt'
contains a utility with similar functionality to sg_dd and is available
for Solaris.
Supported Utilities
===================
Here is a list of utilities that have been ported:
sg_compare_and_write
sg_decode_sense
sg_format
sg_get_config
sg_get_lba_status
sg_ident
sg_inq [dropped ATA IDENTIFY DEVICE capability]
sg_logs
sg_luns
sg_modes
sg_persist
sg_opcodes
sg_prevent
sg_raw
sg_rdac
sg_read_block_limts
sg_read_buffer
sg_read_long
sg_readcap
sg_reassign
sg_referrals
sg_requests
sg_rmsn
sg_rtpg
sg_safte
sg_sanitize
sg_sat_identify
sg_sat_phy_event
sg_sat_set_features
sg_senddiag
sg_ses
sg_start
sg_stpg
sg_sync
sg_turs
sg_unmap
sg_verify
sg_vpd
sg_wr_mode
sg_write_buffer
sg_write_long
sg_write_same
Most utility names are indicative of the main SCSI command
that they execute. Some utilities are slightly higher level, for
example sg_ses fetches SCSI Enclosure Services (SES) status pages and
can send control pages. Each utility has a man page (placed in
section 8). An overview of sg3_utils can be found at:
http://sg.danny.cz/sg/sg3_utils.html .
A copy of the "sg3_utils.html" file is in the "doc" subdirectory.
The executables and library can be built from the source code in
the tarball and installed with the familiar
"./configure ; make ; make install" sequence. If this fails try
running the "./autogen.sh" script prior to that sequence. There
are generic instruction on configure and friend in the INSTALL file.
Some man pages have examples which use Linux device names which
hopefully will not confuse the Solaris users.
Device naming
=============
In Solaris, SCSI device names below the '/dev' directory have a
form like: c5t4d3s2 where the number following "c" is the controller
(HBA) number, the number following "t" is the target number (from
the SCSI parallel interface days) and the number following "d" is
the LUN. Following the "s" is the slice number which is related to
a partition and by convention "s2" is the whole disk.
OpenSolaris also has a c5t4d3p2 form where the number following
the "p" is the partition number apart from "p0" which is the whole
disk. So a whole disk may be referred to as either:
- c5t4d3
- c5t4d3s2
- c5t4d3p0
And these device names are duplicated in the /dev/dsk and /dev/rdsk
directories. The former is the block device name and the latter
is for "raw" (or char device) access which is what sg3_utils needs.
So in OpenSolaris something of the form:
sg_inq /dev/rdsk/c5t4d3p0
should work. If it doesn't add a '-vvv' option. If that is attempted
on the /dev/dsk/c5t4d3p0 variant an inappropriate ioctl for device
error will result.
The device names within the /dev directory are typically symbolic
links to much longer topological names in the /device directory.
In Solaris cd/dvd/bd players seem to be treated as disks and so are
found in the /dev/rdsk directory. Tape drives appear in the /dev/rmt
directory.
There is also a sgen (SCSI generic) driver which by default does not
attach to any device. See the /kernel/drv/sgen.conf file to control
what is attached. Any attached device will have a device name of
the form /dev/scsi/c5t4d3 .
Listing available SCSI devices in Solaris seems to be a challenge.
"Use the 'format' command" advice works but seems a very dangerous
way to list devices. [It does prompt again before doing any damage.]
'devfsadm -Cv' cleans out the clutter in the /dev/rdsk directory,
only leaving what is "live". The "cfgadm -v" command looks promising.
Details
=======
The ported utilities listed above, all use SCSI command functions
declared in sg_cmds_basic.h and sg_cmds_extra.h . Those SCSI command
functions are implemented in the corresponding ".c" files. The ".c"
files pass SCSI commands to the host operating system via an interface
declared in sg_pt.h . There are currently five implementations of that
interface depending on the host operating system:
- sg_pt_linux.c
- sg_pt_freebsd.c
- sg_pt_osf1.c [Tru64]
- sg_pt_solaris.c
- sg_pt_win32.c
The sg_pt_solaris.c file uses the "uscsi" SCSI pass through mechanism. There
seems to be no corresponding ATA pass through and recent SATA disks do not
seem to have a SAT layer in front of them (within Solaris). If SAT is
present (perhaps externally or within a HBA) then that would allow SATA
disks to accept SCSI commands including the SCSI ATA PASS THROUGH commands.
Douglas Gilbert
14th January 2013