Arquivo gz corrompido

4

Eu tenho um backup de banco de dados MySQL em um arquivo gz. Ao tentar descompactar, recebo o seguinte:

gzip: db_stepup.sql.gz: not in gzip format

Eu li que às vezes é apenas uma questão de remover a extensão gz. Então eu fiz isso e consegui ver o arquivo em um ponto.

(352, 'bs', 'lv', 'Bosnian'),
(353, 'bs', 'lt', 'Bosnian'),
(354, 'bs', 'mk', 'Bosnian'),
(355, 'bs', 'mt', 'Bosnian')B
gzip: db_stepup.sql.gz: not in gzip format
(352, 'bs', 'lv', 'Bosnian'),
(353, 'bs', 'lt', 'Bosnian'),
(354, 'bs', 'mk', 'Bosnian'),
(355, 'bs', 'mt', 'Bosnian')B%pre%%pre%%pre%%pre%%pre%%pre%}Dۓו\EE\DF\CF_\C1    \DBx"<\F7\CC8O3c\CF\D8\C7cF\E3\D8s&Γ]MWW*\B3\AA\AB2\AB\DDO@A\B2el\A1;$B\ABԒ<\B4\F4
\AD' \CEI6\D2\FFp2\F7\DA{\FB\B2 <nk\F4\ADܙ\F5[;\F7\FAv\DE\F6\F7\FF    \C7\F7\A2$\FD\FE\BEX\A9\FF\A1\FD[ͺ\BF\FF2\AB\A7\E3\FE\F4\FE\F1\FBDAAD\FAj\AE\D5\E9\C0W\A8\A5V\EB\FD#\D3\E4o\E34\D0\EAz\DFWC\A8\A2\E9\D9\AF\B4\F2\FE\C9XDh\FEi\BD-\EC^iBɀ\D8XY\F8/\FD%pre%\B5Am\FF\E7\DBR\B7\D8z\EF\F7{7\BE<\B8\F7\D9\DE\CE\DE\C7\ED\FF~\D2\FD\AFĺ\F4w\B5FE빯a\BD\F0U0\AC7EI_\CA \D8\F8
%pre%%pre%%pre%%pre%}Dۓו\EE\DF\CF_\C1 \DBx"<\F7\CC8O3c\CF\D8\C7cF\E3\D8s&Γ]MWW*\B3\AA\AB2\AB\DDO@A\B2el\A1;$B\ABԒ<\B4\F4 \AD' \CEI6\D2\FFp2\F7\DA{\FB\B2 <nk\F4\ADܙ\F5[;\F7\FAv\DE\F6\F7\FF \C7\F7\A2$\FD\FE\BEX\A9\FF\A1\FD[ͺ\BF\FF2\AB\A7\E3\FE\F4\FE\F1\FBDAAD\FAj\AE\D5\E9\C0W\A8\A5V\EB\FD#\D3\E4o\E34\D0\EAz\DFWC\A8\A2\E9\D9\AF\B4\F2\FE\C9XDh\FEi\BD-\EC^iBɀ\D8XY\F8/\FD%pre%\B5Am\FF\E7\DBR\B7\D8z\EF\F7{7\BE<\B8\F7\D9\DE\CE\DE\C7\ED\FF~\D2\FD\AFĺ\F4w\B5FE빯a\BD\F0U0\AC7EI_\CA \D8\F8

Neste ponto, o arquivo fica embaralhado. Parece um problema de codificação de texto, existe uma maneira de recuperar os dados no arquivo?

Aqui está o arquivo se você quiser dar uma olhada

    
por kumiau 10.05.2016 / 23:46

1 resposta

8

O arquivo começa em ASCII simples, portanto não é compactado.

$ hexdump -C db_stepup.sql.gz | less
00000000  2d 2d 20 70 68 70 4d 79  41 64 6d 69 6e 20 53 51  |-- phpMyAdmin SQ|
00000010  4c 20 44 75 6d 70 0a 2d  2d 20 76 65 72 73 69 6f  |L Dump.-- versio|
00000020  6e 20 34 2e 31 2e 31 34  2e 38 0a 2d 2d 20 68 74  |n 4.1.14.8.-- ht|
[...]

Isso continua por um tempo até que, em algum lugar no meio, fica binário.

00012390  27 2c 20 27 6d 74 27 2c  20 27 42 6f 73 6e 69 61  |', 'mt', 'Bosnia|
000123a0  6e 27 29 1f 8b 08 00 00  00 00 00 00 03 7d 9d db  |n')..........}..|
000123b0  93 14 d7 95 ee df cf 5f  c1 db 78 22 3c 11 95 f7  |......._..x"<...|

Começa com 1f 8b 08 ... (que por alguma razão não apareceu como tal na saída que você postou), poderia ser um cabeçalho gzip válido. O ponto de partida é 000123a3 , então vamos dividi-lo ...

$ dd if=db_stepup.sql.gz bs=$((0x000123a3)) skip=1 | gunzip | less
,
(356, 'bs', 'mo', 'Bosnian'),
(357, 'bs', 'mn', 'Bosnian'),
(358, 'bs', 'ne', 'Bosnian'),
[...]

E, ei, esses parecem ser os dados de onde parou. Por alguma estranha razão, o phpMyAdmin parece ter decidido usar o gzip no meio da saída ...

Reencontrando:

$ dd if=db_stepup.sql.gz bs=$((0x000123a3)) count=1 > db_stepup.stitch.sql
$ dd if=db_stepup.sql.gz bs=$((0x000123a3)) skip=1 | gunzip >> db_stepup.stitch.sql

Se você está procurando uma maneira de encontrar tais offsets automaticamente (talvez você tenha mais arquivos quebrados como esse), existe uma pequena ferramenta chamada binwalk , que também pode procurar cabeçalhos de arquivos conhecidos no meio dos arquivos.

$ binwalk db_stepup.sql.gz 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
74659         0x123A3         gzip compressed data, from Unix, NULL date: Thu Jan  1 00:00:00 1970
92556         0x1698C         gzip compressed data, from Unix, NULL date: Thu Jan  1 00:00:00 1970
110522        0x1AFBA         gzip compressed data, from Unix, NULL date: Thu Jan  1 00:00:00 1970
[...]

Como você pode ver, ele tem o mesmo resultado ( 0x123A3 offset). Ele encontra mais de um porque o gzip vem em blocos / partes (você pode até mesmo concatenar múltiplos arquivos gzip) e cada bloco tem o mesmo cabeçalho distinto.

    
por 11.05.2016 / 00:24