---
name: "rmt"
section: "8"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "openbsd"]
url: "https://new.carta.tech/rmt"
---

# rmt(8)

remote magtape protocol module

## NAME

**rmt** – remote magtape protocol module

## SYNOPSIS

**rmt**

## DESCRIPTION

The **rmt** utility is used by the remote dump and restore programs in manipulating a magnetic tape drive through an interprocess communication connection. It is normally started up with an [rcmd(3)](/rcmd/3.md) call.

The **rmt** utility accepts requests specific to the manipulation of magnetic tapes, performs the commands, then responds with a status indication. All responses are in ASCII and in one of two forms. Successful commands have responses of:

**A***number*\\n

*Number* is an ASCII representation of a decimal number. Unsuccessful commands are responded to with:

\\n*error-message* \\n

*Error-number* is one of the possible error numbers described in [intro(2)](/intro/2.md) and *error-message* is the corresponding error string as printed from a call to [perror(3)](/perror/3.md). The protocol is comprised of the following commands, which are sent as indicated - no spaces are supplied between the command and its arguments, or between its arguments, and ‘\\n’ indicates that a newline should be supplied:

- **O***device*

  \\n*mode*\\n Open the specified *device* using the indicated *mode*. *Device* is a full pathname and *mode* is an ASCII representation of a decimal number suitable for passing to [open(2)](/open/2.md). If a device had already been opened, it is closed before a new open is performed.

- **C***device*\\n

  Close the currently open device. The *device* specified is ignored.

- **L**

  *whence*\\n *offset*\\n Perform an [lseek(2)](/lseek/2.md) operation using the specified parameters. The response value is that returned from the [lseek(2)](/lseek/2.md) call.

- **W***count*\\n

  Write data onto the open device. The **rmt** utility reads *count* bytes from the connection, aborting if a premature end-of-file is encountered. The response value is that returned from the [write(2)](/write/2.md) call.

- **R***count*\\n

  Read *count* bytes of data from the open device. If *count* exceeds the size of the data buffer (10 kilobytes), it is truncated to the data buffer size. The **rmt** utility then performs the requested [read(2)](/read/2.md) and responds with **A***count-read*\\n if the read was successful; otherwise an error in the standard format is returned. If the read was successful, the data read is then sent.

- **I***operation*

  \\n*count*\\n Perform a MTIOCOP [ioctl(2)](/ioctl/2.md) command using the specified parameters. The parameters are interpreted as the ASCII representations of the decimal values to place in the *mt\_op* and *mt\_count* fields of the structure used in the [ioctl(2)](/ioctl/2.md) call. The return value is the *count* parameter when the operation is successful.

- **S**

  Return the status of the open device, as obtained with a MTIOCGET [ioctl(2)](/ioctl/2.md) call. If the operation was successful, an \`\`ack'' is sent with the size of the status buffer, then the status buffer is sent (in binary).

Any other command causes **rmt** to exit.

## DIAGNOSTICS

All responses are of the form described above.

## SEE ALSO

[rcmd(3)](/rcmd/3.md), [mtio(4)](/mtio/4.md), [rdump(8)](/rdump/8.md), [rrestore(8)](/rrestore/8.md)

## HISTORY

The **rmt** utility appeared in 4.2BSD.

## BUGS

People should be discouraged from using this for a remote file access protocol.
