scsitape - control SCSI tape devices
SYNOPSIS
scsitape [-f <scsi-generic-device>] commands
DESCRIPTION
The scsitape command controls SCSI tape drives in a plat
form-independent manner. As long as 'mtx' works on the
platform, so does 'scsitape'.
Note that 'scsitape' and your OS's native tape driver may
stomp on each other. In particular, if you use 'setblk'
and your OS's native tape driver has a different notion of
the block size, you may get evil results. It is recom
mended to use 'scsitape' only for software where you've
written your own low-level READ and WRITE routines that
use the SCSI command set to directly talk to tape drives
(i.e., you do not use the OS's native tape driver at all).
OPTIONS
The first argument, given following -f , is the SCSI
generic device corresponding to your tape drive. 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 Solaris this is usually the same
as your tape drive (Solaris has a SCSI passthrough ioctl).
You can set the STAPE or TAPE environment variable rather
than use -f.
COMMANDS
setblk <n>
Set the tape drive's SCSI block size to <n>
bytes. (NOTE: if you are using your OS's native
tape driver, THIS IS EVIL!).
fsf <n> Go forward by <n> tapemarks.
bsf <n> Go to immediately previous the <n>th previous
tapemark. (WARNING: This probably doesn't do
what you expect -- e.g. if you are immediately
after a tapemark and type 'bfs 1', it moves to
immediately *before* that tape mark, for a sum
total of zero effective movement!).
eod Go to end of data.
rewind Rewind the tape drive.
eject Eject the tape currently in the drive.
all drives!).
mark <n> write <n> filemarks ( 'mark 0' flushes the
drive's buffers ).
seek <n> Seek to a logical position <n> that was reported
by a previous 'tapeinfo' command.
write <blocksize>
write blocks from stdin to the tape. Chunk the
data into <blocksize>-sized chunks. *DOES NOT
WRITE OUT A TAPEMARK!* (you will need to use a
subsequent mark 1 command to write out a tape
mark).
read [<blocksize>] [ <#blocks/#bytes> ]
read blocks from the tape, write them to stdout.
If we are in variable block mode, <blocksize>
should be zero (note: The maximum block size we
currently support in variable block mode is
128K, MAX_READ_SIZE will need to be turned into
a settable variable to allow bigger reads). If
<blocksize> is ommitted, we assume that we're in
variable block mode, and that we are going to
read from tape until we hit a tapemark or end of
partition or end of tape.
AUTHORS
This program was written by Eric Lee Green
<eric@estinc.com>. Major portions of the 'mtxl.c' library
used herein were written by Leonard Zubkoff.
The SCSI read and write routines are based upon those that
Richard Fish wrote for Enhanced Software Technology's BRU
16.1 product, substantially modified to work in our par
ticular environment (in particular, all the variable block
stuff is new since BRU only does fixed block reads and
writes, and the BRU code uses bitmasks rather than bit
fields for the various flags and such in return values, as
well as the BRU code having a different SCSI API and hav
ing variable names considerably shorter than the rather
sesquipedalian 'mtx' identifiers). As required by
'mtxl.c', these routines are licensed under the GNU Gen
eral Public License.
HINTS
Under Linux, cat /proc/scsi/scsi will tell you what SCSI
devices you have. You can then refer to them as /dev/sga,
Under FreeBSD, camcontrol devlist will tell you what SCSI
devices you have, along with which pass device controls
them.
Under Solaris 7 and 8, /usr/sbin/devfsadm -C will clean up
your /devices directory. Then find /devices -name 'st@*'
-print will return a list of all tape drives. /dev on
Solaris is apparently only of historical interest.
BUGS AND LIMITATIONS
for scsitape read 0 <n> where you are doing variable-
block-size reads and wish for <n> bytes, it instead reads
one and exactly one block from tape and prints that (no
matter what its size). Use 'dd' on the output of scsitape
if you want finer control.
scsitape read 0 attempts reads of MAX_READ_SIZE, which is
currently 128K. If blocks on tape are larger than 128K,
only the first 128K will be read -- the remainder will be
silently dumped in the toilet.
This program does not interact well (or at all :-) with
your OS's native tape driver. You will likely see weird
things happen if you attempt to intermingle scsitape com
mands with native tape driver operations. Note that BRU
16.1 for Solaris (and possibly others, but Solaris I know
about) will have a 'scsi' keyword to bypass the native
tape driver and write via direct uscsi commands, so if you
use BRU 16.1 to write your actual tape archives. (Assuming
that BRU 16.1 has been released at the time that you read
this).
AVAILABILITY
This version of scsitape is currently being maintained by
Eric Lee Green <eric@badtux.org> formerly of Enhanced
Software Technologies Inc. as part of the 'mtx' suite of
programs. The 'mtx' home page is http://mtx.source
forge.net and the actual code is currently available there
and via CVS from http://sourceforge.net/projects/mtx .
SEE ALSO
tapeinfo(1),mtx(1)
Man(1) output converted with
man2html