Como faço para remontar aleatoriamente fragmentos de arquivos tar?

1

Eu tenho um cliente cujos sites foram migrados para um novo servidor em 2012 e estou tentando reunir o arquivo antigo para recuperar um dos sites que não foram movidos. Eu encontrei um conjunto de arquivos em um diretório temp no novo host que tinha 15 arquivos nele, todos nomeados "obfw", seguido por 6 caracteres aleatórios, e todos datados aleatoriamente, variando de 0 bytes a 207MB. Eles são todos arquivos, e se eu acrescentar o arquivo .tar.gz ao final de qualquer um deles (exceto o de 0 byte) e abri-los com o gerenciador de arquivos, todos eles mostram que são arquivos para uma pasta de 2GB chamada backup. 9.8.2012_13-35-26_p24acata, todos da mesma data (que é a data em que foram migrados). Eu tentei juntar os arquivos em várias ordens (alfa, alfa invertida, por datas aparentes), e cada um morre quando tento extrair o arquivo resultante com "entrada gzip truncada" ou "falha de compactação gzip". No entanto, parece que as ordens diferentes que eu agrupo os arquivos em dar quantidades variadas dos dados corretos, então definitivamente parece que há pelo menos uma chance de que todos eles possam ser recombinados para criar um arquivo válido.

Existe uma maneira de ler os cabeçalhos desses fragmentos para ver em que ordem devo colocá-los?

    
por Michael VanDeMar 21.02.2014 / 06:22

3 respostas

1

Você precisa compor todos os pedidos possíveis. Um jeito Perl:

#!/usr/bin/perl
use Algorithm::Permute;

@files = grep /^archive/, <*>;

my $p = new Algorithm::Permute([@files]);

while (@res = $p->next) {
    print "order='", join ' ', @res,"'\n";
    print "cat \$order > perm.tar.xz\n";
    print "tar xvJf perm.tar.xz\n";
}

e

perl compose.pl|bash 

Dependendo do número de partes, a complexidade é n! . Veja também Permutação .

    
por 26.02.2014 / 15:27
0

Há uma contradição aqui:

I have tried joining the files together in various orders (alpha, alpha reversed, by apparent dates), and each one dies when I try and extract the resulting archive either with "truncated gzip input" or "gzip compression failed". However, it appears that the different orders that I cat the files together in give varying amounts of the correct data,

Se eles não funcionam e lançam um erro, em que sentido eles fornecem uma quantidade de dados corretos?

De qualquer forma, se todos eles funcionarem como arquivos tar individualmente, mas estiverem truncados, você provavelmente está sem sorte; arquivos tar começam com um cabeçalho que é de onde vem a informação . Portanto, qualquer arquivo que pareça ser um arquivo tar dessa forma é um arquivo tar - não é uma parte do meio de um, já que tal peça não conteria um cabeçalho. Particularmente não é um cabeçalho exatamente no lugar certo, que funciona para permitir que eles funcionem como um arquivo tar individual.

No entanto , se você observar o que realmente pode encontrar em cada peça, elas podem conter diferentes partes por qualquer motivo; eles também podem conter apenas a mesma coisa em comprimentos variados.

    
por 21.02.2014 / 07:47
0

Se todos os arquivos com tamanho diferente de zero mostrarem que são arquivos tar, eles serão. É mais fácil verificar se usando o comando file na linha de comando, não é necessário renomear os arquivos para isso.

No entanto, ao concatenar arquivos tar você não obtém um novo arquivo tar para extrair, pode tentar fazer isso com algo como:

$ echo a > a
$ echo b > b
$ tar cvf a.tar a
a
$ tar cvf b.tar b
b
$ cat a.tar b.tar > c.tar
$ tar tvf c.tar
-rw-rw-r-- anthon/users      2 2014-02-21 07:34 a

Observe que b não é mostrado no resultado do tar (ele está lá, mas há um marcador de final de arquivo no final de a.tar , o que faz com que tar pare de ler o arquivo.

Portanto, concatenar os arquivos tar juntos como você indica não ajudará. O que você pode tentar é extrair o conteúdo dos arquivos tar um no momento e olhar para todos os arquivos no diretório (o que você indica como "pasta") e usar file nos dados extraídos para ver se você encontra algo que é algum tipo de arquivo. Espero que você encontre alguma coisa faz sentido (outro, possível compactado, tar ou cpio archive, qual seria o cabeçalho e trabalhar a partir daí, concatenando a saída juntos.

Certifique-se de renomear cada diretório / pasta de saída extraída, pois todos eles têm o mesmo nome.

Pode haver informações extras nos arquivos tar (ou no final além do marcador de marcação de alcatrão) que o programa que criou esses arquivos podem usar para reconstrução:

$ echo xxxx >> a.tar
$ tar tvf a.tar
-rw-rw-r-- anthon/users      2 2014-02-21 07:34 a

sem conhecer o programa que fez isso.

As partes de 2GB fazem sentido, pois há esse limite de tamanho de arquivo em sistemas mais antigos (arquivos). Arquivos de videofiles onde os primeiros para eu atingir esse limite em meados dos anos 90 e eu tive que mudar de usar o EFS para o XFS como sistema de arquivos.

    
por 21.02.2014 / 07:55

Tags