duplicity tarfile.ReadError:覆盆子pi 4上的数据意外结束

时间:2020-05-01 15:44:52

标签: raspberry-pi backup raspberry-pi4 duplicity

我想使用双重性从samba网络存储上的raspberry pi 4备份我的文件(大约300GB)。第一个完整备份效果很好,但是增量备份总是会失败,并出现意外的数据终止错误(请参见下文):

Traceback (innermost last):
  File "/usr/local/bin/duplicity", line 100, in <module>
    with_tempdir(main)
  File "/usr/local/bin/duplicity", line 86, in with_tempdir
    fn()
  File "/usr/local/lib/python3.7/dist-packages/duplicity/dup_main.py", line 1538, in main
    do_backup(action)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/dup_main.py", line 1674, in do_backup
    incremental_backup(sig_chain)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/dup_main.py", line 664, in incremental_backup
    globals.backend)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/dup_main.py", line 427, in write_multivol
    at_end = gpg.GzipWriteFile(tarblock_iter, tdp.name, globals.volsize)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/gpg.py", line 454, in GzipWriteFile
    new_block = next(block_iter)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 544, in __next__
    result = self.process(next(self.input_iter))  # pylint: disable=assignment-from-no-return
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 209, in get_delta_iter
    for new_path, sig_path in collated:
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 306, in collate2iters
    relem2 = next(riter2)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 374, in combine_path_iters
    refresh_triple_list(triple_list)
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 361, in refresh_triple_list
    new_triple = get_triple(old_triple[1])
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 347, in get_triple
    path = next(path_iter_list[iter_index])
  File "/usr/local/lib/python3.7/dist-packages/duplicity/diffdir.py", line 256, in sigtar2path_iter
    for tarinfo in tf:
  File "/usr/lib/python3.7/tarfile.py", line 2405, in __iter__
    tarinfo = self.next()
  File "/usr/lib/python3.7/tarfile.py", line 2283, in next
    raise ReadError("unexpected end of data")
 tarfile.ReadError: unexpected end of data

我尝试使用少量文件(大约70GB),并且效果很好。 我还有足够的空间和剩余的RAM。双重版本为0.8.12.1612。

我使用的命令是

duplicity --verbosity info --no-encryption --archive-dir $WORKSPACE/archivedir --tempdir $WORKSPACE/tmp /media/home/backups/srv1 /path/to/my/data

能给我一些建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

There was a bug report on this in 2017, but was eventually closed without fix due to inactivity. There is also a help question from 2016 without a solution.

有时在重复版本0.8.12中存在此错误,并且我发现运行cleanup命令可以修复该错误。即使输出表明没有删除任何内容,也是如此!我不知道为什么。

user@computer:~/.backup$ duplicity ~ --progress b2://XXX:YYY@ZZZ
[...]
 File "/usr/lib/python3.6/tarfile.py", line 2415, in __iter__
    tarinfo = self.next()
  File "/usr/lib/python3.6/tarfile.py", line 2293, in next
    raise ReadError("unexpected end of data")
 tarfile.ReadError: unexpected end of data

然后

duplicity cleanup --force b2://XXX:YYY@ZZZ
Local and Remote metadata are synchronized, no sync needed.
Cleaning up previous partial cleanup backup set, restarting.
Last full backup date: Mon Apr 20 00:56:59 2020
GnuPG passphrase: 
No extraneous files found, nothing deleted in cleanup.

然后它起作用了

user@computer:~/.backup$ duplicity ~ --progress b2://XXX:YYY@ZZZ
backing up: ZZZ
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Mon Apr 20 00:56:59 2020
0.0KB 00:00:03 [0.0KB/s] [>                                        ] 0% ETA 3sec