Borg: Un dépôt corrompu provoque une vérification de borg, l'échec de la suppression

Créé le 15 mai 2016  ·  4Commentaires  ·  Source: borgbackup/borg

J'ai créé ce référentiel corrompu avec un package Fedora23 cassé sur ppc64, où il a subi une erreur de segmentation peu de temps après le démarrage.

Maintenant, la suppression de borg et la vérification de borg sont vraiment mécontentes de ce référentiel, même après que j'aie verrouillé le borg break-lock dessus et supprimé le verrou désormais obsolète.

Je joins un échantillon. qui est un tar à l'intérieur de zip puisque github ne prend apparemment pas en charge les fichiers tar.gz.
borg-repo.tar.zip

Les erreurs que j'obtiens sont :

[root<strong i="11">@powermac</strong> ~]# borg delete localhost:/tmp/backup
root<strong i="12">@localhost</strong>'s password: 
Remote: Borg 1.0.2: exception in RPC call:
Remote: Traceback (most recent call last):
Remote:   File "/usr/lib64/python3.4/site-packages/borg/remote.py", line 96, in serve
Remote:     res = f(*args)
Remote:   File "/usr/lib64/python3.4/site-packages/borg/repository.py", line 447, in get
Remote:     raise self.ObjectNotFound(id_, self.path) from None
Remote: borg.repository.ObjectNotFound: (b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '/tmp/backup')
Remote: Platform: Linux powermac.localnet 4.4.8-300.fc23.ppc64 #1 SMP Wed Apr 27 17:14:46 UTC 2016 ppc64 ppc64
Remote: Linux: Fedora 23 Twenty Three
Remote: Borg: 1.0.2  Python: CPython 3.4.3
Remote: PID: 22394  CWD: /root
Remote: sys.argv: ['/usr/bin/borg', 'serve', '--umask=077']
Remote: SSH_ORIGINAL_COMMAND: None
Remote: 
Object with key 82 not found in repository localhost:/tmp/backup.
Traceback (most recent call last):
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 1498, in main
    exit_code = archiver.run(args)
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 1452, in run
    return args.func(args)
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 74, in wrapper
    kwargs['manifest'], kwargs['key'] = Manifest.load(repository)
  File "/usr/lib64/python3.4/site-packages/borg/helpers.py", line 93, in load
    cdata = repository.get(cls.MANIFEST_ID)
  File "/usr/lib64/python3.4/site-packages/borg/remote.py", line 354, in get
    for resp in self.get_many([id_]):
  File "/usr/lib64/python3.4/site-packages/borg/remote.py", line 358, in get_many
    for resp in self.call_many('get', [(id_,) for id_ in ids], is_preloaded=is_preloaded):
  File "/usr/lib64/python3.4/site-packages/borg/remote.py", line 263, in call_many
    raise Repository.ObjectNotFound(res[0], self.location.orig)
borg.repository.ObjectNotFound: (82, 'localhost:/tmp/backup')

Platform: Linux powermac.localnet 4.4.8-300.fc23.ppc64 #1 SMP Wed Apr 27 17:14:46 UTC 2016 ppc64 ppc64
Linux: Fedora 23 Twenty Three
Borg: 1.0.2  Python: CPython 3.4.3
PID: 22374  CWD: /root
sys.argv: ['/usr/bin/borg', 'delete', 'localhost:/tmp/backup']
SSH_ORIGINAL_COMMAND: None

[root<strong i="13">@powermac</strong> ~]# borg check localhost:/tmp/backup
root<strong i="14">@localhost</strong>'s password: 
Local Exception.                
Traceback (most recent call last):
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 1498, in main
    exit_code = archiver.run(args)
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 1452, in run
    return args.func(args)
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 80, in wrapper
    return method(self, args, repository=repository, **kwargs)
  File "/usr/lib64/python3.4/site-packages/borg/archiver.py", line 147, in do_check
    last=args.last, prefix=args.prefix, save_space=args.save_space):
  File "/usr/lib64/python3.4/site-packages/borg/archive.py", line 663, in check
    self.key = self.identify_key(repository)
  File "/usr/lib64/python3.4/site-packages/borg/archive.py", line 696, in identify_key
    cdata = repository.get(next(self.chunks.iteritems())[0])
  File "borg/hashindex.pyx", line 341, in borg.hashindex.ChunkKeyIterator.__next__ (borg/hashindex.c:5407)
StopIteration

Platform: Linux powermac.localnet 4.4.8-300.fc23.ppc64 #1 SMP Wed Apr 27 17:14:46 UTC 2016 ppc64 ppc64
Linux: Fedora 23 Twenty Three
Borg: 1.0.2  Python: CPython 3.4.3
PID: 22419  CWD: /root
sys.argv: ['/usr/bin/borg', 'check', 'localhost:/tmp/backup']
SSH_ORIGINAL_COMMAND: None

Tous les 4 commentaires

Le référentiel est complètement vide (pas de segments) c'est de là que vient le crash "borg check". D'autres commandes me donnent cette erreur :

borg.repository.Repository.ObjectNotFound: (
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
'/home/mabe/Projekte/_oss/borg/green1043')

Cette erreur que vous montrez est intéressante : borg.repository.ObjectNotFound: (82, 'localhost:/tmp/backup')

Droit.
J'imagine que c'est un état assez bien connu, cependant, pour un état complètement vide et peut-être qu'affirmer comme ça n'est pas la façon la plus idéale de le gérer ?

Oui, une vérification doit être ajoutée pour abandonner plus tôt et avec un message d'erreur plus clair lorsqu'un référentiel est ouvert sans validation.

J'ai corrigé ça aussi bien que possible :

  • liste borg : efface le message d'erreur lorsqu'il n'y a pas de manifeste, pas de trace.
  • borg check : fonctionne pour le dépôt vide maintenant
  • borg delete repo : fonctionne pour le repo vide (sans manifeste) maintenant
  • mais : borg check --repair ne peut pas réparer ces dépôts. il n'a pas de morceaux, ne peut donc pas déterminer la clé, donc ne peut pas écrire de nouveau manifeste. mais comme repo delete fonctionne maintenant, cela peut être résolu par delete et fresh init.

https://github.com/borgbackup/borg/pull/1137/commits

Cette page vous a été utile?
0 / 5 - 0 notes