Hi!
I don't know if you solved your problem already some another way, but I thought
it'd be nice to tell what I do in situation like this, anyway.
Without looking at the source, it appears that rdiff-backup decides whether a
regression is in order by checking whether there are two current_mirror stamps
(one for the supposedly failed backup, the other for the previous, successful
backup). So you can force a regression to the previous version by creating a
new current_mirror stamp file in the destdir/rdiff-backup-data directory. (The
file contains the word "PID", a space, and the pid of the rdiff-backup process
that created the version, but the contents aren't that interesting in this
case; you can just copy the existing current_mirror file.) The timestamp in the
file name of the current_mirror file must match the timestamp of the previous
backup, the one you want to regress to (you can only regress to the previous
backup, don't try to skip versions).
An example might be in order:
--clip--
varma:/backup/data/aulis/rdiff-backup-data# ls -ltr mirror_metadata*|tail -n2
-rw------- 1 root root 7243 21.2. 02:49
mirror_metadata.2010-02-20T01:00:20+02:00.diff.gz
-rw------- 1 root root 5453359 23.2. 12:07
mirror_metadata.2010-02-21T01:00:21+02:00.snapshot.gz
varma:/backup/data/aulis/rdiff-backup-data# cp
current_mirror.2010-02-21T01:00:21+02:00.data
current_mirror.2010-02-20T01:00:20+02:00.data
varma:/backup/data/aulis/rdiff-backup-data# rdiff-backup
--check-destination-dir /backup/data/aulis
--clip--
Depending on your version of rdiff-backup and the exact situation, you might
get an error like this:
--clip--
Exception 'RPath instance has no attribute 'inc_compressed'' raised of class
'exceptions.AttributeError':
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 295, in
error_check_Main
try: Main(arglist)
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 315, in
Main
take_action(rps)
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 273, in
take_action
elif action == "check-destination-dir": CheckDest(rps[0])
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 781, in
CheckDest
dest_rp.conn.regress.Regress(dest_rp)
File "/var/lib/python-support/python2.4/rdiff_backup/regress.py", line 69,
in Regress
regress_rbdir(manager)
File "/var/lib/python-support/python2.4/rdiff_backup/regress.py", line 124,
in regress_rbdir
if has_meta_diff and not has_meta_snap: recreate_meta(meta_manager)
File "/var/lib/python-support/python2.4/rdiff_backup/regress.py", line 145,
in recreate_meta
writer = metadata.MetadataFile(temprp, 'w', check_path = 0)
File "/var/lib/python-support/python2.4/rdiff_backup/metadata.py", line 378,
in __init__
if compress and not rp_base.isinccompressed():
File "/var/lib/python-support/python2.4/rdiff_backup/rpath.py", line 1087,
in isinccompressed
return self.inc_compressed
Traceback (most recent call last):
File "/usr/bin/rdiff-backup", line 23, in ?
rdiff_backup.Main.error_check_Main(sys.argv[1:])
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 295, in
error_check_Main
try: Main(arglist)
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 315, in
Main
take_action(rps)
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 273, in
take_action
elif action == "check-destination-dir": CheckDest(rps[0])
File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 781, in
CheckDest
dest_rp.conn.regress.Regress(dest_rp)
File "/var/lib/python-support/python2.4/rdiff_backup/regress.py", line 69,
in Regress
regress_rbdir(manager)
File "/var/lib/python-support/python2.4/rdiff_backup/regress.py", line 124,
in regress_rbdir
if has_meta_diff and not has_meta_snap: recreate_meta(meta_manager)
File "/var/lib/python-support/python2.4/rdiff_backup/regress.py", line 145,
in recreate_meta
writer = metadata.MetadataFile(temprp, 'w', check_path = 0)
File "/var/lib/python-support/python2.4/rdiff_backup/metadata.py", line 378,
in __init__
if compress and not rp_base.isinccompressed():
File "/var/lib/python-support/python2.4/rdiff_backup/rpath.py", line 1087,
in isinccompressed
return self.inc_compressed
AttributeError: RPath instance has no attribute 'inc_compressed'
--clip--
You can solve it by editing
/var/lib/python-support/python2.4/rdiff_backup/metadata.py
and changing line 378 to
if compress and rp_base.isincfile() and not rp_base.isinccompressed():
and then running rdiff-backup --check-destination-dir again.
After rdiff-backup returns, the backup should be regressed to the previous
version (and have only one current_mirror file). You can repeat the process,
one varsion at a time, for as many times as you wish. So if you want to regress
two versions, just repeat the process once.
--Janne