rdiff-backup-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[rdiff-backup-users] bug or user-error? killed my whole repository today


From: roland
Subject: [rdiff-backup-users] bug or user-error? killed my whole repository today just by doing some restore-tests....
Date: Thu, 13 Apr 2006 00:36:39 -0000

hello!

i'm new to rdiff-backup (great tool, though!) - i never did testing the restore in depth, but i was playing with this today - and i accidentally killed my complete rdiff-backup repository!

OUCH!

fortunately, i did this in /backup with a non-priviledged account - and not in / with the root account - furthermore i'm just "still testing" - otherwise......

I think what i did is just sort of little error (i.e. using --force left over from previous tries - and using "." as i was just used to ), but this gave very unexpected result.

SO - WHAT I`M DEMONSTRATING HERE - TAKE CARE IF YOU WANT TO TRY TO REPRODUCE!

ok - lets go.....

$ cd /backup

$ ls -la
drwx------   3 backup root  96 Apr 13 01:33 .
drwxr-xr-x  28 root root 664 Apr  1 15:28 ..
drwx------   4 backup root 112 Apr 13 01:39 my_rdiff_repository

ok - let`s restore a single file from my repository

$ rdiff-backup --force -r 2D ./my_rdiff_repository/path/single_file . (DON`T DO IT THIS WAY!)

(ok - i did "--force", but that was just because i needed to use it in previous restore-tests and i didn`t expect that it could lead to _such_ serious behaviour)

this command ran for quite a while - i was just wondering why - then giving

Exception '[Errno 22] Invalid argument: '.'' raised of class 'exceptions.OSError': File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 295, in error_check_Main
   try: Main(arglist)
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 315, in Main
   take_action(rps)
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 281, in take_action
   elif action == "restore-as-of": Restore(rps[0], rps[1], 1)
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 490, in Restore
   inc_rpath, dest_rp, time)
File "/usr/lib/python2.3/site-packages/rdiff_backup/restore.py", line 37, in Restore
   TargetS.patch(target, diff_iter)
File "/usr/lib/python2.3/site-packages/rdiff_backup/restore.py", line 291, in patch
   ITR.Finish()
File "/usr/lib/python2.3/site-packages/rdiff_backup/rorpiter.py", line 247, in Finish
   to_be_finished.end_process()
File "/usr/lib/python2.3/site-packages/rdiff_backup/restore.py", line 669, in end_process
   self.base_rp.rmdir()
File "/usr/lib/python2.3/site-packages/rdiff_backup/rpath.py", line 873, in rmdir
   self.conn.os.rmdir(self.path)

Traceback (most recent call last):
 File "/usr/bin/rdiff-backup", line 23, in ?
   rdiff_backup.Main.error_check_Main(sys.argv[1:])
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 295, in error_check_Main
   try: Main(arglist)
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 315, in Main
   take_action(rps)
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 281, in take_action
   elif action == "restore-as-of": Restore(rps[0], rps[1], 1)
File "/usr/lib/python2.3/site-packages/rdiff_backup/Main.py", line 490, in Restore
   inc_rpath, dest_rp, time)
File "/usr/lib/python2.3/site-packages/rdiff_backup/restore.py", line 37, in Restore
   TargetS.patch(target, diff_iter)
File "/usr/lib/python2.3/site-packages/rdiff_backup/restore.py", line 291, in patch
   ITR.Finish()
File "/usr/lib/python2.3/site-packages/rdiff_backup/rorpiter.py", line 247, in Finish
   to_be_finished.end_process()
File "/usr/lib/python2.3/site-packages/rdiff_backup/restore.py", line 669, in end_process
   self.base_rp.rmdir()
File "/usr/lib/python2.3/site-packages/rdiff_backup/rpath.py", line 873, in rmdir
   self.conn.os.rmdir(self.path)
OSError: [Errno 22] Invalid argument: '.'

huh ?

vmhost:/backup # ls -la
total 1
drwx------   2 root root  48 Apr 13 01:54 .
drwxr-xr-x  28 root root 664 Apr  1 15:28 ..

damn - what ?

:'-(

trying to restore a single file to current directory recursively seems to have killed my complete backup repository.

imho, a backup program in "restore" mode should never delete dirs/files recursively - not even with a --force option.
a backup program should better save our data, not deleting it.

in the output i see
File "/usr/lib/python2.3/site-packages/rdiff_backup/rpath.py", line 873, in rmdir is this necessary that this tool does "rmdir" in restore mode - without any option on the commandline which tells "--delete" or "--force-delete" or "--force-overwrite" ? furthermore, from all sorts of errors i have seen with rdiff-backup, i always see lots of python error-stuff which is difficult to interpret for the end user. looks like there hasn`t been spend much work in error handling!? is this just something which needs improvement, or is it due to "nature" of python ?

to avoid other people loosing data, i would recommend improving this by changing this or by doing double-checking. maybe i`m just the "unlucky first one" experiencing this - or i`m just too lazy - but i don`t really feel that i made a _big_ mistake here.

could someone give a comment about what i did or about rdiff-backup's unexpected behaviour ?

thank you!

greetings
roland

ps:
please see this posting just as "constructive criticism" to help improving rdiff-backup





reply via email to

[Prev in Thread] Current Thread [Next in Thread]