Hello I have been running into situations where dump(8) could not figure the device to use for updating /etc/dumpdates. It seems to be the case when I give dump(8) a mount point associated with a NAME= label in /etc/fstab
It also obviously happens when we dump a filesystem subdirectory. Here -u is forbidden because there cannot be an associated device, but we could sill want to track backup status with a pseudoentry in /etc/dumpdates I propose to add -U option to dump(8), which lets the administrator specify the device name in /etc/dumpdates. Example usages: dump -a0uf /dump/data.dump -D NAME=data /data/ dump -a0uf /dump/data-abc.dump -D data-abc /data/a* /data/b* /data/c* Here is the patch. Opinions? Index: dump.8 =================================================================== RCS file: /cvsroot/src/sbin/dump/dump.8,v retrieving revision 1.69 diff -U4 -r1.69 dump.8 --- dump.8 15 Jul 2018 06:14:13 -0000 1.69 +++ dump.8 20 Mar 2019 08:09:00 -0000 @@ -50,8 +50,9 @@ .Op Fl l Ar timeout .Op Fl r Ar cachesize .Op Fl s Ar feet .Op Fl T Ar date +.Op Fl U Ar dumpdev .Op Fl x Ar snap-backup .Ar files-to-dump .Nm .Op Fl W Li \&| Fl w @@ -298,12 +299,24 @@ The file .Pa /etc/dumpdates may be edited to change any of the fields, if necessary. -If a list of files or subdirectories is being dumped +If the +.Fl T +option is used or if a list of files or subdirectories is being dumped (as opposed to an entire file system), then .Fl u is ignored. +.It Fl U Ar dumpdev +Same as +.Fl u +but specifies the device in +.Pa /etc/dumpdates +as +.Ar dumpdev . +This option can be used with subdir dumps and with the +.Fl T +option. .It Fl W .Nm tells the operator what file systems need to be dumped. This information is gleaned from the files --- dump.h 1 Mar 2019 16:42:11 -0000 1.56 +++ dump.h 20 Mar 2019 08:09:00 -0000 @@ -114,8 +114,9 @@ const char *temp; /* name of the file for doing rewrite of dumpdates */ char lastlevel; /* dump level of previous dump */ char level; /* dump level of this dump */ int uflag; /* update flag */ +const char *dumpdev; /* device name in dumpdates */ int eflag; /* eject flag */ int lflag; /* autoload flag */ int diskfd; /* disk file descriptor */ int tapefd; /* tape file descriptor */ --- itime.c 1 Mar 2019 16:42:11 -0000 1.21 +++ itime.c 20 Mar 2019 08:09:00 -0000 @@ -128,11 +128,11 @@ getdumptime(void) { struct dumpdates *ddp; int i; - char *fname; + const char *fname; - fname = disk; + fname = dumpdev ? dumpdev : disk; #ifdef FDEBUG msg("Looking for name %s in dumpdates = %s for level = %c\n", fname, dumpdates, level); #endif @@ -169,17 +169,17 @@ FILE *df; struct dumpdates *dtwalk, *dtfound; int i; int fd; - char *fname; + const char *fname; - if(uflag == 0) + if(uflag == 0 && dumpdev == NULL) return; if ((df = fopen(dumpdates, "r+")) == NULL) quite(errno, "cannot rewrite %s", dumpdates); fd = fileno(df); (void) flock(fd, LOCK_EX); - fname = disk; + fname = dumpdev ? dumpdev : disk; free((char *)ddatev); ddatev = 0; nddates = 0; readdumptimes(df); --- main.c 1 Mar 2019 16:42:11 -0000 1.74 +++ main.c 20 Mar 2019 08:09:00 -0000 @@ -132,9 +132,9 @@ usage(); obsolete(&argc, &argv); while ((ch = getopt(argc, argv, - "0123456789aB:b:cd:eFf:h:ik:l:L:nr:s:StT:uWwx:X")) != -1) + "0123456789aB:b:cd:eFf:h:ik:l:L:nr:s:StT:uU:Wwx:X")) != -1) switch (ch) { /* dump level */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': @@ -244,8 +244,12 @@ case 'u': /* update /etc/dumpdates */ uflag = 1; break; + case 'U': /* dump device in /etc/dumpdates */ + dumpdev = optarg; + break; + case 'W': /* what to do */ case 'w': lastdump(ch); exit(X_FINOK); /* do nothing else */ -- Emmanuel Dreyfus m...@netbsd.org