xfs
[Top] [All Lists]

xfsdump/xfsrestore fails Zwicky's torture test

To: Linux XFS Mailing List <linux-xfs@xxxxxxxxxxx>
Subject: xfsdump/xfsrestore fails Zwicky's torture test
From: "Bernhard R. Erdmann" <be@xxxxxxxxxxx>
Date: Sun, 08 Jul 2001 14:21:44 +0200
Sender: owner-linux-xfs@xxxxxxxxxxx
I just did some torture testing with xfsdump/xfsrestore (Kernel
linux-2.4.7-pre3-xfs, checkout 04:30 GMT).

Using a perl script referenced from
http://reality.sgi.com/zwicky_neu/testdump.doc.html (Torture-testing
Backup and Archive Programs: Things You Ought to Know But Probably Would
Rather Not, Elizabeth D. Zwicky, 1991) 

Cited from that article:

1.0 The Tests 

The test suite currently employs two sorts of test. First, there are
static tests; files and directories with stressful names, contents, or
permissions, which do not change while the program runs. Second, there
are active tests; files that change while the program is running.

Static tests: 

      A file with a large hole in it. 
      A file that contains a hole and a block's worth of nulls. 
      Files with funny characters in their file names. 
      1025 hard links to the same file. 
      2911 hard links to different files. 
      Files with long names. 
      Symbolic links to long names. 
      Symbolic links to names with funny characters in them. 
      Unreadable and unwriteable files. 
      Unreadable and unwriteable directories with normal files in them. 
      A named pipe. 
      A device. 

Active tests: 

      A file that becomes a directory. 
      A directory that becomes a file. 
      A file that is deleted. 
      A file that is created. 
      A file that shrinks. 
      Two files that grow at different rates. 

Some errors occur between multiple backups or during multiple restores,
and the test suite does not test for them at this point. I will
mention these conditions further later. 

The tests were run using a Perl program which created all the static
files, and then forked to modify files in one process and run the
program being tested on the other. All programs were tested through a
pipe, rather than having them actually create and read from
tape archives. There were no compatibility tests; the archives were
always being read by the program that wrote them (or, in the case of
dump, by restore.) Except where specified, they were run with no options
beyond those required to archive to standard output and read
from standard input. A modified version of GNU diff was used to compare
the original directory with the restored one. 
[...]

I gave a filesystem with the "directory from Hell" to xfsdump, but
xfsrestore fails in content.c to read the directory index:

# ~be/torture-new/torture.perl
First guess at max component length is 255
max path length appears to be 4095
Type a command line which will run a backup program on the dump test
directory:  /sbin/xfsdump -J - /mnt/test1 | (cd
/mnt/test2/linux-xfsrestore && /sbin/xfsrestore - .)
Child 1 
/sbin/xfsrestore: version 3.0 - Running single-threaded
/sbin/xfsdump: version 3.0 - Running single-threaded
/sbin/xfsdump: level 0 dump of apollo:/mnt/test1
/sbin/xfsdump: dump date: Sun Jul  8 13:59:01 2001
/sbin/xfsdump: session id: fd2f240d-6708-4785-8576-cae2ab0a8272
/sbin/xfsdump: session label: ""
/sbin/xfsdump: ino map phase 1: skipping (no subtrees specified)
/sbin/xfsdump: ino map phase 2: constructing initial dump list
/sbin/xfsdump: ino map phase 3: skipping (no pruning necessary)
/sbin/xfsdump: ino map phase 4: skipping (size estimated in phase 2)
/sbin/xfsdump: ino map phase 5: skipping (only one dump stream)
/sbin/xfsrestore: searching media for dump
/sbin/xfsdump: ino map construction complete
/sbin/xfsdump: estimated dump size: 6424640 bytes
/sbin/xfsdump: creating dump session media file 0 (media 0, file 0)
/sbin/xfsdump: dumping ino map
/sbin/xfsdump: dumping directories
/sbin/xfsrestore: examining media file 0
/sbin/xfsrestore: dump description: 
/sbin/xfsrestore: hostname: apollo
/sbin/xfsrestore: mount point: /mnt/test1
/sbin/xfsrestore: volume: /dev/vg02/test1
/sbin/xfsrestore: session time: Sun Jul  8 13:59:01 2001
/sbin/xfsrestore: level: 0
/sbin/xfsrestore: session label: ""
/sbin/xfsrestore: media label: ""
/sbin/xfsrestore: file system id: 61c3ba48-82e8-4afc-a7b3-a61579d9ecd0
/sbin/xfsrestore: session id: fd2f240d-6708-4785-8576-cae2ab0a8272
/sbin/xfsrestore: media id: 12ac5d0e-0850-4ad1-91d9-58d803dd315f
/sbin/xfsrestore: searching media for directory dump
/sbin/xfsdump: dumping non-directory files
/sbin/xfsrestore: reading directories
xfsrestore: content.c:2942: applydirdump: Assertion `namelen < 255'
failed.
/sbin/xfsdump: ending media file
/sbin/xfsdump: media file size 266240 bytes
/sbin/xfsdump: dump size (non-dir files) : 544 bytes
/sbin/xfsdump: NOTE: dump interrupted: 1 seconds elapsed
Backup took 1.00 seconds of clock time and 0.00 seconds of cpu time

# df /mnt/test?
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/vg02/test1          93504     83516      9988  89% /mnt/test1
/dev/vg02/test2          93504       604     92900   1% /mnt/test2

I had to modify torture.perl (10 years old) in order to run with a
modern linux system. You can download it from
http://berdmann.dyndns.org/torture.tar.gz

<Prev in Thread] Current Thread [Next in Thread>