#
# package description
#
# $Id: README,v 1.5 1998/04/19 04:31:50 jhpb Exp $
#
# $Log: README,v $
# Revision 1.5  1998/04/19 04:31:50  jhpb
# reduced secondary partition block size to same as primary partition,
# for portability reasons
#
# Revision 1.4  1998/04/18 23:12:17  jhpb
# modifications for linux port
#
# Revision 1.3  1994/12/05 03:45:26  jhpb
# editing changes
#
# Revision 1.2  1994/12/03  16:18:36  jhpb
# fixes to file headers
#
# Revision 1.1  1994/12/03  15:43:00  jhpb
# Initial revision
#

This is wormdat, an NFS server that makes a WangDAT 2000 DAT tape
drive look something like a WORM disk drive.  It is written in C++,
and was developed under ESIX SVR4/386 (4.0.3A) using gcc 2.5.8, then
ported to RedHat linux 4.2 (currently 5.0) using egcs.

Included is:

- the NFS server
- a program to control the NFS server's operation
- a set of programs to access the features of WangDAT 2000 tape drives
- a C++ class library to access WangDAT 2000 features
- a tool to generate class libraries for manipulation of arbitrary
  SCSI data structures

To compile this as-is, you need:

- ESIX SVR4/386 (4.0.3A, though 4.0.4 may work also) or linux (I use
  RedHat 5.0 at present)
- a C++ compiler (I used gcc 2.5.8 for ESIX, an egcs snapshot for
  RedHat, but the RedHat gcc should be fine)
- at least perl 5.0.0 (for man page generation; I think perl 4 may
  work otherwise)
- parseargs, from comp.sources.misc volume 29
- gmake (I used gmake 3.70 under ESIX)

Details of the implementation:

- For obvious reasons, the server is intended for archiving, not
  general-purpose file storage.  (You will beat the tape drive to
  death.)
- The filesystem implementation is very similar to the SVR4 UFS
  filesystem, including long file names and symbolic links.
- ESIX SVR4 supports mounting of NFS servers running on non-standard
  ports, so you can run wormdat in addition to your standard NFS
  server, and use loopback NFS to get to it, if you want.  LINUX can
  do the same thing, but you need a kernel patch (supplied).
- Pains were taken to avoid seek operations during normal file
  read/write operations.  No tape seeks occur while writing files to
  the filesystem.  During readback, no extra seeks will occur if the
  files are read back in inode order.
- The server maintains a large cache of recently-used blocks.  One of
  the main purposes of the cache is to reorder blocks that are written
  to the server out of order, before they are written to the tape.
- The tape is partitioned into two parts.  The primary partition
  stores file data blocks.  The secondary partition is used to store
  all indirect blocks, directory data blocks, inodes, and a few other
  miscellaneous things.
- Only the primary tape partition is accessed during normal operation.
  The information in the secondary partition is loaded into memory
  when the tape is mounted, and written from memory when the tape is
  unmounted.
- XDR is used to store data in the secondary partition, so tapes
  written by the server should be machine-independent.  (Version 1.0
  of wormdat used a larger blocksize on the secondary partition than
  version 1.1 does, because linux cannot support it.  This should not
  be a problem with future versions.)
- AUTH_UNIX security is used in the NFS server.  AUTH_DES is coded in
  (under ESIX, anyway) and may work, but I haven't tried it.
- The mountd daemon generates the initial filehandle for NFS servers.
  Wormdat has no way of knowing what mountd generates, so it assumes
  unknown filehandles refer to wormdat's file system's root directory.

Joe Buehler
jhpb@sarto.gaithersburg.md.us
