diff options
Diffstat (limited to 'seivot')
-rwxr-xr-x | seivot | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -370,6 +370,8 @@ class Seivot(cliapp.Application): 'access backup repository over the ' 'network via sftp') + self.settings.boolean(['verify'], 'verifyt restored data') + def process_args(self, args): progname = self.settings['program'] logging.info('Benchmarking: %s' % progname) @@ -406,11 +408,15 @@ class Seivot(cliapp.Application): else: amount = self.settings['initial-data'] self.generate_live_data(self.live_data, amount) + if self.settings['verify']: + self.summain(self.live_data, 'backup-0.summain') self.measure(prog.backup, 0, amount) for i in range(1, generations): self.generate_live_data(self.live_data, self.settings['incremental-data']) + if self.settings['verify']: + self.summain(self.live_data, 'backup-%d.summain' % i) self.measure(prog.backup, i, self.settings['incremental-data']) for i in range(generations): @@ -420,6 +426,7 @@ class Seivot(cliapp.Application): target_dir = os.path.join(self.tempdir, 'restored') os.mkdir(target_dir) self.measure(prog.restore, i, 0, target_dir=target_dir) + self.verify(target_dir, i) shutil.rmtree(target_dir) for i in range(generations): @@ -436,6 +443,28 @@ class Seivot(cliapp.Application): runcmd(['genbackupdata', where, '--create', str(size), '--file-size', str(self.settings['file-size'])]) + def summain(self, dirname, basename): + '''Remember state of dirname at this time. + + This runs the summain(1) utility against dirname and stores + the result in a file called basename in the temporary directory. + + ''' + + # We exclude mtime from summain output, because there are very + # small time differences that I choose to ignore at this time. + self.runcmd(['summain', '--relative', '--exclude=mtime', '--output', + os.path.join(self.tempdir, basename), dirname]) + + def verify(self, dirname, generation): + '''Verify that the generation was restored correctly.''' + + root = os.path.join(dirname, './' + self.live_data) + self.summain(root, 'restored-%d.summain' % generation) + orig = os.path.join(self.tempdir, 'backup-%d.summain' % generation) + rest = os.path.join(self.tempdir, 'restored-%d.summain' % generation) + self.runcmd(['diff', '-u', orig, rest]) + def file_sizes(self, dirname): bytes = 0 for dirname, subdirs, basenames in os.walk(dirname): |