Andreas Klemm's patch set for dump(8), with some minor (cosmetic)

changes and one addition by me.

. Use reasonable defaults for the tape drive (/dev/rst0) instead of
  something we actually don't have.

. Add a summary line displaying the alapsed time and the total throughput.

. Replace "rmt" for the remote location of rmt(8) by "/etc/rmt", since this
  is the historical protocol, and relying on the $PATH causes a big pain.
  Make it adjustable via an environmental variable though.

Reviewed by:	joerg (for Andreas' part)
Submitted by:	andreas@knobel.gun.de (Andreas Klemm)
This commit is contained in:
joerg 1995-11-18 18:00:43 +00:00
parent 60b83a65cf
commit 73a49ee404
5 changed files with 56 additions and 17 deletions

View File

@ -102,10 +102,10 @@ Write the backup to
.Ar file
may be a special device file
like
.Pa /dev/rmt12
.Pa /dev/rst0
(a tape drive),
.Pa /dev/rsd1c
(a disk drive),
.Pa /dev/rfd1
(a floppy disk drive),
an ordinary file,
or
.Ql Fl
@ -122,6 +122,12 @@ or
.Nm dump
writes to the named file on the remote host using
.Xr rmt 8 .
The default path name of the remote
.Xr rmt 8
program is
.Pa /etc/rmt ;
this can be overridden by the environment variable
.Ev RMT .
.It Cm d Ar density
Set tape density to
.Ar density .
@ -256,7 +262,7 @@ to minimize the number of tapes follows:
.It
Always start with a level 0 backup, for example:
.Bd -literal -offset indent
/sbin/dump 0uf /dev/nrst1 /usr/src
/sbin/dump 0uf /dev/nrst0 /usr/src
.Ed
.Pp
This should be done at set intervals, say once a month or once every two months,
@ -280,9 +286,15 @@ used, also on a cyclical basis.
.Pp
After several months or so, the daily and weekly tapes should get
rotated out of the dump cycle and fresh tapes brought in.
.Sh ENVIRONMENT
The environment variable
.Ev RMT
will be used to determine the pathname of the remote
.Xr rmt 8
program.
.Sh FILES
.Bl -tag -width /etc/dumpdates -compact
.It Pa /dev/rmt8
.It Pa /dev/rst0
default tape unit to dump to
.It Pa /etc/dumpdates
dump date records
@ -311,6 +323,11 @@ Each reel requires a new process, so parent processes for
reels already written just hang around until the entire tape
is written.
.Pp
restore(8) is currently unable to restore dumps that were created
with a blocksize larger than 32 on some tape drives. This is likely
a bug in the tape driver. Workaround for safety reasons:
dump aborts with an error message when choosing a blocksize > 32.
.Pp
.Nm Dump
with the
.Cm W

View File

@ -79,6 +79,7 @@ int notify; /* notify operator flag */
int blockswritten; /* number of blocks written on current tape */
int tapeno; /* current tape number */
time_t tstart_writing; /* when started writing the first tape block */
time_t tend_writing; /* after writing the last tape block */
struct fs *sblock; /* the file system super block */
char sblock_buf[MAXBSIZE];
long dev_bsize; /* block size of underlying disk device */

View File

@ -113,6 +113,7 @@ void
rmtgetconn()
{
register char *cp;
register const char *rmt;
static struct servent *sp = NULL;
static struct passwd *pwd = NULL;
#ifdef notdef
@ -143,8 +144,10 @@ rmtgetconn()
rmtpeer = ++cp;
} else
tuser = pwd->pw_name;
if ((rmt = getenv("RMT")) == NULL)
rmt = _PATH_RMT;
rmtape = rcmd(&rmtpeer, (u_short)sp->s_port, pwd->pw_name, tuser,
_PATH_RMT, (int *)0);
rmt, (int *)0);
size = ntrec * TP_BSIZE;
if (size > 60 * 1024) /* XXX */
size = 60 * 1024;

View File

@ -77,7 +77,7 @@ static char sccsid[] = "@(#)main.c 8.4 (Berkeley) 4/15/94";
int notify = 0; /* notify operator flag */
int blockswritten = 0; /* number of blocks written on current tape */
int tapeno = 0; /* current tape number */
int density = 0; /* density in bytes/0.1" */
int density = 0; /* density in bytes/0.1" " <- this is for hilit19 */
int ntrec = NTREC; /* # tape blocks in each tape record */
int cartridge = 0; /* Assume non-cartridge tape */
long dev_bsize = 1; /* recalculated below */
@ -167,6 +167,13 @@ main(argc, argv)
case 'b': /* blocks per tape write */
ntrec = numarg('b', "number of blocks per write",
1L, 1000L, &argc, &argv);
/* XXX restore is unable to restore dumps that
were created with a blocksize larger than 32K.
Possibly a bug in the scsi tape driver. */
if ( ntrec > 32 ) {
msg("please choose a blocksize <= 32\n");
exit(X_ABORT);
}
break;
case 'B': /* blocks per output file */
@ -236,6 +243,7 @@ main(argc, argv)
* 9-track 6250 bpi (625 bytes/.1") 2300 ft.
* cartridge 8000 bpi (100 bytes/.1") 1700 ft.
* (450*4 - slop)
* hilit19 hits again: "
*/
if (density == 0)
density = cartridge ? 100 : 160;
@ -362,12 +370,12 @@ main(argc, argv)
fetapes =
( tapesize /* blocks */
* TP_BSIZE /* bytes/block */
* (1.0/density) /* 0.1" / byte */
* (1.0/density) /* 0.1" / byte " */
+
tapesize /* blocks */
* (1.0/ntrec) /* streaming-stops per block */
* 15.48 /* 0.1" / streaming-stop */
) * (1.0 / tsize ); /* tape / 0.1" */
* 15.48 /* 0.1" / streaming-stop " */
) * (1.0 / tsize ); /* tape / 0.1" " */
} else {
/* Estimate number of tapes, for old fashioned 9-track
tape */
@ -375,12 +383,12 @@ main(argc, argv)
fetapes =
( tapesize /* blocks */
* TP_BSIZE /* bytes / block */
* (1.0/density) /* 0.1" / byte */
* (1.0/density) /* 0.1" / byte " */
+
tapesize /* blocks */
* (1.0/ntrec) /* IRG's / block */
* tenthsperirg /* 0.1" / IRG */
) * (1.0 / tsize ); /* tape / 0.1" */
* tenthsperirg /* 0.1" / IRG " */
) * (1.0 / tsize ); /* tape / 0.1" " */
}
etapes = fetapes; /* truncating assignment */
etapes++;
@ -440,14 +448,24 @@ main(argc, argv)
(void)dumpino(dp, ino);
}
(void)time((time_t *)&(tend_writing));
spcl.c_type = TS_END;
for (i = 0; i < ntrec; i++)
writeheader(maxino - 1);
if (pipeout)
msg("DUMP: %ld tape blocks\n",spcl.c_tapea);
msg("%ld tape blocks\n", spcl.c_tapea);
else
msg("DUMP: %ld tape blocks on %d volumes(s)\n",
msg("%ld tape blocks on %d volumes(s)\n",
spcl.c_tapea, spcl.c_volume);
/* report dump performance, avoid division through zero */
if (tend_writing - tstart_writing == 0)
msg("finished in less than a second\n");
else
msg("finished in %d seconds, throughput %d KBytes/sec\n",
tend_writing - tstart_writing,
spcl.c_tapea / (tend_writing - tstart_writing));
putdumptime();
trewind();
broadcast("DUMP IS DONE!\7\7\n");

View File

@ -35,8 +35,8 @@
#include <paths.h>
#define _PATH_DEFTAPE "/dev/rmt8"
#define _PATH_DEFTAPE "/dev/rst0"
#define _PATH_DTMP "/etc/dtmp"
#define _PATH_DUMPDATES "/etc/dumpdates"
#define _PATH_LOCK "/tmp/dumplockXXXXXX"
#define _PATH_RMT "rmt"
#define _PATH_RMT "/etc/rmt"