GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu 16.04で失敗したバックアップの復元?

Ubuntuの古いインストールからUbuntu16.04の新しいインストールにバックアップを復元するのに苦労しています。復元しようとすると、次のエラーが発生します。

Failed with an unknown error 続いて:

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

バックアップは正常に完了しましたが、復元できません。

よろしくお願いします!

承認された回答:

編集: 免責事項– Pythonや重複のコードについてはあまり経験がないため、この変更によって悪影響が生じるかどうかはわかりません。私の場合、以下のコード行を追加することで復元を完了することができました。

解決策: volume_name_dictのキーチェックを挿入して、これを乗り越えることができました。 オブジェクト。

新しい行:if vol_num in backup_set.volume_name_dict.keys():

重複0.7.06では、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)

Pythonに精通していない場合(私はそうではありません)、ここでコードを検証できます:http://pep8online.com/ –インデントは適切に整列する必要があります。


Ubuntu
  1. Ubuntuでスワップファイルを追加する方法

  2. Ubuntu20.04システムのコマンドラインを使用してUbuntuにファイルをダウンロードする

  3. g++ を Ubuntu にインストールする方法

  1. Ubuntu18.04でホスト名を変更する方法

  2. VIM:Ubuntu で正確な行に移動する方法

  3. Ubuntu の SSH コマンドラインの代替

  1. UbuntuLinuxでファイルを削除する方法

  2. UbuntuでGoogleドライブへのファイルバックアップをスケジュールする方法

  3. UbuntuのコマンドラインからPDFファイルを簡単に開く方法