所以我遇到了这个错误,这显然是一个已知问题。我正在寻找一种解决方法,直到它被修复,因为没有系统备份我无法承受。
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)
相关问题:
核心问题是 Unicode 字符串——你在某个地方找到了它们,而 Duplicity(或者至少是你可能使用的版本)没有配置为正确处理 Unicode 字符串。这是由于 Python 2 的警告。
在 Python 2 中,有两个单独的“字符串”类型类:
str
- 这是在许多系统中看到的典型标准 ASCII 编解码器,或多或少只是标准 AZ、0-9、键盘字符集中的一些符号。unicode
- 这是 UTF-8 编码、UTF-16 等编码,它们有大量的国际字符、表情符号等。无论传递给 Duplicity 的什么,在这种情况下,我们都可能使用 UTF 字符集中超出标准 ASCII 字符范围的字符。这就是我们
UnicodeDecodeError
在回溯中得到 a 的原因——我们试图将 Unicode 字符串转换为 ASCII 字符串,但由于字符超出 ASCII 字符集,我们不能。我建议在 Duplicity 中提交一个错误以说明他们没有正确处理 Unicode,但我也会查看 Duplicity 正在处理的任何文件,并确保您没有任何 Unicode 字符(或隐藏的秘密控制字符)在它试图使用的字符串。
确保您使用最新版本 0.7.12,因为在这方面有一些改进。
看起来 duplicity 试图引发TimeException,但在打印错误翻译时绊倒了。
当前的解决方法应该是设置 LC_ALL env var 以禁止重复翻译和使用默认的英文字符串。要么导出设置,要么把它放在你的重复调用前面,就像这样
这当然不能解决错误,但至少显示错误(TimeException)是由什么引起的。
..ede/duply.net