SearchFAQMemberlist Log in
Reply to topic Page 1 of 1
strange "Exception [Errno 39] Directory not empty:"
Author Message
Post strange "Exception [Errno 39] Directory not empty:" 
Hello,

I'm hoping that someone with more rdiff-backup / python experience can help me figure this out. I have a backup of my root filesystem that I am trying to restore. But the restore fails while trying to remove a non-empty directory... I have tried rdiff-backup 1.28 from Centos stable branch and also 1.33 built from source. Same scenario for both. I don't care about the data, just trying to figure out the issue with rdiff-backup.

The command is this:
rdiff-backup --terminal-verbosity 9 --force --exclude-globbing-filelist /tmp/excludelist -r 1266948364 /root/snapshots /

In the exclude list are typical things like /dev, /tmp, /proc, and of course the directory containing the snapshot. There are no NFS mounts involved or anything like that. All is local. What's odd is that the directory it is trying to remove is nothing special. I was able to manually remove it just fine:

[root < at > bptest rdiff-backup-1.3.3]# rm -r /cluster/shadow/db/acdmis/run/
rm: descend into directory `/cluster/shadow/db/acdmis/run/'? y
rm: remove regular file `/cluster/shadow/db/acdmis/run//navigator.pid'? y
rm: remove directory `/cluster/shadow/db/acdmis/run/'? y

See below, the snippet from the verbose console leading up to the error and then the error itself:


Wed Feb 24 07:53:29 2010 Processing changed file cluster/online
Wed Feb 24 07:53:29 2010 Processing changed file cluster/online/bptest
Wed Feb 24 07:53:29 2010 Regular copying ('cluster', 'online', 'bptest') to /cluster/online/rdiff-backup.tmp.1577
Wed Feb 24 07:53:29 2010 Writing file object to /cluster/online/rdiff-backup.tmp.1577
Wed Feb 24 07:53:29 2010 Hash e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e of cluster/online/bptest verified
Wed Feb 24 07:53:29 2010 Copying attributes from ('cluster', 'online', 'bptest') to /cluster/online/rdiff-backup.tmp.1577
Wed Feb 24 07:53:29 2010 Setting time of /cluster/online/rdiff-backup.tmp.1577 to 1266948306
Wed Feb 24 07:53:29 2010 Renaming /cluster/online/rdiff-backup.tmp.1577 to /cluster/online/bptest
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow
Wed Feb 24 07:53:29 2010 Copying attributes from ('cluster', 'online') to /cluster/online
Wed Feb 24 07:53:29 2010 Setting time of /cluster/online to 1266947702
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow/db
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow/db/acdmis
Wed Feb 24 07:53:29 2010 Regular copying ('cluster', 'shadow', 'db', 'acdmis') to /cluster/shadow/db/rdiff-backup.tmp.1578
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow/db/acdmis/run
Wed Feb 24 07:53:29 2010 Regular copying ('cluster', 'shadow', 'db', 'acdmis', 'run') to /cluster/shadow/db/acdmis/rdiff-backup.tmp.1579
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow/db/data
Wed Feb 24 07:53:29 2010 Removing directory /cluster/shadow/db/acdmis/run
Wed Feb 24 07:53:29 2010 Exception '[Errno 39] Directory not empty: '/cluster/shadow/db/acdmis/run'' raised of class 'exceptions.OSError':
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 306, in error_check_Main
try: Main(arglist)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 326, in Main
take_action(rps)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 292, in take_action
elif action == "restore-as-of": Restore(rps[0], rps[1], 1)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 589, in Restore
inc_rpath, dest_rp, time)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py", line 37, in Restore
TargetS.patch(target, diff_iter)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py", line 293, in patch
ITR(diff.index, diff)
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 277, in __call__
if self.finish_branches(index) is None:
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 229, in finish_branches
to_be_finished.end_process()
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py", line 672, in end_process
self.base_rp.rmdir()
File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 993, in rmdir
self.conn.os.rmdir(self.path)

Traceback (most recent call last):
File "/usr/bin/rdiff-backup", line 30, in ?
rdiff_backup.Main.error_check_Main(sys.argv[1:])
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 306, in error_check_Main
try: Main(arglist)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 326, in Main
take_action(rps)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 292, in take_action
elif action == "restore-as-of": Restore(rps[0], rps[1], 1)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line 589, in Restore
inc_rpath, dest_rp, time)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py", line 37, in Restore
TargetS.patch(target, diff_iter)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py", line 293, in patch
ITR(diff.index, diff)
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 277, in __call__
if self.finish_branches(index) is None:
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py", line 229, in finish_branches
to_be_finished.end_process()
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py", line 672, in end_process
self.base_rp.rmdir()
File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line 993, in rmdir
self.conn.os.rmdir(self.path)
OSError: [Errno 39] Directory not empty: '/cluster/shadow/db/acdmis/run'

[root < at > bptest rdiff-backup-1.3.3]# ls /cluster/shadow/db/acdmis/run/
navigator.pid

So python is correct, the directory is not empty. But why does cause an error? Looking for any thoughts / suggestions!

Thanks,
Chris


_______________________________________________
rdiff-backup-users mailing list at rdiff-backup-users < at > nongnu.org
http://lists.nongnu.org/mailman/listinfo/rdiff-backup-users
Wiki URL: http://rdiff-backup.solutionsfirst.com.au/index.php/RdiffBackupWiki

Post strange "Exception [Errno 39] Directory not empty:" 
I found the issue, but hopefully there is a more graceful way to handle this kind of thing. My exclude list is here:
/root/snapshots
/mnt/
/var/lock/subsys/
**var/lib/heartbeat/
/sys
/proc
/dev
/tmp
**.pid
**.*$
**.swp
/root/snapshots
/u
/u_recovery

The problem is that rdiff-backup is ignoring **.pid files at my request, and in the directory that it cannot delete is a pid file. So it doesn't delete it and then blows up when it can't remove the directory. Probably there should be a check for a non-empty directory, and then skip gracefully if non-empty == true. AND/ OR, if --force is specified, then call rmtree instead of rmdir, which apparently is supposed to handle non empty directories by just deleting all their contents as well. Thoughts on this?

Chris


----- "Christopher Hawkins" <chawkins < at > bplinux.com> wrote:

Hello,

I'm hoping that someone with more rdiff-backup / python experience can
help me figure this out. I have a backup of my root filesystem that I
am trying to restore. But the restore fails while trying to remove a
non-empty directory... I have tried rdiff-backup 1.28 from Centos
stable branch and also 1.33 built from source. Same scenario for both.
I don't care about the data, just trying to figure out the issue with
rdiff-backup.

The command is this:
rdiff-backup --terminal-verbosity 9 --force
--exclude-globbing-filelist /tmp/excludelist -r 1266948364
/root/snapshots /

In the exclude list are typical things like /dev, /tmp, /proc, and of
course the directory containing the snapshot. There are no NFS mounts
involved or anything like that. All is local. What's odd is that the
directory it is trying to remove is nothing special. I was able to
manually remove it just fine:

[root < at > bptest rdiff-backup-1.3.3]# rm -r /cluster/shadow/db/acdmis/run/
rm: descend into directory `/cluster/shadow/db/acdmis/run/'? y
rm: remove regular file
`/cluster/shadow/db/acdmis/run//navigator.pid'? y
rm: remove directory `/cluster/shadow/db/acdmis/run/'? y

See below, the snippet from the verbose console leading up to the
error and then the error itself:


Wed Feb 24 07:53:29 2010 Processing changed file cluster/online
Wed Feb 24 07:53:29 2010 Processing changed file
cluster/online/bptest
Wed Feb 24 07:53:29 2010 Regular copying ('cluster', 'online',
'bptest') to /cluster/online/rdiff-backup.tmp.1577
Wed Feb 24 07:53:29 2010 Writing file object to
/cluster/online/rdiff-backup.tmp.1577
Wed Feb 24 07:53:29 2010 Hash
e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e of cluster/online/bptest
verified
Wed Feb 24 07:53:29 2010 Copying attributes from ('cluster',
'online', 'bptest') to /cluster/online/rdiff-backup.tmp.1577
Wed Feb 24 07:53:29 2010 Setting time of
/cluster/online/rdiff-backup.tmp.1577 to 1266948306
Wed Feb 24 07:53:29 2010 Renaming
/cluster/online/rdiff-backup.tmp.1577 to /cluster/online/bptest
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow
Wed Feb 24 07:53:29 2010 Copying attributes from ('cluster',
'online') to /cluster/online
Wed Feb 24 07:53:29 2010 Setting time of /cluster/online to
1266947702
Wed Feb 24 07:53:29 2010 Processing changed file cluster/shadow/db
Wed Feb 24 07:53:29 2010 Processing changed file
cluster/shadow/db/acdmis
Wed Feb 24 07:53:29 2010 Regular copying ('cluster', 'shadow', 'db',
'acdmis') to /cluster/shadow/db/rdiff-backup.tmp.1578
Wed Feb 24 07:53:29 2010 Processing changed file
cluster/shadow/db/acdmis/run
Wed Feb 24 07:53:29 2010 Regular copying ('cluster', 'shadow', 'db',
'acdmis', 'run') to /cluster/shadow/db/acdmis/rdiff-backup.tmp.1579
Wed Feb 24 07:53:29 2010 Processing changed file
cluster/shadow/db/data
Wed Feb 24 07:53:29 2010 Removing directory
/cluster/shadow/db/acdmis/run
Wed Feb 24 07:53:29 2010 Exception '[Errno 39] Directory not empty:
'/cluster/shadow/db/acdmis/run'' raised of class 'exceptions.OSError':
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
306, in error_check_Main
try: Main(arglist)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
326, in Main
take_action(rps)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
292, in take_action
elif action == "restore-as-of": Restore(rps[0], rps[1], 1)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
589, in Restore
inc_rpath, dest_rp, time)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py",
line 37, in Restore
TargetS.patch(target, diff_iter)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py",
line 293, in patch
ITR(diff.index, diff)
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py",
line 277, in __call__
if self.finish_branches(index) is None:
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py",
line 229, in finish_branches
to_be_finished.end_process()
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py",
line 672, in end_process
self.base_rp.rmdir()
File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line
993, in rmdir
self.conn.os.rmdir(self.path)

Traceback (most recent call last):
File "/usr/bin/rdiff-backup", line 30, in ?
rdiff_backup.Main.error_check_Main(sys.argv[1:])
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
306, in error_check_Main
try: Main(arglist)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
326, in Main
take_action(rps)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
292, in take_action
elif action == "restore-as-of": Restore(rps[0], rps[1], 1)
File "/usr/lib/python2.4/site-packages/rdiff_backup/Main.py", line
589, in Restore
inc_rpath, dest_rp, time)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py",
line 37, in Restore
TargetS.patch(target, diff_iter)
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py",
line 293, in patch
ITR(diff.index, diff)
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py",
line 277, in __call__
if self.finish_branches(index) is None:
File "/usr/lib/python2.4/site-packages/rdiff_backup/rorpiter.py",
line 229, in finish_branches
to_be_finished.end_process()
File "/usr/lib/python2.4/site-packages/rdiff_backup/restore.py",
line 672, in end_process
self.base_rp.rmdir()
File "/usr/lib/python2.4/site-packages/rdiff_backup/rpath.py", line
993, in rmdir
self.conn.os.rmdir(self.path)
OSError: [Errno 39] Directory not empty:
'/cluster/shadow/db/acdmis/run'

[root < at > bptest rdiff-backup-1.3.3]# ls /cluster/shadow/db/acdmis/run/
navigator.pid

So python is correct, the directory is not empty. But why does cause
an error? Looking for any thoughts / suggestions!

Thanks,
Chris


_______________________________________________
rdiff-backup-users mailing list at rdiff-backup-users < at > nongnu.org
http://lists.nongnu.org/mailman/listinfo/rdiff-backup-users
Wiki URL: http://rdiff-backup.solutionsfirst.com.au/index.php/RdiffBackupWiki

Display posts from previous:
Reply to topic Page 1 of 1
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
  


Magic SEO URL for phpBB