Too many symbolic links
From RdiffBackupWiki
Symptom (backing up using Version <= 1.2.2):
- Exception '[Errno 40] Too many levels of symbolic links' raised of class '<type 'exceptions.IOError'>'
Problem:
- the structure of links simple brakes rdiff-backup's process
Solution:
- verbose output of version 1.2.3 will show more verbose information on the reason why the backup got broken...
Log extract:
[... regular verbose messages ...] Exception '[Errno 40] Too many levels of symbolic links' raised of class '<type 'exceptions.IOError'>': File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error try: return function(*args) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1123, in append return self.__class__(self.conn, self.base, self.index + (ext,)) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 868, in __init__ else: self.setdata() File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 893, in setdata if self.lstat(): self.conn.rpath.setdata_local(self) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1470, in setdata_local if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath) File "/usr/lib/python2.5/site-packages/rdiff_backup/eas_acls.py", line 584, in rpath_ea_get ea.read_from_rp(rp) File "/usr/lib/python2.5/site-packages/rdiff_backup/eas_acls.py", line 59, in read_from_rp try: attr_list = rp.conn.xattr.listxattr(rp.path, rp.issym()) Exception '[Errno 40] Too many levels of symbolic links' raised of class '<type 'exceptions.IOError'>': File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 304, in error_check_Main try: Main(arglist) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 324, in Main take_action(rps) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 280, in take_action elif action == "backup": Backup(rps[0], rps[1]) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 346, in Backup backup.Mirror(rpin, rpout) File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 38, in Mirror DestS.patch(dest_rpath, source_diffiter) File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 230, in patch for diff in rorpiter.FillInIter(source_diffiter, dest_rpath): File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 177, in FillInIter for rp in rpiter: File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 103, in get_diffs for dest_sig in dest_sigiter: File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 166, in get_sigs for src_rorp, dest_rorp in cls.CCPP: File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 320, in next source_rorp, dest_rorp = self.iter.next() File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 103, in Collate2Iters for relem1 in riter1: File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 342, in next next_elem = self.iter.next() File "/usr/lib/python2.5/site-packages/rdiff_backup/selection.py", line 132, in Iterate_fast try: rpath, val = diryield_stack[-1].next() File "/usr/lib/python2.5/site-packages/rdiff_backup/selection.py", line 120, in diryield rpath.append, (filename,)) File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error try: return function(*args) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1123, in append return self.__class__(self.conn, self.base, self.index + (ext,)) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 868, in __init__ else: self.setdata() File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 893, in setdata if self.lstat(): self.conn.rpath.setdata_local(self) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1470, in setdata_local if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath) File "/usr/lib/python2.5/site-packages/rdiff_backup/eas_acls.py", line 584, in rpath_ea_get ea.read_from_rp(rp) File "/usr/lib/python2.5/site-packages/rdiff_backup/eas_acls.py", line 59, in read_from_rp try: attr_list = rp.conn.xattr.listxattr(rp.path, rp.issym()) Traceback (most recent call last): File "/usr/bin/rdiff-backup", line 30, in <module> rdiff_backup.Main.error_check_Main(sys.argv[1:]) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 304, in error_check_Main try: Main(arglist) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 324, in Main take_action(rps) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 280, in take_action elif action == "backup": Backup(rps[0], rps[1]) File "/usr/lib/python2.5/site-packages/rdiff_backup/Main.py", line 346, in Backup backup.Mirror(rpin, rpout) File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 38, in Mirror DestS.patch(dest_rpath, source_diffiter) File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 230, in patch for diff in rorpiter.FillInIter(source_diffiter, dest_rpath): File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 177, in FillInIter for rp in rpiter: File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 103, in get_diffs for dest_sig in dest_sigiter: File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 166, in get_sigs for src_rorp, dest_rorp in cls.CCPP: File "/usr/lib/python2.5/site-packages/rdiff_backup/backup.py", line 320, in next source_rorp, dest_rorp = self.iter.next() File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 103, in Collate2Iters for relem1 in riter1: File "/usr/lib/python2.5/site-packages/rdiff_backup/rorpiter.py", line 342, in next next_elem = self.iter.next() File "/usr/lib/python2.5/site-packages/rdiff_backup/selection.py", line 132, in Iterate_fast try: rpath, val = diryield_stack[-1].next() File "/usr/lib/python2.5/site-packages/rdiff_backup/selection.py", line 120, in diryield rpath.append, (filename,)) File "/usr/lib/python2.5/site-packages/rdiff_backup/robust.py", line 32, in check_common_error try: return function(*args) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1123, in append return self.__class__(self.conn, self.base, self.index + (ext,)) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 868, in __init__ else: self.setdata() File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 893, in setdata if self.lstat(): self.conn.rpath.setdata_local(self) File "/usr/lib/python2.5/site-packages/rdiff_backup/rpath.py", line 1470, in setdata_local if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath) File "/usr/lib/python2.5/site-packages/rdiff_backup/eas_acls.py", line 584, in rpath_ea_get ea.read_from_rp(rp) File "/usr/lib/python2.5/site-packages/rdiff_backup/eas_acls.py", line 59, in read_from_rp try: attr_list = rp.conn.xattr.listxattr(rp.path, rp.issym()) IOError: [Errno 40] Too many levels of symbolic links
