Saya berjuang untuk memulihkan cadangan dari instalasi Ubuntu yang lebih lama ke instalasi baru di Ubuntu 16.04. Saya mendapatkan kesalahan berikut saat mencoba memulihkan:
Failed with an unknown error
Diikuti oleh:
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 1461, in do_backup
list_current(col_stats)
File "/usr/bin/duplicity", line 698, in list_current
for path in path_iter:
File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 354, in combine_path_iters
refresh_triple_list(triple_list)
File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 341, in refresh_triple_list
new_triple = get_triple(old_triple[1])
File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 327, in get_triple
path = path_iter_list[iter_index].next()
File "/usr/lib/python2.7/dist-packages/duplicity/diffdir.py", line 239, in sigtar2path_iter
for tarinfo in tf:
File "/usr/lib/python2.7/tarfile.py", line 2508, in next
tarinfo = self.tarfile.next()
File "/usr/lib/python2.7/tarfile.py", line 2350, in next
raise ReadError("unexpected end of data")
ReadError: unexpected end of data
Pencadangan berhasil diselesaikan tetapi saya tidak dapat memulihkannya.
Terima kasih sebelumnya!
Jawaban yang Diterima:
Sunting: Penafian – Saya tidak punya banyak pengalaman dengan Python atau kode duplikat jadi saya tidak bisa mengatakan apakah modifikasi ini akan atau tidak akan menyebabkan efek yang merugikan. Bagi saya, saya dapat menyelesaikan pemulihan saya dengan menambahkan baris kode di bawah ini.
Solusi: Saya dapat melewati ini dengan memasukkan pemeriksaan kunci untuk volume_name_dict
objek.
Baris baru:if vol_num in backup_set.volume_name_dict.keys():
Dalam duplicity 0.7.06, Anda dapat mengganti metode ini pada baris 752:
def get_fileobj_iter(backup_set):
"""Get file object iterator from backup_set contain given index"""
manifest = backup_set.get_manifest()
volumes = manifest.get_containing_volumes(index)
for vol_num in volumes:
if vol_num in backup_set.volume_name_dict.keys():
yield restore_get_enc_fileobj(backup_set.backend,
backup_set.
volume_name_dict[vol_num],
manifest.
volume_info_dict[vol_num])
cur_vol[0] += 1
log.Progress(_('Processed volume %d of %d') %
(cur_vol[0], num_vols),
cur_vol[0], num_vols)
if hasattr(globals.backend, 'pre_process_download'):
file_names = []
for backup_set in backup_setlist:
manifest = backup_set.get_manifest()
volumes = manifest.get_containing_volumes(index)
for vol_num in volumes:
file_names.append(backup_set.volume_name_dict[vol_num])
globals.backend.pre_process_download(file_names)
fileobj_iters = list(map(get_fileobj_iter, backup_setlist))
tarfiles = list(map(patchdir.TarFile_FromFileobjs, fileobj_iters))
return patchdir.tarfiles2rop_iter(tarfiles, index)
Jika Anda tidak terbiasa dengan Python (saya tidak), Anda dapat memvalidasi kode di sini:http://pep8online.com/ – lekukan harus sejajar dengan benar.