cyrus@hi.UUCP (Tait Cyrus) (11/25/87)
I am having some problems with dumps on our Encore. What I am trying
to do is put multiple level 1 dumps on the same tape. The way I
do this is by first rewinding the tape, writing the 1st dump, rewinding
the tape, mt -f /dev/rmt20 fsf 1 (skipping over the first dump using
the no_rewind device), writing the 2nd dump, rewinding the tape, etc.....
I can restore the 1st dump ok, but trying to restore any of the others gives
me the following error:
# mt rew
# mt -f /dev/rmt20 fsf 1
# restore iv
Verify tape and initialize maps
Dump date: Wed Nov 25 09:02:36 1987
Dumped from: Thu Nov 19 12:57:03 1987
Cannot find file dump list
#
Any ideas? I would prefer if I could get this to work instead of having
to use 1 tape per dump (I am aware that I CAN'T put multiple level 0
dumps on the same tape -- my level 1 dumps are relatively small, though,
so all of my level 1 dumps WILL fit on one tape).
Thanks in advance,
--
@__________@ W. Tait Cyrus (505) 277-0806
/| /| University of New Mexico
/ | / | Dept of EECE - Hypercube Project
@__|_______@ | Albuquerque, New Mexico 87131
| | | |
| | hc | | e-mail:
| @.......|..@ cyrus@hc.dspo.gov or
| / | / seismo!unmvax!hi!cyrus
@/_________@/amos@taux01.UUCP (Amos Shapir) (11/26/87)
This is a problem common to many (most?) unix systems: 'restore' rewinds the tape after reading the volume number from the terminal. The only solution I have found is to run 'restore' up to the point it asks for the volume number, then suspend it (or go to another terminal) and do the 'mt fsf' or the appropriate 'dd' to position the tape at the correct file, and only then continue with 'restore'. -- Amos Shapir (My other cpu is a NS32532) National Semiconductor (Israel) 6 Maskit st. P.O.B. 3007, Herzlia 46104, Israel Tel. +972 52 522261 amos%taux01@nsc.com (used to be amos%nsta@nsc.com) 34 48 E / 32 10 N
mikec@encore.UUCP (Mike Callahan) (12/01/87)
How to do multiple dumps per tape using undocumented BSD4.2 restore flags:
(At the end a sample dump script from the University of Oklahoma to do
all the typing for you)
First you must dump multiple file systems to tape:
(level one dump, 6250 density, 2400 foot reel, /dev/rmt20 is the
norewind device (Multimax specific), and update /etc/dumpdates)
# dump 1udsf 6250 2400 /dev/rmt20 /dev/root
# dump 1udsf 6250 2400 /dev/rmt20 /dev/backuproot
# dump 1udsf 6250 2400 /dev/rmt20 /dev/usr
Using the norewind device removes all the work with "mt".
Now that the dump is done, How to use restore:
# restore -ivs 2
The "s" flag is undocument on BSD 4.2, but I believe it is in the BSD 4.3
documentation. The number "2" provided signals the second file on the tape,
unlike "mt" which would skip two files.
NOTE: using this method has the advantage of multiple files per tape, but
dump will not detect end of tape. If you reach the end of the reel
you will have to redo the current dump (It helps to add up those
percentages).
---------------------------------------------------------------------------
The following script is used at the University of Oklahoma to do the backup.
You will of course have to modify it to do use a different incremental order.
It defaults to /dev/rmt20, 6250 density, 2400 foot reels. The dump level
follows this pattern:
Week S M T W R F S
1: 0
2: 8 7 3
3: 6 5 2
4: 8 7 3
5: 6 5 0
This four week patter will repeat, any other day does a level "9". OU chose
this pattern since it does level "0" about once a month, and no tape is reused
for at least two weeks (they store level 0 dumps).
To override the defaults use the dump flags:
# backup 0f /dev/rmt16
This does a level "0" dump on /dev/rmt16 of all the file systems.
If no file systems are specified on the command line, backup looks in
/etc/fstab. The forth field (first number field) specifies the order.
If there is a "0" in the field, the file system is skipped. Other
numbers must be unique, backup will dump them in numerical order.
Sample fstab:
**************************
/dev/md0a:/:rw:1:1
/dev/md0c:/all0:xx:0:2
/dev/md0d:/header0:xx:0:2
/dev/md0e:/usr2:rw:4:2
/dev/md1a:/root-dpc:rw:2:2
/dev/md1b::sw:0:2
/dev/md1c:/all1:xx:0:2
/dev/md1d:/header1:xx:0:2
/dev/md1e:/usr:rw:3:2
/dev/md1f:/usr3:rw:5:2
/dev/md2b::sw:0:2
/dev/md2c:/all1:xx:0:2
/dev/md2d:/header1:xx:0:2
/dev/md2e:/tmp:rw:0:2
/dev/md2f:/usr4:rw:6:2
**************************
The dump order is "/ /root-dpc /usr /usr2 /usr3 /usr4".
The shell script will ask you to press return between each dump to
allow you to rewind and change tapes if needed. If dump errors out,
it will ask if you want to redo the last dump.
Have fun:
------------------------------Cut Here-------------------------------
#!/bin/sh
#
# user interface to filesystem backups
#
PATH=/etc:/bin
density=6250
length=2400
drive=/dev/rmt20
level=-1
usage="Usage: $0 [0-9dsfw] [arg ...]"
trap " " 1 3 4 5 6 7 8 10 12 13 14 15
trap "echo 'really quit?'; read a; if test \"X\$a\" = \"Xy\"; then exit; fi" 2
# device that root resides on (i.e. rhp0a)
root=`sed -e '2,$d' -e 's/:.*//' -e 's/\/dev\//r/' /etc/fstab`
#
# look over the flags supplied, if we find one we don't understand, DON'T
# TAKE CHANCES, exit now
#
if test $# -gt 0; then
key=$1
shift
fi
for option in `echo $key | sed -e 's/[^ ]/& /g'`
do
case $option in
[0-9]) if test "$level" = "-1"; then
level=$option
else # don't want to set the level more than once
echo $usage
exit 1
fi
;;
d) if test "$1"; then
density=$1
shift
else
echo $usage
exit 1
fi
;;
s) if test "$1"; then
length=$1
shift
else
echo $usage
exit 1
fi
;;
f) if test "$1"; then
drive=$1
shift
else
echo $usage
exit 1
fi
;;
w) noaction=1
;;
*) echo $usage
exit 1
;;
esac
done
#
# if no level selected, let's figure one out. This is very specific for
# our dump scheme, whose cycle is: 0 8 7 3 6 5 2 8 7 3 6 5 0
#
if test "$level" = "-1" -o "$noaction"; then
set `date`
if test "$1" = "Tue"; then
set 8 6 8
elif test "$1" = "Thu"; then
set 7 5 7
elif test "$1" = "Sat" -o "$1" = "Sun"; then
set 3 2 0
else # an off day (Mon Wed or Fri) probably want level 9
set 9 9 9
fi
level=`awk '
BEGIN {
level[1] = '$1'; level[2] = '$2'; level[3] = '$3';
y["Jan"] = 1; y["Feb"] = 2; y["Mar"] = 3;
y["Apr"] = 4; y["May"] = 5; y["Jun"] = 6;
y["Jul"] = 7; y["Aug"] = 8; y["Sep"] = 9;
y["Oct"] = 10; y["Nov"] = 11; y["Dec"] = 12;
}
/'$root'/ {
if ($2 == 0) {
dates[0] = sprintf("%d%02d%02d", $7, y[$4], $5);
}
if ($2 == level[1]) {
dates[1] = sprintf("%d%02d%02d", $7, y[$4], $5);
}
if ($2 == level[2]) {
dates[2] = sprintf("%d%02d%02d", $7, y[$4], $5);
}
if ($2 == level[3]) {
dates[3] = sprintf("%d%02d%02d", $7, y[$4], $5);
}
}
END {
if (dates[1] < dates[0])
level[0] = level[1];
else if (dates[1] < dates[2])
level[0] = level[1];
else if (dates[2] < dates[3])
level[0] = level[2];
else
level[0] = level[3];
print level[0]
}' < /etc/dumpdates`
fi
#
# let's figure out the filesystems to dump and in what order
#
filesystems=`awk -F: '
{ if ($4 != 0 && order[$4] != "")
error = 1;
else {
order[$4] = $2;
if ($4 > max)
max = $4;
}
}
END {
for (i = 1; i <= max; ++i)
printf(" %s", order[i]);
exit error;
}
' < /etc/fstab`
#
# this is for the 'w' option, exit afterwards
#
if test "$noaction"; then
echo "File Systems to be backed up:"
for i in $filesystems
do
dev=`awk -F: '{ if ('\"$i\"' == $2) print $1}' < /etc/fstab`
dev=`echo $dev | sed -e 's/\/dev\//\/dev\/r/'`
echo "$dev ($i) This dump: Level $level"
done
exit 0
fi
#
# tell operator what options we decided on
#
echo -n "Dump level: $level Density: $density Tape Size: $length"
echo " Drive: $drive"
echo
echo Dumping filesystems in this order:
echo
echo "$filesystems"
#
# Now we finally get around to actually dumping the filesystems
#
for i in $filesystems
do
dev=`awk -F: '{ if ('\"$i\"' == $2) print $1}' < /etc/fstab`
dev=`echo $dev | sed -e 's/\/dev\//\/dev\/r/'`
again=1
while test $again -eq 1; do
echo
echo " Dumping $dev ( $i )"
echo
echo "Change tapes if desired. Type return when drive is ready."
read dummy
if test "$dummy" = "stop"; then
echo
echo Aborting backup program.
echo
exit 1
elif test "$dummy" = "skip"; then
echo
echo Skipping $i
again=0
else
echo "# dump ${level}udsf $density $length $drive $dev"
dump ${level}nudsf $density $length $drive $dev | awk '
BEGIN {
len = 0
}
/DUMP: DUMP:/ {
len=($3*1024/'$density')+($3*0.3/10)/12
}
{ print }
END {
if (len == 0)
exit 0
printf(" DUMP: used %d feet\n", len);
exit 1
}'
if test $? -ne 0; then
sync
echo "Do you want to restart? (y/n): "
read dummy
if test "$dummy" = "y"; then
echo "You may want to mount a new tape."
else
again=0
fi
else
sync
again=0
fi
fi
done
done
mt -t $drive offl
echo
echo "Backup program complete."
-------------------------------------------------------------------------
An important note about dump: Doing dump single user or on an unmounted
file system is best (assuming file system has fsck'ed ok). Dump has
been known to not produce a good backup when running on a mounted file
system.
Have fun with this.
Mike Callahan
mikec@encore
mikec@multimax.arpa
IMPORTANT MESSAGE:
The above information and program is subject to change without notice
and should not be construed as a commitment by Encore Computer
Corporation. Encore Computer Corporation assumes no responsibility
for any errors that may appear in the above.