Content-type: text/html; charset=UTF-8
This utility is deprecated and has not been updated for years, only very obvious bugs will be fixed. Unless a very old version of Linux is being used (e.g. 2.4 series or earlier), then please use a utility like lsscsi(8) or the facilities offered by udev(8).
If the device file system (devfs) is present a line noting this is output. The "native" devfs scsi hierarchy makes the relationship between a sg device name and any corresponding disk, cdrom or tape device name easy to establish. This replaces the need for this command. However many applications will continue to look for Linux SCSI device names in their traditional places. [Devfs supplies a compatibility daemon called devfsd whose default configuration adds back the Linux device names in their traditional positions.
Quite often the mapping information can be derived by observing the output of the command: "sg_map". However if devices have been added since boot this can be deceptive.
In the Linux kernel 2.6 series something close to the mapping shown by this utility can be found by analysing sysfs. The main difference is that sysfs analysis will show the mapping between sg nodes and other SCSI device nodes in terms of major and minor numbers. While major 8, minor 16 will usually be /dev/sdb this is not necessarily so. Facilities associated with udev may assign major 8, minor 16 some other device node name. This version of sg_map has been extended to cope with sparse disk device node names of the form "/dev/sd<str>" where <str> can be one of [a-z,aa-zz,aaa-zzz]. See the sg_map26 utility for a more precise way (i.e. less directory scanning) for mapping between sg device names and higher level names; including finding user defined names.
This utility was written at a time when hotplugging of SCSI devices was not supported in Linux. It used a simple algorithm to scan sg device nodes in ascending numeric or alphabetical order, stopping after there were 5 consecutive errors.
In the Linux kernel 2.6 series, this utility uses sysfs to find which sg device nodes are active and only checks those. Hence there can be large "holes" in the numbering of sg device nodes (e.g. after an adapter has been removed) and still all active sg device nodes will be listed. This utility assumes that sg device nodes are named using the normal conventions and searches from /dev/sg0 to /dev/sg4095 inclusive.
In order to find which sg device name corresponds to the disk:
$ sg_map -sd
# Note: the devfs pseudo file system is present
/dev/sg0 /dev/sda
/dev/sg1
/dev/sg2
The "-x" option gives the following output:
sg_map -x
# Note: the devfs pseudo file system is present
/dev/sg0 1 0 1 0 0 /dev/sda
/dev/sg1 2 0 4 0 5 /dev/sr0
/dev/sg2 2 0 6 0 5 /dev/sr1
When a SCSI scanner is added the output becomes:
$ sg_map
# Note: the devfs pseudo file system is present
/dev/sg0 /dev/sda
/dev/sg1 /dev/sr0
/dev/sg2 /dev/sr1
/dev/sg3
By process of elimination /dev/sg3 must be the scanner.