[RESOLVIDO] Compactação com gzip errada, como descompactar?

Iniciado por onhate, 31 de Janeiro de 2011, 12:42

tópico anterior - próximo tópico

onhate

Boa tarde pessoal,

Fiz uma compactação assim "gzip -r --fast -c * > nome.gz" só que assim ele bota todos os arquivos num mesmo arquivo um embaixo do outro... (só descobri agora) e preciso voltar um backup mas não consigo porque ele gerou um arquivo de 22GB com tudo dentro...

Exemplo: o arquivo 1 tem x dentro e o 2 tem y esse arquivo que ele gerou se chama 1 e tem xy dentro, ai não tem como separar...

Os arquivos compactados eram fotos, documentos, pastas, pdfs... tudo...

O que posso fazer para tentar recuperar isso?
--
No Signature =)

navegantesdailusao

Olá, qual a extenção que ficou isso?

para a descompactação, uten de estar vinculado

a zip, tar, gz...


abs
J.E.S.U.S. - Juntos Estaremos Sendo Um Só.

onhate

Ele pegou o nome do primeiro arquivo que achou... nome.jasper e é um arquivo de 22GB... ou seja esta tudo dentro dele... =/
--
No Signature =)

onhate

Não tinha dado UP no post! se fiz foi sem querer.... eu só pedi se ninguém mais poderia me ajudar, estou com este problema e estão me cobrando aqui, está fod*...
Foi mal ai então...
--
No Signature =)

onhate

#4
Créditos ao Felipe Ghellar que me ajudou na lista do Tchêlinux! http://tchelinux.org
Link para o tópico no TcheLinux: https://groups.google.com/d/topic/tchelinux/BdS_bQvbSTA/discussion

CitarO que aconteceu aqui foi equivalente ao seguinte:

1) cada arquivo original foi compactado em um arquivo gzip individual; e
2) todos estes arquivos gzip foram concatenados em um único arquivo.

   Pra reverter isso, tem que dar um jeito de recuperar os arquivos gzip individuais.
   Usando um pouco de técnica forense, é possível fazer isso. Se não tiver nenhuma ferramenta forense disponível, os comandos a seguir podem resolver. (Vou assumir que o arquivo único se chama arquivao.gz e que o shell em uso é o bash. É bom também fazer uma cópia do arquivao.gz.)
   O primeiro passo é localizar os limites de cada arquivo individual dentro do arquivao.gz. Felizmente, como são todos do mesmo tipo (arquivos gzip) e todo arquivo gzip inicia com uma assinatura conhecida (1F-8B-08), isso pode ser feito com um comando grep:

   # grep -a -b -o $'\x1f\x8b\x08' arquivao.gz | cut -d: -f1 > inicios

   Esse comando localiza as posições que contêm os três bytes de assinatura do gzip e guarda estas informações no arquivo "inicios".
   O próximo passo é determinar o limite de cada arquivo individual, para a seguir calcular seu tamanho. Como cada arquivo termina onde começa o seguinte, os limites já são conhecidos:

   # cat inicios | sed -e '1d' > limites
   
   O último arquivo termina, obviamente, no final do arquivao.gz:

   # stat -c %s arquivao.gz >> limites

   Agora já é possível calcular o tamanho de cada arquivo individual:

   # paste inicios limites | awk '{print $2-$1}' > tamanhos

   É útil fazer um "cache" das informações coletadas até agora, incluindo uma contagem de arquivos localizados:

   # paste inicios tamanhos | cat -n > info_arquivos

   Agora, o arquivo "info_arquivos" contém uma linha para cada arquivo gzip localizado, sendo que cada linha contém três colunas. A primeira coluna serve como contador, o que é útil na extração dos arquivos e para depurar eventuais problemas. A segunda coluna contém a posição de início do arquivo, e a terceira coluna contém o seu tamanho em bytes.
   Com estas informações, pode-se usar o dd para extrair os arquivos individuais. Como os nomes originais destes arquivos ainda não são conhecidos, são dados nomes sequenciais:

   # while read -a x; do echo dd bs=1 if=arquivao.gz of=arq-orig-${x[0]}.gz skip=${x[1]} count=${x[2]}; done < info_arquivos

   (Este comando deve estar em uma única linha. O comando "echo" está ali para teste; deve ser removido para realmente extrair os arquivos.)

   Como o arquivao.gz é um tanto grande e a extração é feita byte a byte, é de se esperar que este laço demore para terminar. Se não ocorrer nenhum erro, o resultado é um monte de arquivos chamados "arq-orig-N.gz".
   Para testar a integridade dos arquivos extraídos e verificar se a operação foi bem sucedida, usa-se

   # gzip -v -t arq-orig-*.gz

   Os arquivos extraídos corretamente dão resultado "OK". Para verificar o conteúdo dos arquivos extraídos, usa-se

   # gzip -v -l -N arq-orig-*.gz

   E para extrair os arquivos recuperando os nomes originais:

   # gzip -v -d -N arq-orig-*.gz

   Se tudo der certo, os arquivos originais serão corretamente recuperados, incluindo seus nomes e datas de criação/alteração. Porém, todos os arquivos ficarão no mesmo diretório. Se entre os originais havia arquivos com mesmo nome em diretórios diferentes, o gzip pergunta se deve sobrescrever ou não. Dificilmente um procedimento complexo como esse vai funcionar de primeira, mas aí é questão de ver o que deu errado e tentar contornar. Provavelmente vai consumir um certo tempo, mas que dá pra fazer, dá!

   T+
   Felipe
--
No Signature =)