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

Upgrade to rdiff-backup 1.2.2 introduces problems with symbolic links



Hello.

This problem is fairly well-known, but no useful information about it seems to have been forthcoming on the rdiff-backup mailing list.

http://lists.nongnu.org/archive/html/rdiff-backup-users/2008-12/msg00010.html

rdiff-backup 1.2.2 has some serious problems with symbolic links, which results in aborted and corrupted backups.

Fortunately, the backup can be fixed (on a 1.2.1 host system, at least) with --check-destination-dir, which takes ages to run on large file systems, although the latest attempt at a backup is of course completely lost.

Essentially, I think it's safe to say that one shouldn't upgrade from 1.2.0 or 1.2.1 to 1.2.2 right now.

It's been suggested that 1.2.3 will rectify this problem.

I propose that the version in backports is downgraded to 1.2.1 until then.

rdiff-backup log excerpt:

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 302, in error_check_Main
    try: Main(arglist)
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 322, in Main
    take_action(rps)
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 278, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 341, 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 = "">  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 516, in read
    return self.connection.VirtualFile.readfromid(self.id, length)
  File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 448, 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 23, in ?
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 302, in error_check_Main
    try: Main(arglist)
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 322, in Main
    take_action(rps)
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 278, in take_action
    elif action == "backup": Backup(rps[0], rps[1])
  File "/var/lib/python-support/python2.4/rdiff_backup/Main.py", line 341, 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 = "">  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 516, in read
    return self.connection.VirtualFile.readfromid(self.id, length)
  File "/var/lib/python-support/python2.4/rdiff_backup/connection.py", line 448, 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

--
Jan

Reply to: