Problems with dump and restore

Andrew Hamilton-Wright AHamiltonWright at MtA.ca
Tue Aug 12 19:30:16 UTC 2014


Hi Karl -- thanks for your thoughts and response.


On Tue, 12 Aug 2014, Karl Vogel wrote:

>> I have used dump/restore for several years, very happily, to maintain
>> backups on my machine.
>
>  Just to be clear: you've *restored* from dumps before and had no problems?

Yes, on several occasions, usually when changing disk layout or structure.
The most recent occasion was at least six months ago (possibly a bit more),
likely using FreeBSD 9.2.

Being used for structural changes, I therefore normally do a zero level
dump, and then need only a zero level restore.  I have had a couple of
disks go south on me in the last years, however, and on those occasions
did several restore levels to recover the data on multiple partitions
that were on the dead disk -- with absolute success.


>> I wanted to restore the /usr partition to the state it was in at the last
>> (level 5) backup.  My expected steps to achieve this are:
>> 	o create a replacement filesystem on the drive:
>
>  Did you use the same newfs options to create the original /usr partition?
>  I don't have a FreeBSD box in front of me right now, so I'm grasping at
>  any available straw here.

Yes; even verified the options using dumpfs -m to ensure that the setup
was exactly the same as what I had in my logbook.


>> 	o restore the level 0 dump
>> 		restore ruf /backup/dumps/current/usr.dump
>> 	* this is the first sign of trouble, as restore output the warning
>> 		expected next file 19266003, got 19100935
>
>  Can restore show a table of contents for that dump, so you know what files
>  correspond to those inodes and where it might be crapping out?

Sure -- from the table of contents, inodes 19266003 refers to
 	./local/share/licenses/patch-2.7.1/catalog.mk
while inode 19100935 is not listed in the dump at all.


>  Can you restore any of that level-0 dump at all?  If so, can you restore
>  single files or some parts of the tree, like /usr/local?  If it's expecting
>  a file and finds a directory in the dump instead, maybe that's something
>  you could fix by hand before restoring in a piecemeal fashion.

The "expected next file" error is the only error from the level 0 restore.
As far as I can tell, everything except for that single file has come back
fine, from the level 0 dump.

In the time since I sent the first message, I have booted the machine
back to multiuser (the zero level is from July 11, so close enough that
I can stagger along for a little bit), and re-run the restore on a scratch
volume that I have available.  Progressing to the level 2 restore (there
having been no level 1 dump performed), the complete set of error messages
from both restores are:
 	+ restore ruf /backup/dumps/current/usr.dump
 	expected next file 19266003, got 19100935
 	+ restore ruf /backup/dumps/current/l1d0/l2d0/usr.dump
 	./src: (inode 10032000) not found on tape
 	./ports: (inode 14205312) not found on tape
 	bad entry: removeleaf: not a leaf
 	name: ./local/share/licenses/openldap-client-2.4.39
 	parent name ./local/share/licenses
 	sibling name: ./local/share/licenses/RSTTMP03130448
 	next entry name: ./local/share/licenses/openldap-client-2.4.39/OPENLDAP
 	entry type: NODE
 	inode number: 3613621
 	flags: NIL
 	abort? [yn] y
 	dump core? [yn] n

None of the inodes listed in the error messages are in the output from
the table of contents.

After attempting the level 2 restore, the top-level directory of the
recovered filesystem looks like this:
 	.snap           games           lib32           obj             swap
 	RSTTMP010032000 home            libdata         restoresymtable tests
 	RSTTMP014205312 include         libexec         sbin
 	bin             lib             local           share

The RSTTMP* directories contain additional RSTTMP* entries for unnamed
found cruft, but some recognizable files:
 	# ls RSTTMP01*
 	RSTTMP010032000:
 	COPYRIGHT               RSTTMP010192614         RSTTMP010834806
 	LOCKS                   RSTTMP010272816         RSTTMP010915023
 	MAINTAINERS             RSTTMP010272822         RSTTMP011075378
 	Makefile                RSTTMP010272857         RSTTMP011075564
 	Makefile.inc1           RSTTMP010272860         RSTTMP011235981
 	ObsoleteFiles.inc       RSTTMP010353048         RSTTMP011236023
 	README                  RSTTMP010353178         RSTTMP011236050
 	RSTTMP010032001         RSTTMP010353195         RSTTMP011236093
 	RSTTMP010112261         RSTTMP010513687         UPDATING
 	RSTTMP010192569         RSTTMP010834762

 	RSTTMP014205312:
 	.arcconfig      RSTTMP014205917 RSTTMP014207366 RSTTMP014447559 RSTTMP015170651
 	.gitignore      RSTTMP014206111 RSTTMP014207415 RSTTMP014606720 RSTTMP015248825
 	CHANGES         RSTTMP014206140 RSTTMP014207416 RSTTMP014687196 RSTTMP015249051
 	CONTRIBUTING.md RSTTMP014206371 RSTTMP014207431 RSTTMP014687230 RSTTMP015250173
 	COPYRIGHT       RSTTMP014206656 RSTTMP014207509 RSTTMP014688864 RSTTMP019341927
 	GIDs            RSTTMP014207111 RSTTMP014207550 RSTTMP014689162 RSTTMP03290912
 	INDEX-10.db     RSTTMP014207165 RSTTMP014207557 RSTTMP014768653 RSTTMP03531831
 	INDEX-7         RSTTMP014207172 RSTTMP014207580 RSTTMP014768663 RSTTMP03531837
 	INDEX-8         RSTTMP014207196 RSTTMP014207597 RSTTMP014848208 RSTTMP03532331
 	INDEX-9         RSTTMP014207212 RSTTMP014207598 RSTTMP014848898 RSTTMP03532533
 	INDEX-9.db      RSTTMP014207266 RSTTMP014207602 RSTTMP014849014 RSTTMP03534719
 	MOVED           RSTTMP014207267 RSTTMP014366176 RSTTMP014928591 RSTTMP03692298
 	Makefile        RSTTMP014207277 RSTTMP014367788 RSTTMP015088613 RSTTMP03932616
 	README          RSTTMP014207318 RSTTMP014368109 RSTTMP015088615 RSTTMP05538024
 	RSTTMP014205313 RSTTMP014207329 RSTTMP014446601 RSTTMP015088621 RSTTMP07865164
 	RSTTMP014205612 RSTTMP014207338 RSTTMP014446815 RSTTMP015089051 UIDs
 	RSTTMP014205756 RSTTMP014207341 RSTTMP014447545 RSTTMP015169454 UPDATING


The first entry appears to be data for /usr/src, while the second is
/usr/ports, which makes sense given the error messages and the recent
security updates that have touched both of these directories (so the
fact that they are changed since July 11 makes sense).



>> Is there any means of validating the dump file, other than the -N
>> option (which returns no warnings on any of these files)?
>
>  That's one reason I got away from the Solaris version, which had no
>  problem lying to me about success or failure.  All I can think of is to
>  try restoring the entire dump under /tmp (or someplace trashable that won't
>  mess up your system) and look for errors before you trust the dumpfile.

I suppose I am in agreement -- but also in shocked amazement that dump
and restore can be broken without the sky falling.



>  I remember using dump to quickly get me a list of files that have changed
>  since the corresponding /etc/dumpdates entry, and then making a backup
>  using pax or cpio.  Maybe that would work for you.

I'm not sure that I understand your suggestion here -- are you suggesting
this as a future backup strategy as a replacement for dump levels higher
than zero?  Perhaps I am missing something here.


>  Feel free to repost if you think it's worth the bandwidth.  Good luck.

Doing so, in case anyone else can weigh in with any further ideas.  Thanks
for the suggestions and ideas.

I suppose I will now open a bugreport, too, as it does seem that there
is something not right.

Andrew.



More information about the freebsd-questions mailing list