Package: rdiff-backup Version: 1.2.2-1~bpo40+1 Severity: grave Justification: renders package unusable
Note: Both source and target system use Debian stable with a backported version of rdiff-backup. The problem occured after upgrading the backup source system to rdiff-backup 1.2.2 from 1.2.1. The backup target system was still running 1.2.1, but the problem is reproducible when both systems are running 1.2.2. This means that the backup target system's version of rdiff-backup is irrelevant to the problem. With the current situation, it is impossible to perform backups with rdiff-backup. Suggested action: rollback the version in testing to 1.2.1, wait for a possible fix in 1.2.3. Detailed problem report: Backup command used, with options: su $customer -c "rdiff-backup -v3 --print-statistics $CMD_EXTRA \ --remote-schema 'cstream -v 0 -t 10000000 | \ ssh %s '\''rdiff-backup --server'\'' | \ cstream -v 0 -t 10000000' $includes $excludes \ $remote_u...@$remote_host::/ $tdir" $REMOTE_USER=root, and $customer is a user (not superuser). $CMD_EXTRA may contain e.g. "--force", depending on the circumstances. $includes is a list of directories to include. $excludes=/ $tdir is the target directory (the backup repository, if you will). Here's what I see happening, step for step: 1. The backup process is started. 2. Warnings start appearing on the form "Warning: listattr('/cdrom'): [Errno 2] No such file or directory" for directories that are NOT in the include list. 3. After approximately 180 such errors, the exception "'[Errno 40] Too many levels of symbolic links' raised of class 'exceptions.IOError'" is raised. 4. The backup target is in an unusable state, but can be "fixed" by running "rdiff-backup --check-destination-dir", which results in the warning "Warning: Access Control List file not found". Apparently, "dead" symbolic links are dereferenced in 1.2.2, and then rdiff-backup tries to run listattr() on the dereferenced link. It apparently forgets to reset the link recursion counter in the process. The error situation seems similar to one reported on the rdiff-backup-users mailing list, but which there is no response to: http://lists.nongnu.org/archive/html/rdiff-backup-users/2008-12/msg00010.html Mid-truncated log output (version 1.2.2 of rdiff-backup used on both systems): Warning: listattr('/cdrom'): [Errno 2] No such file or directory Warning: listattr('/etc/alternatives/irc'): [Errno 2] No such file or directory Warning: listattr('/etc/rc0.d/K06vprocunhide'): [Errno 2] No such file or directory Warning: listattr('/etc/rc2.d/S95vprocunhide'): [Errno 2] No such file or directory Warning: listattr('/etc/rc6.d/K06vprocunhide'): [Errno 2] No such file or directory (...) Warning: listattr('/home/tmp/usr/share/autoconf2.13/acconfig.h'): [Errno 2] No such file or directory Exception '[Errno 40] Too many levels of symbolic links' raised of class 'exceptions.IOError': File "/var/lib/python-support/python2.4/rdiff_backup/robust.py", line 32, in check_common_error try: return function(*args) File "/var/lib/python-support/python2.4/rdiff_backup/rpath.py", line 1123, in append return self.__class__(self.conn, self.base, self.index + (ext,)) File "/var/lib/python-support/python2.4/rdiff_backup/rpath.py", line 868, in __init__ else: self.setdata() File "/var/lib/python-support/python2.4/rdiff_backup/rpath.py", line 893, in setdata if self.lstat(): self.conn.rpath.setdata_local(self) File "/var/lib/python-support/python2.4/rdiff_backup/rpath.py", line 1470, in setdata_local if Globals.eas_conn: rpath.data['ea'] = ea_get(rpath) File "/var/lib/python-support/python2.4/rdiff_backup/eas_acls.py", line 584, in rpath_ea_get ea.read_from_rp(rp) File "/var/lib/python-support/python2.4/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 'exceptions.IOError': File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 304, in error_check_Main try: Main(arglist) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 324, in Main take_action(rps) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 280, in take_action elif action == "backup": Backup(rps[0], rps[1]) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 343, in Backup backup.Mirror_and_increment(rpin, rpout, incdir) File "/var/lib/python-support/python2.4/rdiff_backup/backup.py", line 51, in Mirror_and_increment DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath) File "/var/lib/python-support/python2.4/rdiff_backup/backup.py", line 241, in patch_and_increment for diff in rorpiter.FillInIter(source_diffiter, dest_rpath): File "/var/lib/python-support/python2.4/rdiff_backup/rorpiter.py", line 177, in FillInIter for rp in rpiter: File "/var/lib/python-support/python2.4/rdiff_backup/iterfile.py", line 382, in next while not type: type, data = self._get() File "/var/lib/python-support/python2.4/rdiff_backup/iterfile.py", line 414, in _get if not self.buf: self.buf += self.file.read() File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 518, in read return self.connection.VirtualFile.readfromid(self.id, length) File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 450, in __call__ return apply(self.connection.reval, (self.name,) + args) File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 370, in reval if isinstance(result, Exception): raise result Traceback (most recent call last): File "/usr/bin/rdiff-backup", line 30, in ? rdiff_backup.Main.error_check_Main(sys.argv[1:]) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 304, in error_check_Main try: Main(arglist) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 324, in Main take_action(rps) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 280, in take_action elif action == "backup": Backup(rps[0], rps[1]) File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 343, in Backup backup.Mirror_and_increment(rpin, rpout, incdir) File "/var/lib/python-support/python2.4/rdiff_backup/backup.py", line 51, in Mirror_and_increment DestS.patch_and_increment(dest_rpath, source_diffiter, inc_rpath) File "/var/lib/python-support/python2.4/rdiff_backup/backup.py", line 241, in patch_and_increment for diff in rorpiter.FillInIter(source_diffiter, dest_rpath): File "/var/lib/python-support/python2.4/rdiff_backup/rorpiter.py", line 177, in FillInIter for rp in rpiter: File "/var/lib/python-support/python2.4/rdiff_backup/iterfile.py", line 382, in next while not type: type, data = self._get() File "/var/lib/python-support/python2.4/rdiff_backup/iterfile.py", line 414, in _get if not self.buf: self.buf += self.file.read() File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 518, in read return self.connection.VirtualFile.readfromid(self.id, length) File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 450, in __call__ return apply(self.connection.reval, (self.name,) + args) File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 370, in reval if isinstance(result, Exception): raise result IOError: [Errno 40] Too many levels of symbolic links Fatal Error: Lost connection to the remote system -- System Information: Debian Release: 4.0 APT prefers stable APT policy: (500, 'stable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.18-6-vserver-686 Locale: LANG=en_US, LC_CTYPE=no_NO.ISO_8859-1 (charmap=ISO-8859-1) Versions of packages rdiff-backup depends on: ii libc6 2.3.6.ds1-13etch8 GNU C Library: Shared libraries ii librsync1 0.9.7-1 Library which implements the rsync ii python 2.4.4-2 An interactive high-level object-o ii python-support 0.5.6 automated rebuilding support for p Versions of packages rdiff-backup recommends: ii python-pylibacl 0.2.1-3.1 module for manipulating POSIX.1e A ii python-pyxattr 0.2.1-1.1 module for manipulating filesystem -- no debconf information -- To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org