Add the capability for dump to print timestamps on all informational
messages.
This commit is contained in:
parent
eefd77845d
commit
a152a6a92a
@ -1,4 +1,4 @@
|
|||||||
.\" $NetBSD: dump.8,v 1.38 2001/08/14 06:51:36 lukem Exp $
|
.\" $NetBSD: dump.8,v 1.39 2001/10/15 13:25:33 blymn Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1980, 1991, 1993
|
.\" Copyright (c) 1980, 1991, 1993
|
||||||
.\" Regents of the University of California.
|
.\" Regents of the University of California.
|
||||||
@ -43,7 +43,7 @@
|
|||||||
.Nd file system backup
|
.Nd file system backup
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm ""
|
.Nm ""
|
||||||
.Op Fl 0123456789ceFnSu
|
.Op Fl 0123456789ceFnStu
|
||||||
.Op Fl B Ar records
|
.Op Fl B Ar records
|
||||||
.Op Fl b Ar blocksize
|
.Op Fl b Ar blocksize
|
||||||
.Op Fl d Ar density
|
.Op Fl d Ar density
|
||||||
@ -227,6 +227,12 @@ The default tape length is 2300 feet.
|
|||||||
.It Fl S
|
.It Fl S
|
||||||
Display an estimate of the backup size and the number of tapes
|
Display an estimate of the backup size and the number of tapes
|
||||||
required, and exit without actually performing the dump.
|
required, and exit without actually performing the dump.
|
||||||
|
.It Fl t
|
||||||
|
All informational log messages printed by
|
||||||
|
.Nm
|
||||||
|
will have the time prepended to them. Also, the completion time
|
||||||
|
interval estimations will have the estimated time at which the dump
|
||||||
|
will complete printed at the end of the line.
|
||||||
.It Fl T Ar date
|
.It Fl T Ar date
|
||||||
Use the specified date as the starting time for the dump
|
Use the specified date as the starting time for the dump
|
||||||
instead of the time determined from looking in
|
instead of the time determined from looking in
|
||||||
@ -419,6 +425,24 @@ rather than
|
|||||||
to invoke
|
to invoke
|
||||||
.Xr rmt 8
|
.Xr rmt 8
|
||||||
on the remote machine.
|
on the remote machine.
|
||||||
|
.It Ev TIMEFORMAT
|
||||||
|
can be used to control the format of the timestamps produced by the
|
||||||
|
.Fl t
|
||||||
|
option.
|
||||||
|
.Ev TIMEFORMAT
|
||||||
|
is a string containing embedded formatting commands for
|
||||||
|
.Xr strftime 3 .
|
||||||
|
The total formatted string is limited to about 80 characters, if this
|
||||||
|
limit is exceeded then
|
||||||
|
.Qo
|
||||||
|
ERROR: TIMEFORMAT too long, reverting to default
|
||||||
|
.Qc
|
||||||
|
will be printed and the time format will revert to the default one. If
|
||||||
|
.Ev TIMEFORMAT
|
||||||
|
is not set then the format string defaults to
|
||||||
|
.Qo
|
||||||
|
%T %Z
|
||||||
|
.Qc
|
||||||
.El
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width /etc/dumpdates -compact
|
.Bl -tag -width /etc/dumpdates -compact
|
||||||
@ -444,7 +468,8 @@ to find group
|
|||||||
.Xr fstab 5 ,
|
.Xr fstab 5 ,
|
||||||
.Xr restore 8 ,
|
.Xr restore 8 ,
|
||||||
.Xr rmt 8 ,
|
.Xr rmt 8 ,
|
||||||
.Xr st 4
|
.Xr st 4 ,
|
||||||
|
.Xr environ 7
|
||||||
.Sh DIAGNOSTICS
|
.Sh DIAGNOSTICS
|
||||||
Many, and verbose.
|
Many, and verbose.
|
||||||
.Pp
|
.Pp
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: dump.h,v 1.28 2001/08/14 05:44:44 lukem Exp $ */
|
/* $NetBSD: dump.h,v 1.29 2001/10/15 13:25:34 blymn Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1980, 1993
|
* Copyright (c) 1980, 1993
|
||||||
@ -111,6 +111,7 @@ int nonodump; /* if set, do not honor UF_NODUMP user flags */
|
|||||||
|
|
||||||
extern int density; /* density in 0.1" units */
|
extern int density; /* density in 0.1" units */
|
||||||
extern int notify; /* notify operator flag */
|
extern int notify; /* notify operator flag */
|
||||||
|
extern int timestamp; /* timestamp messages */
|
||||||
extern int blockswritten; /* number of blocks written on current tape */
|
extern int blockswritten; /* number of blocks written on current tape */
|
||||||
extern int tapeno; /* current tape number */
|
extern int tapeno; /* current tape number */
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: main.c,v 1.38 2001/08/14 06:51:37 lukem Exp $ */
|
/* $NetBSD: main.c,v 1.39 2001/10/15 13:25:34 blymn Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1980, 1991, 1993, 1994
|
* Copyright (c) 1980, 1991, 1993, 1994
|
||||||
@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1991, 1993, 1994\n\
|
|||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 5/1/95";
|
static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 5/1/95";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: main.c,v 1.38 2001/08/14 06:51:37 lukem Exp $");
|
__RCSID("$NetBSD: main.c,v 1.39 2001/10/15 13:25:34 blymn Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
@ -81,6 +81,7 @@ __RCSID("$NetBSD: main.c,v 1.38 2001/08/14 06:51:37 lukem Exp $");
|
|||||||
#include "pathnames.h"
|
#include "pathnames.h"
|
||||||
|
|
||||||
gid_t egid; /* Retain tty privs for notification */
|
gid_t egid; /* Retain tty privs for notification */
|
||||||
|
int timestamp; /* print message timestamps */
|
||||||
int notify; /* notify operator flag */
|
int notify; /* notify operator flag */
|
||||||
int blockswritten; /* number of blocks written on current tape */
|
int blockswritten; /* number of blocks written on current tape */
|
||||||
int tapeno; /* current tape number */
|
int tapeno; /* current tape number */
|
||||||
@ -92,6 +93,8 @@ long blocksperfile; /* output blocks per file */
|
|||||||
char *host; /* remote host (if any) */
|
char *host; /* remote host (if any) */
|
||||||
int readcache = -1; /* read cache size (in readblksize blks) */
|
int readcache = -1; /* read cache size (in readblksize blks) */
|
||||||
int readblksize = 32 * 1024; /* read block size */
|
int readblksize = 32 * 1024; /* read block size */
|
||||||
|
char default_time_string[] = "%T %Z"; /* default timestamp string */
|
||||||
|
char *time_string = default_time_string; /* timestamp string */
|
||||||
|
|
||||||
int main(int, char *[]);
|
int main(int, char *[]);
|
||||||
static long numarg(char *, long, long);
|
static long numarg(char *, long, long);
|
||||||
@ -115,10 +118,14 @@ main(int argc, char *argv[])
|
|||||||
char *mountpoint;
|
char *mountpoint;
|
||||||
int just_estimate = 0;
|
int just_estimate = 0;
|
||||||
char labelstr[LBLSIZE];
|
char labelstr[LBLSIZE];
|
||||||
|
char *new_time_format;
|
||||||
|
|
||||||
spcl.c_date = 0;
|
spcl.c_date = 0;
|
||||||
(void)time((time_t *)&spcl.c_date);
|
(void)time((time_t *)&spcl.c_date);
|
||||||
|
tzset(); /* set up timezone for strftime */
|
||||||
|
if ((new_time_format = getenv("TIMEFORMAT")) != NULL)
|
||||||
|
time_string = new_time_format;
|
||||||
|
|
||||||
/* Save setgid bit for use later */
|
/* Save setgid bit for use later */
|
||||||
egid = getegid();
|
egid = getegid();
|
||||||
setegid(getgid());
|
setegid(getgid());
|
||||||
@ -132,13 +139,14 @@ main(int argc, char *argv[])
|
|||||||
if (TP_BSIZE / DEV_BSIZE == 0 || TP_BSIZE % DEV_BSIZE != 0)
|
if (TP_BSIZE / DEV_BSIZE == 0 || TP_BSIZE % DEV_BSIZE != 0)
|
||||||
quit("TP_BSIZE must be a multiple of DEV_BSIZE\n");
|
quit("TP_BSIZE must be a multiple of DEV_BSIZE\n");
|
||||||
level = '0';
|
level = '0';
|
||||||
|
timestamp = 0;
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
obsolete(&argc, &argv);
|
obsolete(&argc, &argv);
|
||||||
while ((ch = getopt(argc, argv,
|
while ((ch = getopt(argc, argv,
|
||||||
"0123456789B:b:cd:eFf:h:k:L:nr:s:ST:uWw")) != -1)
|
"0123456789B:b:cd:eFf:h:k:L:nr:s:StT:uWw")) != -1)
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
/* dump level */
|
/* dump level */
|
||||||
case '0': case '1': case '2': case '3': case '4':
|
case '0': case '1': case '2': case '3': case '4':
|
||||||
@ -217,6 +225,10 @@ main(int argc, char *argv[])
|
|||||||
just_estimate = 1;
|
just_estimate = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
timestamp = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'T': /* time of last dump */
|
case 'T': /* time of last dump */
|
||||||
spcl.c_ddate = unctime(optarg);
|
spcl.c_ddate = unctime(optarg);
|
||||||
if (spcl.c_ddate < 0) {
|
if (spcl.c_ddate < 0) {
|
||||||
@ -595,7 +607,7 @@ usage(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
(void)fprintf(stderr, "%s\n%s\n%s\n%s\n",
|
(void)fprintf(stderr, "%s\n%s\n%s\n%s\n",
|
||||||
"usage: dump [-0123456789ceFnu] [-B records] [-b blocksize] [-d density]",
|
"usage: dump [-0123456789ceFntu] [-B records] [-b blocksize] [-d density]",
|
||||||
" [-f file] [-h level] [-k read block size] [-L label]",
|
" [-f file] [-h level] [-k read block size] [-L label]",
|
||||||
" [-r read cache size] [-s feet] [-T date] file system",
|
" [-r read cache size] [-s feet] [-T date] file system",
|
||||||
" dump [-W | -w]");
|
" dump [-W | -w]");
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: optr.c,v 1.18 2001/08/08 16:49:54 david Exp $ */
|
/* $NetBSD: optr.c,v 1.19 2001/10/15 13:25:34 blymn Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1980, 1988, 1993
|
* Copyright (c) 1980, 1988, 1993
|
||||||
@ -38,7 +38,7 @@
|
|||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)optr.c 8.2 (Berkeley) 1/6/94";
|
static char sccsid[] = "@(#)optr.c 8.2 (Berkeley) 1/6/94";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: optr.c,v 1.18 2001/08/08 16:49:54 david Exp $");
|
__RCSID("$NetBSD: optr.c,v 1.19 2001/10/15 13:25:34 blymn Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
@ -69,6 +69,10 @@ struct fstab *allocfsent(struct fstab *);
|
|||||||
int datesort(const void *, const void *);
|
int datesort(const void *, const void *);
|
||||||
static void sendmes(char *, char *);
|
static void sendmes(char *, char *);
|
||||||
extern gid_t egid;
|
extern gid_t egid;
|
||||||
|
extern char *time_string;
|
||||||
|
extern char default_time_string[];
|
||||||
|
|
||||||
|
static void do_timestamp(time_t time, char *msg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Query the operator; This previously-fascist piece of code
|
* Query the operator; This previously-fascist piece of code
|
||||||
@ -304,6 +308,29 @@ DUMP: NEEDS ATTENTION: ",
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* print out the timestamp string to stderr.
|
||||||
|
*/
|
||||||
|
#define STAMP_LENGTH 80
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_timestamp(time_t time, char *msg)
|
||||||
|
{
|
||||||
|
struct tm tm_time;
|
||||||
|
char then[STAMP_LENGTH + 1];
|
||||||
|
|
||||||
|
(void) localtime_r(&time, &tm_time);
|
||||||
|
if (strftime(then, STAMP_LENGTH, time_string, &tm_time) == 0) {
|
||||||
|
time_string = default_time_string;
|
||||||
|
strftime(then, STAMP_LENGTH, time_string, &tm_time);
|
||||||
|
fprintf(stderr,
|
||||||
|
"DUMP: ERROR: TIMEFORMAT too long, reverting to default\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, msg, then);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print out an estimate of the amount of time left to do the dump
|
* print out an estimate of the amount of time left to do the dump
|
||||||
*/
|
*/
|
||||||
@ -323,18 +350,31 @@ timeest(void)
|
|||||||
deltat = tstart_writing - tnow +
|
deltat = tstart_writing - tnow +
|
||||||
(1.0 * (tnow - tstart_writing))
|
(1.0 * (tnow - tstart_writing))
|
||||||
/ blockswritten * tapesize;
|
/ blockswritten * tapesize;
|
||||||
msg("%3.2f%% done, finished in %ld:%02ld\n",
|
|
||||||
|
msg("%3.2f%% done, finished in %ld:%02ld",
|
||||||
(blockswritten * 100.0) / tapesize,
|
(blockswritten * 100.0) / tapesize,
|
||||||
(long)(deltat / 3600), (long)((deltat % 3600) / 60));
|
(long)(deltat / 3600), (long)((deltat % 3600) / 60));
|
||||||
|
|
||||||
|
if (timestamp == 1)
|
||||||
|
do_timestamp(tnow + deltat, " (at %s)");
|
||||||
|
|
||||||
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
msg(const char *fmt, ...)
|
msg(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
|
time_t tnow;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
(void) fprintf(stderr," DUMP: ");
|
fprintf(stderr, " ");
|
||||||
|
if (timestamp == 1) {
|
||||||
|
(void) time((time_t *) &tnow);
|
||||||
|
do_timestamp(tnow, "[%s] ");
|
||||||
|
}
|
||||||
|
|
||||||
|
(void) fprintf(stderr,"DUMP: ");
|
||||||
#ifdef TDEBUG
|
#ifdef TDEBUG
|
||||||
(void) fprintf(stderr, "pid=%d ", getpid());
|
(void) fprintf(stderr, "pid=%d ", getpid());
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user