Duplicity 错误与 python 有关吗?

Duplicity 错误与 python 有关吗?

所以我遇到了这个错误,这显然是一个已知问题。我正在寻找解决方法,直到问题解决,因为我不能没有系统备份。

Traceback (most recent call last):
  File "/usr/bin/duplicity", line 1532, in <module>
    with_tempdir(main)
  File "/usr/bin/duplicity", line 1526, in with_tempdir
    fn()
  File "/usr/bin/duplicity", line 1380, in main
    do_backup(action)
  File "/usr/bin/duplicity", line 1401, in do_backup
    sync_archive(decrypt)
  File "/usr/bin/duplicity", line 1139, in sync_archive
    remote_metafiles, ignored, rem_needpass = get_metafiles(remlist)
  File "/usr/bin/duplicity", line 1029, in get_metafiles
    pr = file_naming.parse(fn)
  File "/usr/lib/python2.7/dist-packages/duplicity/file_naming.py", line 400, in parse
    pr = check_inc()
  File "/usr/lib/python2.7/dist-packages/duplicity/file_naming.py", line 340, in check_inc
    t1 = str2time((m1 or m2).group("start_time"), short)
  File "/usr/lib/python2.7/dist-packages/duplicity/file_naming.py", line 290, in str2time
    t = dup_time.genstrtotime(timestr.upper())
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_time.py", line 295, in genstrtotime
    return override_curtime - intstringtoseconds(timestr)
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_time.py", line 203, in intstringtoseconds
    error()
  File "/usr/lib/python2.7/dist-packages/duplicity/dup_time.py", line 194, in error
    raise TimeException(bad_interval_string % interval_string)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

相关问题:

答案1

核心问题是 Unicode 字符串 - 您在某个地方找到了它们,而 Duplicity(或者至少是您正在使用的版本)未配置为正确处理 Unicode 字符串。这是由于 Python 2 的注意事项。


在 Python 2 中,有两个单独的“字符串”类型类:

  • str- 这是许多系统中看到的典型标准 ASCII 编解码器,或多或少只是标准 AZ、0-9 和键盘字符集中的一些符号。

  • unicode- 这是 UTF-8 编码、UTF-16 等编码,它们具有巨大的各种国际字符、表情符号等

无论传递给 Duplicity 的是什么,在这种情况下,我们很可能使用 UTF 字符集中的字符,该字符超出了标准 ASCII 字符范围。这就是我们UnicodeDecodeError在回溯中得到的原因 - 我们试图将 Unicode 字符串转换为 ASCII 字符串,但由于字符超出了 ASCII 字符集,我们无法做到这一点。


我建议在 Duplicity 中提交一个错误,以指出它们不能正确处理 Unicode,但我也会查看 Duplicity 正在处理的任何文件,并确保它尝试处理的字符串中没有任何 Unicode 字符(或隐藏的秘密控制字符)。

注意:根据链接的错误,这个问题已经修复;这个问题可能在后续版本Deja-Dup,但不是您正在使用的版本,在这种情况下,您需要找到 Backported 或更新的版本来解决该错误。

其中一个错误是,将使用 Unicode 集中的外来字符集的文件名重命名为仅使用 ASCII 的文件名,以便 DejaDup 能够正确处理它们。这是唯一已知的解决方法,除非更新到较新的 DejaDup 版本。

答案2

确保您使用最新版本 0.7.12,因为在这方面有一些改进。

看起来二重性试图提出一个时间异常,但却在打印错误翻译时出错了。

当前的解决方法应该是设置 LC_ALL 环境变量以禁止 duplicity 翻译并使用默认的英文字符串。要么导出设置,要么将其放在 duplicity 调用前面,如下所示

LC_ALL=C duplicity ...

这当然不会解决错误,但至少可以显示错误(TimeException)是由什么引起的。

..ede/duply.net

相关内容