Recuperando um backup danificado do Deja Dup

Iniciado por Lunarts, 28 de Novembro de 2012, 18:47

tópico anterior - próximo tópico

Lunarts

Artigo por Lunarts-studio.com.br, ultima atualizacao 28/11/12

Arrombando um backup teimoso do Deja Dup

   Obs: Se nao tiver leafpad use o gedit, ou algum outro editor de texto   

   Deja Dup tem sido uma ferramenta de backup fiel para usuarios do Ubuntu(vem instalada por padrao), fornecendo um meio facil e seguro de armazenar seus valiosos dados. No Xubuntu no entanto, percebi logo que ele nao se comporta muito bem; entao, se voce reinstalasse seu linux(incluido particao /home se existir), e quisesse restaurar seus arquivos, mas um error nao o deixasse fazer isso, o que voce faria? No meu caso, entrar em panico; mas nao se desespere, eu ja passei por isso e pesquisei solucoes para me ajudar, as quais compartilho com voce para que talvez o ajude.   
   
   Se voce comecar a restaurar seu backup, e ele agir corretamente ate topar com um arquivo que da uma mensagem de erro fatal mencionando librsync, patch e erro 103(eu acho que o numero era esse), desmoronando todo o processo de restauracao de backup em seguida, por favor consulte o seguinte link: https://launchpadlibrarian.net/120685602/duplicity_hax_662442_for_rev884.diff

   Voce vai precisar corrigir o Deja Dup para que ele ignore os arquivos problematicos e restaure o resto; para aplicar o patch, abra o terminal(icone de janela preta com > e _), crie um copia 'patchdir_old.py'(caso voce estrague o arquivo) e:

sudo leafpad /usr/share/pyshared/duplicity/patchdir.py

   Com a funcionalidade de procura do leafpad ache cada linha com um '-' correspondente no patchdir.py e as substitua com as linhas com '+' que a vem depois das linhas com '-'. Depois remova os '+' da frente de cada linha, com isso, elas estarao com o espacamento correto, algo importante, pois o arquivo em questao e um arquivo python, qualquer espacamento incorreto estraga o arquivo.  
   
   Salve o arquivo e agora Deja Dup podera pular arquivos defeituosos e sua restauracao vai funcionar, mas apenas para os arquivos sem erro. Se outro erro aparecer, falando de python e indentacao/espacamento ou algo do tipo, voce nao fez corretamento o passo acima. Abra patchdir_old.py, tente novamente e salve como patchdir.py.
   
   Tente lembrar quais arquivos sao os mais importantes que voce tinha e veja se foram restaurados, se nao foram ou se voce quiser o arquivo desaparecido, mesmo nao sendo importante, primeiro crie uma pasta na sua pasta de usuario(/home/seunome), chame-a de 'backup_defeituoso'; entao vai para a sua locacao de backup(provavelmente um hd externo) e navegue ate achar um pasta cheia de arquivos de extensao '.difftar.gpg'(ou sem .gpg se voce nao usava senha); certifique-se de ter ao menos 250GB livres na particao /home, se sim, copie todos os arquivos '.difftar.gpg' para a pasta 'backup_defeituoso'. Apos o longo processo de copia, de uma olhada no arquivo com a extensao '.vol1.difftar.gpg', pegue tudo antes dessa extensao, no meu caso era duplicity-full.20110127T131352Z, entao, no terminal entre na pasta 'backup_defeituoso':

cd buggy_backup

se os arquivos .difftar tiverem a extensao .gpg. voce precisa descriptografa-los.

gpg --multifile --decrypt duplicity-full.20110127T131352Z.*.difftar.gpg

Para economizar espaco, remova os arquivos '.difftar.gpg' da pasta 'backup_defeituoso' e deixe apenas os arquivos .difftar gerados no passo anterior. Voce precisara criar uma pasta para cada um desses '.difftar' com:

for t in duplicity-full.20121115T043504Z.*.difftar; do mkdir $t+_extracted; done

Agora untar os arquivos para as pastas com:

for t in duplicity-full.20121115T043504Z.*.difftar; do tar -xf $t -C /$t+_extracted; done

Para economizar espaco, agora delete os arquivos .difftar e deixe so as pastas com conteudo dentro que acabou de criar. Para achar em qual dos trocentos volumes esta o arquivo sumido que deseja, use o seguinte, onde NAME e o nome do arquivo:

find -name 'NAME'

   Va la e pegue o arquivo do seu ultimo backup completo(ele nao vai ser atual no entanto). O arquivo esta limpo porque o problema todo consiste no fato de que uma das atualizacoes dele esta com problemas, o que o Deja Dup nao suporta por padrao(sem patch), levando o aplicativo a morrer.
   
   Para arquivos que nao sao de texto, isso e tudo que pode fazer; para arquivos de texto voce pode conseguir um arquivo bugado, mas atual e funcional ao fazer os passos anteriores, mas dessa vez para os arquivos contendo 'inc' no nome. Note o nome dos arquivos 'inc', ele contem a data em que foram criados, eles irao de 1 dia depois do backup completo ate a ultima vez que voce fez backup.

   Crie uma pasta com com o nome do seu arquivo(o nome pode ser qualquer um na verdade), no meu caso, 'arquivo_bugado', dentro dessa pasta, crie uma pasta para cada dia em que seu arquivo aparece na pasta diff da pasta com o nome 'inc', com o nome daquele dia(ex: 16, 17...); entao copie para essas pastas o arquivo diff daquele dia e o arquivo do backup original na raiz da pasta 'arquivo_bugado'. No meu caso, o que eu farei em seguida e:

cd buggy_file

rdiff patch file_name.ext 16/file_name.ext file_name_16.ext


Faca isso para cada dia alem do primeiro dia apos o backup completo, por exemplo:

rdiff patch file_name_16.ext 17/file_name.ext file_name_17.ext

   rdiff patch aplica a alteracao do dia X para o arquivo original, resultando em como o arquivo era naquele dia, porque o Deja Dup so armazena os bytes alterados dos documentos depois de uma copia completa(efetuando uma copia incremental).

   Como dito antes, voce obtera no fim o que sera um arquivo de texto atualizado, mas com algumas pequenas areas faltando ou outras com conteudo indesejado; mas e muito melhor do que perder por exemplo 1 semana de programacao efetuada em um arquivo python, ja que sem isso voce so conseguiria a versao do arquivo do dia da ultima copia completa.

   Nota: Se o arquivo diff nao estiver presente na pasta contendo 'inc' do dia X, isso ocorreu porque o arquivo nao mudou naquele dia, ignore esse dia no processo acima. Voce iria por exemplo, dar patch do dia 16 para o 18(porque nao teve alteracao no dia 17)

Conclusao:

   Para Xubuntu ou outros sabores do Ubuntu, use Back in Time ao inves de Deja Dup; se voce realmente quiser levar uma vida de riscos com Deja Dup, antes de qualquer limpeza completa do seu linux e posterior reinstalacao, como teste, restaure seu backup para alguma pasta, se algum erro ocorrer, voce vai saber que seu backup esta comprometido, delete todos os backups e faca um novo.

Creditos:

   Voce pode melhorar esse guia, mas sempre creditando o criador original, lunarts-studio.com.br(conhecido como desenvolvedor do Questverse).


Para uma versao mais atualizadado do guia, com imagens, consulte:


Topico do projeto de jogo | Site de meu projeto de jogo:
http://ubuntuforum-br.org/index.php?topic=98076.0 | http://www.tsukiyoarts.com

adiaswin

ola lunarts

dica muito ultil tenho um back danificado que usei para restaurar meu xubuntu e esta dica ajudou muito

muito obrigado men.
ubuntu 12.04

Lunarts

Fico feliz de ter ajudado, realmente esta rolando alguma coisa bizarra entre o Xubuntu e Deja Dup; fico satisfeito de ter te ajudado a resolver esse problema e com maior agilidade, quando foi comigo demorei um certo tempo em pesquisas e experimentos.
Topico do projeto de jogo | Site de meu projeto de jogo:
http://ubuntuforum-br.org/index.php?topic=98076.0 | http://www.tsukiyoarts.com