Restic: Données provenant d'un instantané incomplet.

CrĂ©Ă© le 23 aoĂ»t 2018  Â·  30Commentaires  Â·  Source: restic/restic

restic 0.9.1 compilé avec go1.10.3 sur darwin / amd64

J'utilisais restic pour sauvegarder un grand volume de donnĂ©es sur blackblaze. Malheureusement, il y a eu une panne matĂ©rielle sur le volume en cours de sauvegarde avant que l'instantanĂ© initial ne puisse se terminer. Existe-t-il un moyen de rĂ©cupĂ©rer certaines de mes donnĂ©es du rĂ©fĂ©rentiel maintenant? Les instantanĂ©s de la liste de restic et le montage de restic semblent tous deux se bloquer indĂ©finiment lorsque j'essaye. Je ne suis mĂȘme pas invitĂ© Ă  entrer le mot de passe du repo. La sauvegarde avait Ă©tĂ© interrompue normalement avant la panne matĂ©rielle, si cela peut aider.

feature suggestion questioproblem

Commentaire le plus utile

Donc, pour ajouter un peu d'histoire: j'ai lu le numéro de github, puis je suis allé prendre une douche et je me suis dit: "hm, ce n'est pas si difficile à faire". Il s'avÚre que j'avais raison, et ce n'était pas le cas. Si cette fonctionnalité est utile pour d'autres, nous pouvons la transformer en une commande appropriée plus tard, mais pour le moment, j'espÚre que cela fonctionne pour vous et que vous pourrez accéder aux données déjà téléchargées sur B2.

De combien de données s'agissait-il? Combien avez-vous récupéré?

Bonne chance!

Tous les 30 commentaires

Ah, hm. Avez-vous besoin d'un fichier spécifique ou simplement de «toutes les données qui existent»? Les données sont là, et restic a tous les moyens de les extraire, mais cela signifierait soit un script autour de restic (qui sera trÚs lent), soit l'ajout de code personnalisé pour restic.

Question honnĂȘte: quelle est l'importance des donnĂ©es pour vous? Je pourrais passer un peu de temps aujourd'hui Ă  pirater quelque chose ensemble pour vous, ce qui devrait vous donner accĂšs Ă  presque toutes les donnĂ©es qui ont Ă©tĂ© tĂ©lĂ©chargĂ©es dans le dĂ©pĂŽt, mais ce n'est probablement pas aussi "prĂȘt pour la production" que la plupart du code. :)

Les donnĂ©es sont trĂšs importantes pour moi et malheureusement il n'y a pas d'autre copie. Je sais que ce n'est pas idĂ©al, mais c'Ă©tait un problĂšme que j'essayais de rĂ©soudre. Je cherche un correctif matĂ©riel pour essayer de remettre le volume en ligne, mais cela ne semble pas trop optimiste pour le moment. S'il y avait un moyen pour moi de spĂ©cifier un rĂ©pertoire et d'ĂȘtre en mesure d'accĂ©der et de tĂ©lĂ©charger tout ce qui se trouve Ă  l'intĂ©rieur de ce rĂ©pertoire, cela me sauverait sĂ©rieusement la vie. C'est beaucoup de donnĂ©es (une grande partie est des projets vidĂ©o), donc l'option la plus rapide serait prĂ©fĂ©rable. Cela Ă©tant dit, je ne sais pas vraiment combien de travail cela prendrait et j'apprĂ©cie que ce soit du logiciel libre, mais je serais extrĂȘmement reconnaissant si cela pouvait ĂȘtre rendu possible.

ok, je vais voir ce que je peux faire.

Merci beaucoup.

Vous pouvez commencer par exécuter restic rebuild-index , nous avons donc un nouvel index couvrant tous les packs du dépÎt.

Commencer maintenant.

Wow, c'est super généreux de ta part @ fd0.

Si je peux vous aider Ă  tester quoi que ce soit Ă  ce sujet, faites-le moi savoir.

Est-ce que restic rebuild-index devrait me demander le mot de passe du repo? Ce n'est pas encore le cas. Je soupçonne que cela peut prendre un certain temps en raison de la quantité de données dans le repo. Je suis parfaitement content de le laisser fonctionner tout le week-end, ou la semaine prochaine si nécessaire. Je veux juste m'assurer qu'il n'a pas besoin d'un mot de passe de ma part avant de le laisser sans surveillance pendant une longue période.

Hm, il devrait demander un mot de passe dĂšs le dĂ©but. Il doit dĂ©crypter tous les en-tĂȘtes de tous les fichiers du dĂ©pĂŽt. Avez-vous peut-ĂȘtre exportĂ© la variable d'environnement RESTIC_PASSWORD , elle n'a donc pas besoin d'un mot de passe de votre part?

Il devrait imprimer quelque chose comme ça dÚs le début:

repository ed6136ad opened successfully, password is correct

Au moins lorsqu'il est exécuté de maniÚre interactive (pas de redirection de stdout vers un fichier journal).

Vous pouvez également sauter le rebuild-index si les 15 derniÚres minutes des données téléchargées ne sont pas si importantes, nous pouvons toujours le faire plus tard.

Je n'ai pas que la variable d'environnement RESTIC_PASSWORD dĂ©finie, mais je vais la dĂ©finir et laisser la commande s'exĂ©cuter. Il n'a rien retournĂ© pendant environ 10 minutes, alors je lui ai donnĂ© un ctrl-c et j'ai rĂ©essayĂ©. Ma syntaxe est correcte, non? restic -r b2:MY_BUCKET_NAME:/ rebuild-index Dans tous les cas, les 15 derniĂšres minutes de donnĂ©es devraient ĂȘtre trĂšs petites par rapport au total des donnĂ©es tĂ©lĂ©chargĂ©es, donc je serais parfaitement heureux d'y revenir plus tard.

ok, alors ne lancez pas encore rebuild-index , nous pouvons donc essayer le code de récupération :)

J'ai poussé un commit dans la branche recover-data , construisez juste restic ( go run build.go ) et appelez-le comme ceci:

$ restic -r b2:MY_BUCKET_NAME:/ recover

Il doit ensuite lister toutes les arborescences du référentiel, trouver les arborescences racine et créer un nouvel instantané faisant référence à toutes les arborescences racine:

repository abe002d6 opened successfully, password is correct
load index files
load 543 trees
tree (543/543)
done
found 2 roots
save tree with 2 nodes
saved new snapshot 26f25bf1

Ensuite, vous avez un instantané ( 26f25bf1 dans ce cas) que vous pouvez restaurer, ou utilisez simplement restic mount pour le parcourir. Vous pouvez également simplement le lister:

$ restic ls -l 26f25bf1 /
repository abe002d6 opened successfully, password is correct
snapshot aac6d0ed of [/recover] filtered by [/] at 2018-08-23 22:23:56.903268714 +0200 CEST):
drwxr-xr-x     0     0      0 2018-08-23 22:23:56 /0b9e25fb
drwxr-xr-x     0     0      0 2018-08-23 22:23:56 /d0d9386a

Les répertoires de niveau supérieur sont nommés d'aprÚs les ID d'arborescence, ils sont donc un peu cryptiques, mais le niveau suivant a des noms normaux.

Faites-moi savoir si cela vous aide!

Donc, pour ajouter un peu d'histoire: j'ai lu le numéro de github, puis je suis allé prendre une douche et je me suis dit: "hm, ce n'est pas si difficile à faire". Il s'avÚre que j'avais raison, et ce n'était pas le cas. Si cette fonctionnalité est utile pour d'autres, nous pouvons la transformer en une commande appropriée plus tard, mais pour le moment, j'espÚre que cela fonctionne pour vous et que vous pourrez accéder aux données déjà téléchargées sur B2.

De combien de données s'agissait-il? Combien avez-vous récupéré?

Bonne chance!

Hou la la! C'Ă©tait rapide! Merci beaucoup! Je viens de cloner le repo et je vais essayer de le construire maintenant. J'ai Ă©galement compris pourquoi rebuild-index ne fonctionnait pas. C'Ă©tait un problĂšme DNS sur le rĂ©seau sur lequel se trouve notre serveur. J'ai corrigĂ© cela et j'ai obtenu Fatal: unable to create lock in backend: repository is already locked by PID 41208 donc apparemment mon tĂ©lĂ©chargement ne s'est pas arrĂȘtĂ© aprĂšs tout. La commande unlock semble avoir effacĂ© le problĂšme et rebuild-index est en cours d'exĂ©cution.

Je vais en faire autant que je peux aujourd'hui, mais je pars pour le nord du Michigan pour le week-end dans environ 15 minutes et je ne pense pas que mon accÚs Internet sera trÚs bon là-bas. Cela attirera toute mon attention lundi à mon retour et je vous donnerai plus de détails :-)

Merci beaucoup pour cela! Désolé de vous laisser en suspens, mais je vous contacterai lundi.

Si cette fonctionnalité est utile pour d'autres, nous pouvons la transformer en une commande appropriée plus tard

J'aimerais aider de toutes les maniĂšres possibles. Ma vitesse de tĂ©lĂ©chargement ici est de 1 Mbps et mes sauvegardes initiales peuvent donc prendre jusqu'Ă  3-6 mois. Avoir un moyen de restaurer avant la fin serait une excellente fonctionnalitĂ©, surtout si ce n'est pas trop difficile, comme vous le dites. Faites-moi savoir comment je peux ĂȘtre utile! Merci beaucoup pour votre travail! :RÉ

De plus, votre solution est assez brillante, je pense. ÉlĂ©gant et assez simple.

Désolé de vous laisser en suspens, mais je vous contacterai lundi.

Ne vous inquiétez pas, je suis juste curieux de savoir si cela fonctionne: lunettes de soleil:

Les donnĂ©es sont en sĂ©curitĂ© chez B2 et ne disparaĂźtront pas. MĂȘme la commande recover ne changera aucune donnĂ©e, elle la lira simplement, ajoutera un autre fichier et un instantanĂ©, et c'est tout.

Donc, pour vous donner un peu de contexte (peut-ĂȘtre que je dĂ©velopperai cela dans un article de blog plus tard): Sous le capot, un rĂ©fĂ©rentiel restic contient diffĂ©rents types de fichiers, par exemple snapshot et data fichiers:

  • data fichiers tree ou data courts, avec un en-tĂȘte Ă  la fin dĂ©crivant ce qu'il y a dans le fichier et oĂč exactement
  • snapshot fichiers tree

Lorsqu'un fichier est enregistré avec restic, il est coupé en blobs data , qui sont collectés et enregistrés ensemble dans un ou plusieurs fichiers du référentiel. Le nom du fichier ainsi que la liste des références (ID) aux blobs data sont ensuite enregistrés dans une arborescence. Lorsque restic a terminé l'archivage du répertoire, la liste des fichiers (noms et références pour data blobs) est enregistrée en tant que tree blob dans un autre fichier data .

Pour les sous-répertoires, restic stocke le nom du sous-répertoire avec la référence du blob tree décrivant le contenu dans un autre tree .

À la fin de l'exĂ©cution de restic backup , nous avons une racine tree qui n'est rĂ©fĂ©rencĂ©e par aucun autre arbre, mais contient toutes les rĂ©fĂ©rences Ă  tous les arbres de niveau supĂ©rieur et donc (indirectement) Ă  tous les fichiers et sous-rĂ©pertoires dans la sauvegarde. Comme derniĂšre Ă©tape, restic crĂ©e un nouveau fichier snapshot qui fait rĂ©fĂ©rence Ă  la racine tree .

Si vous dites à restic d'oublier un instantané particulier, l'arborescence racine n'est plus référencée. restic prune détecte cela et supprime l'arbre et tous les autres blobs tree et data inutiles.

En général, un tree n'est enregistré dans le référentiel que lorsque tous les fichiers et sous-répertoires qu'il contient ont été enregistrés avec succÚs. Ainsi, dÚs qu'un blob tree est là, nous pouvons supposer que les données auxquelles il fait référence (y compris les sous-répertoires) sont également là.

Lorsque la restauration est abandonnée pendant la sauvegarde, il y aura un tas de blobs tree dans le dépÎt, ainsi que les données dans les fichiers auxquels ils font référence. Donc, pour récupérer les données, restic n'a besoin que de faire ce qui suit:

  • faire une liste de tous les identifiants d'arbres, noter quels arbres ont Ă©tĂ© rĂ©fĂ©rencĂ©s (initialement: aucun)
  • pour chaque arbre:

    • charger l'arbre

    • pour chaque entrĂ©e de l'arborescence:



      • si est un rĂ©pertoire, il fait rĂ©fĂ©rence Ă  un autre arbre, marquez cet arbre comme rĂ©fĂ©rencĂ© dans la liste



Ensuite, parcourez à nouveau la liste des arbres, jetez tous ceux pour lesquels nous avons vu des références. Les arbres restants sont les arbres racines, ce qui signifie soit les arbres qui sont (ou ont été) directement référencés par un instantané, soit qui sont «pendantes» suite à une exécution avortée de restic backup .

Comme derniÚre étape, créez une nouvelle arborescence qui répertorie toutes les arborescences racine, enregistrez-la dans le référentiel, puis créez un nouvel instantané qui fait référence à cette nouvelle arborescence.

Vous pouvez alors simplement utiliser ce nouvel instantané normalement, sauf pour les noms cryptiques des répertoires (qui ne sont que les identifiants courts des arbres racines que nous avons trouvés).

Avant de fusionner cela avec master, je pense que nous devrions faire ce qui suit:

  • Ajoutez une option Ă  recover qui exclut les arbres racines rĂ©fĂ©rencĂ©s par les instantanĂ©s existants, donc nous n'obtenons que des arbres racines vraiment suspendus. Peut-ĂȘtre que ce comportement devrait mĂȘme ĂȘtre celui par dĂ©faut, la plupart des utilisateurs ne sont probablement pas intĂ©ressĂ©s par les donnĂ©es auxquelles ils peuvent accĂ©der via des instantanĂ©s existants ...
  • Rendez Ă©galement les objets blob data non rĂ©fĂ©rencĂ©s disponibles dans le nouvel instantanĂ©, afin que les utilisateurs puissent rassembler des parties de fichiers qui n'Ă©taient pas encore incluses dans un objet tree .
  • DĂ©finissez des mĂ©tadonnĂ©es sensibles pour la nouvelle arborescence et le nouvel instantanĂ©. Pour le moment, c'est trĂšs moche (juste assez pour que ça marche).
  • Un meilleur rapport de progression, c'est trĂšs piratĂ© en ce moment

Petite mise à jour à ce sujet: j'ai commencé un rebuild-index avant de partir jeudi dernier. Qui est mort avant mon retour avec un read: connection reset by peer . Je l'ai redémarré hier avec un nombre plus élevé de connexions parallÚles à b2 et il semble bien fonctionner. C'est seulement à 5% maintenant, mais je m'attends à ce que cela prenne un certain temps. Le seau b2 contient environ 90 To et les répertoires que je sauvegardais contenaient probablement environ 110 à 120 To.

Je suis honnĂȘtement trĂšs impressionnĂ© par le fait que restic soit restĂ© si stable pendant le tĂ©lĂ©chargement. J'ai essayĂ© cloudberry pour Mac avant d'essayer restic et je n'ai pas pu le faire fonctionner avec autant de donnĂ©es. J'utilise restic pour sauvegarder mon ordinateur portable Ă  la maison et je l'adore, alors j'ai pensĂ© que je tenterais de le faire. Comme je n'ai mĂȘme pas terminĂ© mon tĂ©lĂ©chargement initial, je n'ai aucune idĂ©e de la façon dont quelque chose comme un prune ira, mais je serai heureux de vous tenir au courant si vous avez besoin de donnĂ©es sur le comportement de Restic avec de gros volumes de donnĂ©es . Si je peux l'obtenir pour terminer toutes les opĂ©rations nĂ©cessaires pour maintenir une sauvegarde hebdomadaire en moins d'une semaine, je pense que ce sera un excellent candidat pour gĂ©rer ces sauvegardes.

Pour le moment, j'ai quelques questions: Dois-je laisser ce rebuild-index se terminer avant d'essayer un recover ? Vais-je perdre quelque chose si je ne le fais pas? J'y ai réfléchi et je pense que j'aimerais récupérer autant que possible du premier coup si possible car les choses prennent un certain temps à fonctionner sur autant de données, mais s'il vaut mieux tuer cela, exécutez recover abord et rebuild-index plus tard, je peux le faire. Est-ce que l'exécution de rebuild-index ou recover avec un indicateur --quiet accélérera les choses comme elle le fait avec la commande backup ?

OK cool! Je recommanderais de faire ce qui suit:

  • Annuler le rebuild-index
  • ExĂ©cutez restic recover
  • Jetez un Ɠil aux donnĂ©es contenues dans l'instantanĂ© nouvellement crĂ©Ă©

Si vous souhaitez essayer, vous pouvez exécuter à nouveau rebuild-index et récupérer les mégaoctets de données restants du dépÎt. Ce sera probablement moins de quelques centaines de mégaoctets, et il est probable que cela ne révélera aucune nouvelle donnée non encore contenue dans l'instantané. Mais vous pouvez l'essayer :)

Pendant que rebuild-index est en cours d'exécution, vous ne pouvez pas accéder au référentiel.

L'exécution de rebuild-index ou de restauration avec un indicateur --quiet accélérera-t-elle les choses comme elle le fait avec la commande backup?

Nan.

J'ai laissé les choses fonctionner du jour au lendemain et il semble avoir rempli le disque dur et a échoué:

found 755 roots Fatal: unable to save new tree to the repo: fs.TempFile: open /var/folders/tq/67qp8py137n_5nzf563qlylr0000gn/T/restic-temp-pack-913168611: no space left on device

Existe-t-il un moyen simple de savoir combien de données cette opération devra télécharger ou un moyen de réduire la quantité de données téléchargées?

De plus, si je veux libérer cet espace disque, est-ce que restic cache --cleanup le moyen de le faire?

Non, cela ne supprime que les rĂ©pertoires de cache qui n'ont pas Ă©tĂ© utilisĂ©s depuis 30 jours. Supprimez simplement le rĂ©pertoire de cache, qui devrait ĂȘtre quelque part dans votre rĂ©pertoire personnel.

Quelle commande avez-vous exécutée exactement? rebuild-index et recover ne devraient pas enregistrer beaucoup de données sur le disque dur, à l'exception du cache de métadonnées ...

Pas à mon bureau pour le moment. mais c'était quelque chose comme: ./restic -o b2.connections=x -r b2:mybucket:/ recover Je pense que x avait réglé quelque chose d'énorme. Cela peut avoir fait partie du problÚme. Je peux le redémarrer sans le bit -o b2.connections=x . J'ai trouvé le répertoire de cache et je l'ai supprimé.

Tout d'abord, un outil génial.
J'ai également besoin de sauvegarder des téraoctets de données sur une connexion lente et j'ai une chance que la sauvegarde échoue alors qu'elle n'est toujours pas terminée. Existe-t-il un moyen recommandé de ne sauvegarder que quelques fichiers à la fois?

Existe-t-il un moyen recommandé de ne sauvegarder que quelques fichiers à la fois?

Ce qui fonctionne généralement (j'ai entendu dire) est de sauvegarder des parties individuelles des données source (par exemple des répertoires uniques) et, lorsque cela est terminé, de sauvegarder tous les répertoires ensemble. Lorsque les données source n'ont pas changé, restic ne devrait télécharger presque rien en raison de la déduplication intégrée.

Un meilleur endroit pour de telles questions serait le forum à https://forum.restic.net , la question (et les réponses!) Y sont beaucoup plus découvrables.

@pauletg alors, comment ça s'est passé?

J'ai proposé la nouvelle commande recover dans # 2056.

Je n'ai pas beaucoup progressĂ© sur la rĂ©cupĂ©ration du restic depuis mon dernier message. La bonne nouvelle est que nous avons rĂ©ussi Ă  relancer le serveur et que les donnĂ©es n'ont pas Ă©tĂ© endommagĂ©es par le crash, donc j'ai mes donnĂ©es. La commande de rĂ©cupĂ©ration semble remplir le HD de ma machine, avant qu'elle ne puisse se terminer. Cela aurait pu ĂȘtre causĂ© par plusieurs facteurs: Ma sauvegarde Ă©tait Ă©norme et j'utilisais un grand nombre de connexions Ă  b2 pour le tĂ©lĂ©chargement et le HD sur la machine que j'utilisais pour la restauration Ă©tait relativement petit. Je suis sĂ»r que cela fonctionnerait probablement trĂšs bien si ma sauvegarde Ă©tait d'une taille plus raisonnable. Faites-moi savoir si d'autres informations vous seraient utiles. J'apprĂ©cie vraiment que vous travailliez lĂ -dessus et avoir cette fonctionnalitĂ© disponible pour mes sauvegardes d'ordinateur portable est vraiment agrĂ©able.

Merci pour les commentaires! Si vous aimez (et avez beaucoup de temps), vous pouvez réessayer avec --no-cache , mais cela prendra encore plus de temps. Je fermerai ce problÚme lorsque # 2056 sera fusionné.

S'il vous plaßt laissez-nous savoir si vous avez des commentaires supplémentaires! :)

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