Sto lottando per ripristinare i backup da una precedente installazione di Ubuntu a una nuova installazione su Ubuntu 16.04. Ottengo il seguente errore durante il tentativo di ripristino:
Failed with an unknown error
Seguito da:
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
Il backup è stato completato correttamente ma non riesco a ripristinarlo.
Grazie in anticipo!
Risposta accettata:
Modifica: Dichiarazione di non responsabilità:non ho molta esperienza con Python o il codice della duplicità, quindi non posso dire se questa modifica causerà o meno effetti dannosi. Per quanto mi riguarda, sono stato in grado di completare il ripristino aggiungendo la riga di codice di seguito.
Soluzione: Sono stato in grado di superare questo inserendo un controllo chiave per il volume_name_dict
oggetto.
Nuova riga:if vol_num in backup_set.volume_name_dict.keys():
Nella duplicità 0.7.06, puoi sostituire questo metodo alla riga 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)
Se non hai familiarità con Python (non lo sono) puoi convalidare il codice qui:http://pep8online.com/ – i rientri devono essere allineati correttamente.