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_bg_ctl sg_compare_and_write sg_decode_sense sg_format sg_get_config sg_get_elem_status 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_rep_pip sg_rep_zones sg_requests sg_rmsn sg_rtpg sg_safte sg_sanitize sg_sat_identify sg_sat_phy_event sg_sat_set_features sg_seek sg_senddiag sg_ses sg_start sg_stpg sg_stream_ctl sg_sync sg_turs sg_unmap sg_verify sg_vpd sg_wr_mode sg_write_buffer sg_write_long sg_write_same sg_write_verify sg_write_x sg_zone 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: https://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 5th June 2020