NAME
mtx - control SCSI media changer devices
SYNOPSIS
mtx [-f <scsi-generic-device>] [nobarcode] [invert] [noattach] command
[ command ... ]
DESCRIPTION
The mtx command controls single or multi-drive SCSI media changers such
as tape changers, autoloaders, tape libraries, or optical media
jukeboxes. It can also be used with media changers that use the
’ATTACHED’ API, presuming that they properly report the MChanger bit as
required by the SCSI T-10 SMC specification.
OPTIONS
The first argument, given following -f , is the SCSI generic device
corresponding to your media changer. Consult your operating system’s
documentation for more information (for example, under Linux these are
generally /dev/sg0 through /dev/sg15, under FreeBSD these are
/dev/pass0 through /dev/passX, under SunOS it may be a file under
/dev/rdsk).
The ’invert’ option will invert (flip) the media (for optical jukeboxes
that allow such) before inserting it into the drive or returning it to
the storage slot.
The ’noattach’ option forces the regular media changer API even if the
media changer incorrectly reported that it uses the ’ATTACHED’ API.
The ’nobarcode’ option forces the loader to not request barcodes even
if the loader is capable of reporting them.
Following these options there may follow one or more robotics control
commands. Note that the ’invert’ and ’noattach’ options apply to ALL of
robotics control commands.
COMMANDS
--version Report the mtx version number (e.g. mtx 1.2.8) and exit.
inquiry Report the product type (Medium Changer, Tape Drive, etc.),
Vendor ID, Product ID, Revision, and whether this uses the
Attached Changer API (some tape drives use this rather than
reporting a Medium Changer on a separate LUN or SCSI
address).
noattach Make further commands use the regular media changer API
rather than the _ATTACHED API, no matter what the "Attached"
bit said in the Inquiry info. Needed with some brain-dead
changers that report Attached bit but don’t respond to
_ATTACHED API.
inventory Makes the robot arm go and check what elements are in the
slots. This is needed for a few libraries like the Breece
Hill ones that do not automatically check the tape inventory
at system startup.
status Reports how many drives and storage elements are contained in
the device. For each drive, reports whether it has media
loaded in it, and if so, from which storage slot the media
originated. For each storage slot, reports whether it is
empty or full, and if the media changer has a bar code, MIC
reader, or some other way of uniquely identifying media
without loading it into a drive, this reports the volume tag
and/or alternate volume tag for each piece of media. For
historical reasons drives are numbered from 0 and storage
slots are numbered from 1.
load <slotnum> [ <drivenum> ]
Load media from slot <slotnum> into drive <drivenum>. Drive 0
is assumed if the drive number is omitted.
unload [<slotnum>] [ <drivenum> ]
Unloads media from drive <drivenum> into slot <slotnum>. If
<drivenum> is omitted, defaults to drive 0 (as do all
commands). If <slotnum> is omitted, defaults to the slot
that the drive was loaded from. Note that there’s currently
no way to say ’unload drive 1’s media to the slot it came
from’, other than to explicitly use that slot number as the
destination.
[eepos <operation>] transfer <slotnum> <slotnum>
Transfers media from one slot to another, assuming that your
mechanism is capable of doing so. Usually used to move media
to/from an import/export port. ’eepos’ is used to
extend/retract the import/export tray on certain mid-range to
high end tape libraries (if, e.g., the tray was slot 32, you
might say say ’eepos 1 transfer 32 32’ to extend the tray).
Valid values for eepos <operation> are 0 (do nothing to the
import/export tray), 1, and 2 (what 1 and 2 do varies
depending upon the library, consult your library’s SCSI-level
documentation).
[eepos <operation>] [invert] [invert2] exchange <slotnum> <slotnum>
[<slotnum>]
Move medium from the first slot to the second slot, placing
the medium currently in the second slot either back into the
first slot or into the optional third slot.
first [<drivenum>]
Loads drive <drivenum> from the first slot in the media
changer. Unloads the drive if there is already media in it
(note: you may need to eject the tape using your OS’s tape
control commands first). Note that this command may not be
what you want on large tape libraries -- e.g. on Exabyte 220,
the first slot is usually a cleaning tape. If <drivenum> is
omitted, defaults to first drive.
last [<drivenum>]
Loads drive <drivenum> from the last slot in the media
changer. Unloads the drive if there is already a tape in it.
(Note: you may need to eject the tape using your OS’s tape
control commands first).
next [<drivenum>]
Unloads the drive and loads the next tape in sequence. If the
drive was empty, loads the first tape into the drive.
position <slotnum>
Positions the robot at a specific slot. Needed by some
changers to move to and open the import/export, or mailbox,
slot.
AUTHORS
The original ’mtx’ program was written by Leonard Zubkoff and
extensively revised for large multi-drive libraries with bar code
readers by Eric Lee Green <eric@badtux.org>. See ’mtx.c’ for other
contributors.
BUGS AND LIMITATIONS
You may need to do a ’mt offline’ on the tape drive to eject the tape
before you can issue the ’mtx unload’ command. The Exabyte EZ-17 and
220 in particular will happily sit there snapping the robot arm’s claws
around thin air trying to grab a tape that’s not there.
For some Linux distributions, you may need to re-compile the kernel to
scan SCSI LUN’s in order to detect the media changer. Check
/proc/scsi/scsi to see what’s going on.
If you try to unload a tape to its ’source’ slot, and said slot is
full, it will instead put the tape into the first empty slot.
Unfortunately the list of empty slots is not updated between commands
on the command line, so if you try to unload another drive to a full
’source’ slot during the same invocation of ’mtx’, it will try to
unload to the same (no longer empty) slot and will urp with a SCSI
error.
This program reads the Mode Sense Element Address Assignment Page
(SCSI) and requests data on all available elements. For larger
libraries (more than a couple dozen elements) this sets a big
Allocation_Size in the SCSI command block for the
REQUEST_ELEMENT_STATUS command in order to be able to read the entire
result of a big tape library. Some operating systems may not be able to
handle this. Versions of Linux earlier than 2.2.6, in particular, may
fail this request due to inability to find contiguous pages of memory
for the SCSI transfer (later versions of Linux ’sg’ device do scatter-
gather so that this should no longer be a problem).
The eepos command remains in effect for all further commands on a
command line. Thus you might want to follow eepos 1 transfer 32 32 with
eepos 0 as the next command (which clears the eepos bits).
Need a better name for ’eepos’ command! (’eepos’ is the name of the bit
field in the actual low-level SCSI command, and has nothing to do with
what it does).
This program has only been tested on Linux with a limited number of
tape loaders (a dual-drive Exabyte 220 tape library, with bar-code
reader and 21 slots, an Exabyte EZ-17 7-slot autoloader, and a Seagate
DDS-4 autochanger with 6 slots). It may not work on other operating
systems with larger libraries, due to the big SCSI request size.
Please see the projecdt page http://sourceforge.net/projects/mtx for
information on reporting bugs, requesting features and the mailing list
for peer support.
HINTS
Under Linux, cat /proc/scsi/scsi will tell you what SCSI devices you
have. You can then refer to them as /dev/sga, /dev/sgb, etc. by the
order they are reported.
Under FreeBSD, camcontrol devlist will tell you what SCSI devices you
have, along with which pass device controls them.
Under Solaris, set up your ’sgen’ driver so that it’ll look for tape
changers (see /kernel/drv/sgen.conf and the sgen man page), type touch
/reconfigure then reboot. You can find your changer in /devices by
typing /usr/sbin/devfsadm -C to clean out no-longer-extant entries in
your /devices directory, then find /devices -name \∗changer -print to
find the device name. Set the symbolic link /dev/changer to point to
that device name (if it is not doing so already).
With BRU, set your mount and unmount commands as described on the BRU
web site at http://www.bru.com to move to the next tape when backing up
or restoring. With GNU tar, see mtx.doc for an example of how to use
tar and mtx to make multi-tape backups.
AVAILABILITY
This version of mtx is currently being maintained by Robert Nelson
<robertnelson@users.sourceforge.net> . The ’mtx’ home page is
http://mtx.sourceforge.net and the actual code is currently available
there and via SVN from http://sourceforge.net/projects/mtx.
SEE ALSO
mt(1),loaderinfo(1),tapeinfo(1),scsitape(1),scsieject(1)
MTX1.3