NAME
mtio —
generic magnetic tape I/O
interface
SYNOPSIS
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/mtio.h>
DESCRIPTION
Magnetic tape has been the computer system backup and data transfer medium of
choice for decades, because it has historically been cheaper in cost per bit
stored, and the formats have been designed for portability and storage.
However, tape drives have generally been the slowest mass storage devices
attached to any computer system.
Magnetic tape comes in a wide variety of formats, from classic 9-track, through
various Quarter Inch Cartridge (QIC) variants, to more modern systems using
8mm video tape, and Digital Audio Tape (DAT). There have also been a variety
of proprietary tape systems, including DECtape, and IBM 3480.
UNIX TAPE I/O
Regardless of the specific characteristics of the particular tape transport
mechanism (tape drive),
UNIX tape I/O has two
interfaces: “block” and “raw”. I/O through the block
interface of a tape device is similar to I/O through the block special device
for a disk driver: the individual
read(2) and
write(2) calls can be done in any
amount of bytes, but all data is buffered through the system buffer cache, and
I/O to the device is done in 1024 byte sized blocks. This limitation is
sufficiently restrictive that the block interface to tape devices is rarely
used.
The “raw” interface differs in that all I/O can be done in arbitrary
sized blocks, within the limitations for the specific device and device
driver, and all I/O is synchronous. This is the most flexible interface, but
since there is very little that is handled automatically by the kernel, user
programs must implement specific magnetic tape handling routines, which puts
the onus of correctness on the application programmer.
DEVICE NAME CONVENTIONS
Each magnetic tape subsystem has a couple of special devices associated with it.
The block device is usually named for the driver, e.g.
/dev/st0 for unit zero of a
st(4) SCSI tape drive.
The raw device name is the block device name with an “r” prepended,
e.g.
/dev/rst0.
By default, the tape driver will rewind the tape drive when the device is
closed. To make it possible for multiple program invocations to sequentially
write multiple files on the same tape, a “no rewind on close”
device is provided, denoted by the letter “n” prepended to the
name of the device, e.g.
/dev/nst0,
/dev/nrst0.
The
mt(1) command can be used to
explicitly rewind, or otherwise position a tape at a particular point with the
no-rewind device.
FILE MARK HANDLING
Two end-of-file (EOF) markers mark the end of a tape (EOT), and one end-of-file
marker marks the end of a tape file.
By default, the tape driver will write two End Of File (EOF) marks and rewind
the tape when the device is closed after the last write.
If the tape is not to be rewound it is positioned with the head in between the
two tape marks, where the next write will over write the second end-of-file
marker.
All of the magnetic tape devices may be manipulated with the
mt(1) command.
A number of
ioctl(2) operations are
available on raw magnetic tape. Please see
<sys/mtio.h> for their definitions.
The manual pages for specific tape device drivers should list their particular
capabilities and limitations.
SEE ALSO
dd(1),
mt(1),
pax(1),
tar(1),
st(4),
wt(4)
HISTORY
The
mtio manual appeared in
4.2BSD.
BUGS
The status should be returned in a device independent format.
If and when
NetBSD is updated to deal with non-512 byte
per sector disk media through the system buffer cache, perhaps a more sane
tape interface can be implemented.