Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ tape(HW) — OpenDesktop 1.1.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

backup(ADM)

xbackup(ADM)

cpio(C)

dd(C)

format(C)

tape(C)

tar(C)

restore(ADM)

xrestore(ADM)

TAPE(HW)


     TAPE(HW)                             UNIX System V



     Name
          tape - magnetic tape device


     Description
          The tape device implements the UNIX interface  with  a  tape
          drive.  QIC-02 cartridge tape drives are supported by the ct
          device driver, QIC-40 and QIC-80 tape  drives  connected  to
          the  floppy disk controller are supported with the ft device
          driver, and Irwin tape drives connected to the  floppy  disk
          controller   are   supported  with  the  mc  device  driver.
          Typically,  the   tar(C),   cpio(C),   dd(C),   backup(ADM),
          xbackup(ADM),  xrestore(ADM),  or  restore(ADM) commands are
          used to access a tape drive.

          A single tape drive with  a  raw  (character,  non-blocking)
          interface  is  supported,  except  for  the SCSI tape driver
          which supports up to four devices.  There are four  standard
          tape  device types. Devices beginning with the ``r'' prefix,
          (for ``raw device''), should be used for  most  normal  tape
          work,  while devices with the ``n'' prefix, (``for no rewind
          on  hold''),  should  be  used  for  storing  and  restoring
          multiple files.  Devices beginning with the ``x'' prefix are
          control  devices,  which  are  used  for  sending   ioctl(S)
          commands to the tape subsystem.

          Devices beginning with the ``e''  prefix  (for  ECC  device)
          support  a  2/64  error  recovery scheme.  Thus two 512-byte
          blocks out of every 64 blocks can be bad and the driver will
          correct  the  errors.   This software ECC support provides a
          high degree of error recovery.

          The ft and mc floppy tape drivers do not support  the  ``n''
          or  ``e''  device  types.   ECC  encoding  and  decoding  is
          automatically used with the standard ``r'' device.   On  the
          QIC-40,  QIC-80 and Irwin 80MB drives, for every 29K written
          to the tape, 3K of ECC data is written with  it  to  provide
          error  recovery.   On  the Irwin 10, 20, 40 and 60MB drives,
          for every 16K written  to  the  tape,  2K  of  ECC  data  is
          written.

          QIC-40 and QIC-80 tapes must be formatted with  the  tape(C)
          command  before  use,  unless  you  use pre-formatted tapes.
          Similarly, Irwin tapes must be first servo-written and  then
          formatted  with  tape(C)  before  use,  unless  you use pre-
          formatted tapes.  The mc driver can read tapes formatted and
          written under UNIX but cannot write to them.

          The following table summarizes the base  naming  conventions
          for the tape drives supported:

               ct0,1          QIC24 unit 0,1
               ct2,3          QIC11 unit 0,1
               Stp0,1,2,3     SCSI tape unit 0,1,2,3
               ft0            QIC-40 or QIC-80 floppy tape unit
               mc0            Irwin floppy tape unit
               ctmini         default mini-cartridge device
               mt0,1          reel to reel unit 0,1 1600 bpi
               mt2,3          reel to reel unit 0,1 800 bpi
               mt4,5          reel to reel unit 0,1 6250 bpi

          The  default   tape   device   is   stored   in   the   file
          /etc/default/tape,   which   is   also   used   by  tape(C).
          /etc/default/tape should always contain the ``x''  (control)
          device  name  of the default device, and is normally updated
          by mkdev(ADM) tape.  If the default  device  is  an  QIC-40,
          QIC-80  or Irwin tape drive, the appropriate device from the
          table above will be linked to the ctmini device node.   QIC-
          02  tape  drives will always be accessed by the ct0,1 device
          nodes as shown in the  table.   If  a  SCSI  tape  drive  is
          installed as the default device and there is no QIC-02 drive
          installed, it will be linked to the  ct0  device  node.   If
          both  SCSI  and QIC-02 drives are installed, the SCSI device
          node cannot be linked to the ct0 device node.

          tape(C) describes the commands used to access tape drives.


     Definition of ioctl commands
          The following ioctl commands can be used  with  the  various
          tape  device  drivers  supported  under  UNIX.   The letters
          following each description indicate  which  drivers  support
          each ioctl command:

               A    All drivers
               C    QIC-02 cartridge tape driver
               S    SCSI tape driver
               F    QIC-40 and QIC-80 mini-cartridge tape drivers
               I    Irwin mini-cartridge tape driver


          MT_STATUS
          Returns a device-independent structure holding the status of
          the   drive.    The   tape_info   structure  is  defined  in
          /usr/include/sys/tape.h.  (C,S,F)

          MT_DSTATUS
          Returns  a   device-dependent   structure   holding   status
          information of the drive.  (C,S,F)

          MT_RESET
          Resets the driver software and the tape  drive.   Interrupts
          tape commands in progress.  (C,S,F)

          MT_REPORT
          Returns an integer code which determines the type of  device
          which  the driver controls.  The type numbers are defined in
          /usr/include/sys/tape.h.  (C,S,F)

          MT_RETEN
          Winds the tape forward to EOT  and  then  backward  to  BOT.
          (C,S,F)

          MT_REWIND
          Rewinds the tape to BOT.  (C,S,F)

          MT_ERASE
          Erases the data on the tape and  retensions  the  cartridge.
          (C,S,F)

          MT_AMOUNT
          Returns an integer count of the  amount  of  the  last  data
          transfer.  (C,S,F)

          MT_FORMAT
          Formats the tape.  Expects as  an  argument  the  number  of
          tracks  to  format,  which  must  be  an even number.  If no
          argument is provided, the default is 20  tracks  for  QIC-40
          drives, and 28 tracks for QIC-80 drives.  (F)

          MT_GETHDR
          Expects as an argument a pointer to a  struct  ft_header  or
          struct  ir_header  and copies the header of the current tape
          into it.  (F)

          MT_PUTHDR
          Takes a pointer to a struct ft_header  or  struct  ir_header
          and  writes  it  onto the tape.  This command should be used
          with caution.  (F)

          MT_GETNEWBB
          Takes a pointer to a struct ft_newbbt  or  struct  ir_newbbt
          and  copies  in  a  list  of bad blocks detected on the last
          write operation.  (F)

          MT_PUTNEWBB
          Takes a pointer to a struct ft_newbbt or  struct  ir_newbbt,
          reads  in  the  header  from the tape, then writes a new bad
          block onto the  tape  with  the  new  bad  blocks  from  the
          provided bad block table.  (F)

          MT_GETVTBL
          Takes a pointer to a struct ft_vtbl and copies in the volume
          table from the tape.  (F)

          MT_PUTVTBL
          Takes a pointer to a struct ft_vtbl and  writes  the  volume
          table  onto  the  tape.   This  command  should be used with
          caution.  (F)

          MT_RFM
          Winds the tape forward to the next file mark.  (C,S)

          MT_WFM
          Writes a file mark at the  current  location  on  the  tape.
          (C,S)

          MT_LOAD
          On devices which are capable of doing  so,  loads  the  tape
          into the drive.  (S)

          MT_UNLOAD
          On devices which are capable of doing so, unloads  the  tape
          from the drive.  (S)


     Irwin-specific ioctl Interface
          Device specific  functions  of  the  Irwin  tape  drive  are
          accessed  via  special  commands  passed to the Irwin driver
          using the ioctl()  interface.   An  Irwin  driver  interface
          library  is  available.   This  library  provides  a  system
          independent  interface  to  ioctl()  via  the  entry   point
          mcioctl():

          #include "mc.h"

          int mcioctl(fh, cmd, arg)
          int fh;        /* File handle from open() */
          int cmd;       /* MCCTL_* command code */
          void *arg;     /* Additional argument pointer */

          mcioctl(fh, MCCTL_NOP, NULL)
          mcioctl(fh, MCCTL_VERSION, verbuf)
          mcioctl(fh, MCCTL_CAPACITY, capp)
          mcioctl(fh, MCCTL_LSEEK, lskbuf);
          mcioctl(fh, MCCTL_REWIND)
          mcioctl(fh, MCCTL_RETEN)
          mcioctl(fh, MCCTL_REWIND_NW)
          mcioctl(fh, MCCTL_RETEN_NW)
          mcioctl(fh, MCCTL_GETDRVCFG, cfgbuf)
          mcioctl(fh, MCCTL_GETCFG, cfgbuf)
          mcioctl(fh, MCCTL_SETCFG, cfgbuf)
          mcioctl(fh, MCCTL_GETTHDR, hdrbuf)
          mcioctl(fh, MCCTL_PUTTHDR, hdrbuf)
          mcioctl(fh, MCCTL_GETDLISTS, listbuf)
          mcioctl(fh, MCCTL_FLUSH)
          mcioctl(fh, MCCTL_FORMAT, fmtbuf)
          mcioctl(fh, MCCTL_FMTSTAT, fmtbuf)
          mcioctl(fh, MCCTL_ABORT)
          mcioctl(fh, MCCTL_DEVSTAT, dstatp)
          mcioctl(fh, MCCTL_GETERCTL, erctlp)
          mcioctl(fh, MCCTL_SETERCTL, erctlp)
          mcioctl(fh, MCCTL_GETER, ierrp)
          struct mcver *verbuf;    /* version buffer */
          long *capp;              /* capacity in bytes */
          struct mclseek *lskbuf;  /* tape logical position descriptor */
          struct mccfg *cfgbuf;    /* configuration buffer */
          char *hdrbuf;            /* 1024 byte header buffer */
          unsigned short * listbuf; /* 2048 byte defect list buffer */
          struct mcfmt *fmtbuf;    /* format control/status buffer */
          unsigned short *dstatp;  /* device status word */
          unsigned short *erctlp;  /* error control word */
          unsigned short *ierrp;   /* device specific error */

          mcioctl() provides system independent ioctl interface to the
          Irwin driver.  This subroutine is essentially a pass-trough.
          That is, arguments are passed  through  to  ioctl().   If  a
          device  specific  error occurs (i.e., a non-system error) at
          completion of the system ioctl() and the  command  is  other
          than   MCCTL_NOP   or   MCCTL_VERSION,   mcioctl()  executes
          ioctl(MCCTL_GETER) to retrieve the device specific error.

          The following ioctl commands are  available  for  the  Irwin
          driver:

          MCCTL_NOP
               No operation.  The  argument  is  ignored.   A  success
               status is returned.  This command may be used as an aid
               in determining if a  special  file  refers  to  the  MC
               driver.

          MCCTL_VERSION
               Gets driver version information.  The argument  is  the
               address of version information buffer (see struct mcver
               in /usr/include/sys/mc.h) to which the driver writes.

          MCCTL_CAPACITY
               Gets a tape's capacity in bytes. The  argument  is  the
               address of a long integer.

          MCCTL_REWIND
          MCCTL_RETEN
          MCCTL_REWIND_NW
          MCCTL_RETEN_NW
               These four commands physically  position  the  tape  at
               high  speed.   MCCTL_RETEN  and  MCCTL_RETEN_NW run the
               tape  to  the  early  warning  hole  first.   All  four
               commands  return  the  tape  to  the  load-point  hole.
               MCCTL_REWIND_NW and MCCTL_RETEN_NW start a request  but
               don't wait for completion.

          MCCTL_GETDRVCFG
          MCCTL_GETCFG
          MCCTL_SETCFG
               These three commands provide  access  to  configuration
               parameters for a particular a mini cartridge tape unit.
               The structure  of  these  parameters  is  struct  mccfg
               (defined  in  /usr/include/sys/mc.h) This structure has
               driver, tape drive, and cartridge related fields.  Both
               MCCTL_GETDRVCFG  and  MCCTL_GETCFG  copies the driver's
               the MCCFG  structure  to  the  caller's  buffer.   When
               MCCTL_GETDRVCFG  is  used,  struct  mccfg  members with
               driver and tape drive related fields are returned.   No
               error  is  given  when  a  cartridge  is  absent.  When
               MCCTL_GETCFG  is  used  successfully,  all  fields  are
               returned  with  valid data.  An error is returned if no
               cartridge is present.  MCCTL_SETCFG allows  the  caller
               to adjust certain fields in the driver's configuration.

          MCCTL_GETTHDR
          MCCTL_PUTTHDR
               MCCTL_GETTHDR and MCCTL_PUTTHDR read and write the 1024
               byte  tape header in block 0.  MCCTL_PUTTHDR assumes an
               Irwin style header.  The  the  following  procedure  is
               used to write the header:
                  Tape block 0 is read to a buffer.  The caller's 1024
                  byte  header  buffer  is copied to the first, fifth,
                  and when space permits,  the  ninth  and  thirteenth
                  1024-byte sectors in the buffer.  When the cartridge
                  format uses ECC  (i.e.,  other  than  110  cartridge
                  format), the header's ECC in use field is set.  When
                  the cartridge format uses ECC, ECC  is  encoded.   A
                  check  sum is calculated for the buffer.  The buffer
                  is written back to block 0.  Block 0 is  reread  and
                  the cartridge state is redetermined.  A new checksum
                  is calculated and compared against the original.

          MCCTL_GETDLISTS
               Returns lists used by  the  driver's  flaw  management.
               The  caller  gives  the address of a buffer which is at
               least 2 KB in length.  Four lists  are  copied  to  the
               buffer.   Each list is comprised of physical tape block
               numbers  stored  as   unsigned   short   integers   and
               terminated  with  the  value  0xffff.   The  lists  are
               contiguous and given in the following order:
                   Primary Defect List (PDL)
                   Working Defect List (WDL)
                   Grown Defect List (GDL)
                   Relocation List (RL)

          MCCTL_FLUSH
               Flushes dirty  buffers  to  tape.   MCCTL_FLUSH  forces
               dirty buffers in the Irwin driver's cache to be written
               to tape.  The pointer  argument  is  ignored.   Control
               returns    when   data   is   written.    Buffers   are
               automatically flushed upon a close() or when the device
               is  idle  for  a  certain  period  (see mc_autoflush in
               struct mccfg in /usr/include/sys/mc.h).

          MCCTL_FORMAT
          MCCTL_FMTSTAT
               MCCTL_FORMAT  starts  a  erase,   servo-format-certify-
               initialize   header   or  re-certify  operations.   The
               argument  is  the  address   of   struct   mcfmt   (see
               /usr/include/sys/mc.h).       Formatting     operations
               performed depend upon the  values  in  the  structure's
               fm_cmd   and   fm_option   fields,   and  struct  mccfg
               mc_cartstate  field.   When  an  MCCTL_FORMAT   command
               completes   successfully,   MCCTL_FMTSTAT  is  used  to
               determine the progress (when a no-wait flag is set)  or
               results     of    formatting.     Like    MCCTL_FORMAT,
               MCCTL_FMTSTAT also  uses  the  struct  mcfmt  structure
               (typically the same one passed to MCCTL_FORMAT).

          MCCTL_ABORT
               Used to interrupt and terminate operations  started  by
               MCCTL_FORMAT.  The pointer argument is ignored. Control
               returns after formatting has terminated.

          MCCTL_DEVSTAT
               Returns a 16-bit device  status  word  to  an  unsigned
               short  integer  who's  address  is  passed in the third
               argument of ioctl().  This field is intended for use by
               applications  which  use  the tape drive interactively.
               The status  bits  are  defined  in  struct  mclseek  in
               /usr/include/sys/mc.h.

          MCCTL_GETERCTL
          MCCTL_SETERCTL
               MCCTL_GETERCTL  and  MCCTL_SETERCTL  give   application
               access  to  the state of and control over certain error
               mechanisms.  The argument is the address  of  a  16-bit
               error  control  variable  which the Irwin driver writes
               with current values for MCCTL_GETERCTL  and  reads  for
               MCCTL_SETERCTL.   Certain  flags may or may not have an
               effect depending on the implementation. Bit values  for
               the    error    control   variable   are   defined   in
               /usr/include/sys/mc.h.

          MCCTL_GETER
               Gets device specific error: IE_*.  In general the value
               0  is returned to indicate success or -1 to indicate an
               error.  When mcioctl() returns the value -1,  an  error
               has  occurred.   The  error  condition  may  have  been
               detected in the operating system or in the driver.   In
               order  to  discriminate  the origin the global _mcerrno
               should be examined first  (before  errno).   When  non-
               zero, the error was returned by the driver.  Values for
               _mcerrno are defined in /usr/include/ierrno.h  with  an
               IE_ prefix.


     Irwin Drive and Cartridge Models
          This  section  is  concerned  with  Irwin  tape  drives  and
          cartridges supported.

        Drive Models
          Many Irwin mini cartridge drives have a  three  digit  model
          number.  Each  digit  has  a  meaning.  The high order digit
          encodes the form factor and cabinetry:

           1xx   5-1/4 inch drive (mounted in system cabinet).
           2xx   3-1/2 inch drive (mounted in system cabinet).
           3xx   5-1/4 inch drive in a metal cabinet w/ power supply.
           4xx   3-1/2 inch drive in a plastic cabinet (no supply).
           7xx   3-1/2 inch drive in a metal cabinet w/ power supply.

          The middle digit  gives  the  approximate  capacity,  in  10
          Megabyte  units  for  a  standard  capacity (not extra long)
          tape:

                               x1x   10 Megabytes
                               x2x   20
                               x4x   40
                               x6x   60
                               x8x   80

          The low digit encodes the drive's normal data transfer  rate
          (i.e., the floppy controller data clock rate).

                           xx0   250 Kilobits/Second
                           xx5   500 Kilobits/Second
                           xx7   1 Megabit/Second

          In addition, a new 4-digit model numbering system is in use.
          These  model  numbers  are  associated with drives which are
          adaptable to different  system  hardware  environments  with
          accessory hardware kits.

            2020   3-1/2 inch, 20 Megabyte, 250 Kilobits/Second
            2040   3-1/2 inch, 40 Megabyte, 500 Kilobits/Second
            2080   3-1/2 inch, 80/120 Megabyte, 500 Kilobits/Second
            2120   3-1/2 inch, 80/120 Megabyte, 1 Megabit/Second

        Mini Cartridges
          There are three primary physical mini cartridges types:

           DC1000   185 feet of 0.150 inch wide tape (same as TC-200)
           DC2000   205 feet of 0.250 inch wide tape (same as TC-400)
           DC2120   307.5 feet of 0.250 inch wide tape

          The DC1000 cartridge is physically thinner than  DC2000  and
          DC2120  cartridges.   The  DC2000  and  DC2120 have the same
          physical form but the  DC2120  has  a  longer  tape.   These
          cartridges are distinguished by there labels.  Each physical
          cartridge type has at least two cartridge formats:

     ___________________________________________________________________________
    |                 Mini (Irwin) Cartridge Format Parameters                 |
    |_______|__________|________|________|______|________|____________|________|
    |       |  AccuTrak|        |        |      |        |   Sectors  |        |
    | Cart- |  Reorder |  Cart- |  Total |      |  Blocks|     per    |  Dens- |
    | ridge |  Number  |  ridge |  Tape  |  Trks|  per   |    Block   |  ity   |
    | Format|  see note|        |  Blocks|      |  Track |  Data|  ECC|  (FTPI)|
    |_______|__________|________|________|______|________|______|_____|________|
    | 110   |  1000-10 |  DC1000|  1264  |  8   |  158   |  8   |  0  |  6400  |
    | 120   |  2000-20 |  DC2000|  1190  |  14  |  85    |  16  |  2  |  6400  |
    | 120XL |  2000-30 |  DC2120|  1792  |  14  |  128   |  16  |  2  |  6400  |
    | 125   |  1000-20 |  DC1000|  1320  |  12  |  110   |  16  |  2  |  10000 |
    | 145   |  2000-40 |  DC2000|  2480  |  20  |  124   |  16  |  2  |  10000 |
    | 145XL |  2000-60 |  DC2120|  3720  |  20  |  186   |  16  |  2  |  10000 |
    | 165   |  2000-64 |  DC2000|  3936  |  24  |  164   |  16  |  2  |  13200 |
    | 285   |  2000-80 |  DC2000|  2752  |  32  |  86    |  29  |  3  |  11600 |
    | 285XL |  2000-120|  DC2120|  4160  |  32  |  130   |  29  |  3  |  11600 |
    |_______|__________|________|________|______|________|______|_____|________|

               Notes:    The  suffix  part  of  the  AccuTrak  Reorder
                         Number  is  an approximate cartridge capacity
                         in Megabytes.

                        All formats use 1024 byte MFM encoded sectors.

        _______________________________________________________________
       |   Drive Read/Write Compatibility for Mini Cartridge Formats  |
       |______________________________________________________________|
       |                    Drive Model (See Note)                    |
       |_______|_____|______|_____|______|_____|______|______|________|
       |       |     |  2020|     |  2040|     |      |      |        |
       |       |     |  720 |  725|  745 |     |      |      |        |
       |       |     |  420 |  425|  445 |  765|  2080|  2120|        |
       | Cart- |  410|  320 |  325|  345 |  465|  785 |  787 |        |
       | ridge |  310|  220 |  225|  245 |  265|  485 |  487 |  Cart- |
       | Format|  110|  120 |  125|  145 |  165|  285 |  287 |  ridge |
       |_______|_____|______|_____|______|_____|______|______|________|
       | 110   |  rw |  rw  |  r- |  r-  |  r- |  r-  |  r-  |  DC1000|
       | 120   |  -- |  rw  |  -- |  r-  |  r- |  r-  |  r-  |  DC2000|
       | 120XL |  -- |  rw  |  -- |  r-  |  r- |  r-  |  r-  |  DC2120|
       | 125   |  -- |  --  |  rw |  rw  |  r- |  r-  |  r-  |  DC1000|
       | 145   |  -- |  --  |  -- |  rw  |  r- |  r-  |  r-  |  DC2000|
       | 145XL |  -- |  --  |  -- |  rw  |  r- |  r-  |  r-  |  DC2120|
       | 165   |  -- |  --  |  -- |  --  |  rw |  r-  |  r-  |  DC2000|
       | 285   |  -- |  --  |  -- |  --  |  -- |  rw  |  rw  |  DC2000|
       | 285XL |  -- |  --  |  -- |  --  |  -- |  rw  |  rw  |  DC2120|
       |_______|_____|______|_____|______|_____|______|______|________|

              Key:

                   r     Drive reads cartridge format

                   w     Drive writes cartridge format

                   -     Incompatible: When a cartridge  is  formatted
                         but  incompatible for reading or writing, the
                         driver reports that the cartridge  is  either
                         incompatible or erased.

        Extra Long (XL) DC2120 Cartridge Compatibility
          Extra long (i.e., DC2120) cartridges are  incompatible  with
          the  following  drives  as  the  drive  will  not physically
          accommodate the cartridge:  110, 310, 410,  125,  225,  325,
          425, and 725

          Even though DC2120 cartridges are physically accepted in the
          following drives, they may not be formattable:

          120, 220, 320, 420, 720, 2020, 145, 245, 345, 445, 745, 2040

          Drives manufactured previous to about 1989  don't  recognize
          the longer tape.  However, the MC driver is able to read and
          write preformated extra long tapes in these drives,  but  it
          is  unable to correctly format them.  Formatting will start,
          but terminate  in  error.   To  determine  whether  a  drive
          supports  formatting  of  DC2120  cartridges,  use the mcart
          utility.  If the command mcart drive reports  a  drive  type
          with  the  suffix  XL,  formatting  of  DC2120 cartridges is
          supported.


     Files
          /dev/rStp0    /dev/rct0    /dev/erct0     /dev/rmc1
          /dev/nrStp0   /dev/nrct0   /dev/xct0      /dev/mcdaemon
          /dev/xStp0    /dev/rct2    /dev/rctmini
          /dev/rft0     /dev/nrct2   /dev/xctmini
          /dev/xft0     /dev/xct0    /dev/rmc0

          Include files:

          /usr/include/sys/tape.h
          /usr/include/sys/ct.h
          /usr/include/sys/ft.h
          /usr/include/sys/ir.h
          /usr/include/sys/mc.h
          /usr/include/sys/mcheader.h


     Notes
          After certain  tape  operations  are  executed,  the  system
          returns a prompt before the tape controller has finished its
          operation.  If the user  enters  another  tape  command  too
          quickly,  a ``device busy'' error is returned until the tape
          device is finished with its previous operation.

          Periodic tape cartridge retensioning and tape head  cleaning
          are necessary for continued error-free operation of the tape
          subsystem.  Use tape(C) to retension the tape.


     See Also
          backup(ADM),  xbackup(ADM),   cpio(C),   dd(C),   format(C),
          tape(C), tar(C), restore(ADM), xrestore(ADM)


     (printed 4/27/90)                                   TAPE(HW)



















































Typewritten Software • bear@typewritten.org • Edmonds, WA 98026