| 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 |