Existe um tar ou cpio mais inteligente lá fora para recuperar eficientemente um arquivo armazenado no arquivo?

19

Estou usando tar para arquivar um grupo de arquivos bz2 muito grandes (vários GB).

Se eu usar tar -tf file.tar para listar os arquivos dentro do arquivo, isso levará muito tempo para ser concluído (~ 10 a 15 minutos).

Da mesma forma, cpio -t < file.cpio leva o mesmo tempo para ser concluído, mais ou menos alguns segundos.

Assim, recuperar um arquivo de um arquivo (via tar -xf file.tar myFileOfInterest.bz2 , por exemplo) é tão lento.

Existe um método de arquivamento que mantém um "catálogo" prontamente disponível com o arquivo, para que um arquivo individual dentro do arquivo possa ser recuperado rapidamente?

Por exemplo, algum tipo de catálogo que armazena um ponteiro para um determinado byte no arquivo, assim como o tamanho do arquivo a ser recuperado (assim como quaisquer outras particularidades específicas do sistema de arquivos).

Existe uma ferramenta (ou argumento para tar ou cpio ) que permite a recuperação eficiente de um arquivo dentro do arquivo?

    
por Alex Reynolds 28.08.2009 / 01:26

8 respostas

13

tar (e cpio e afio e pax e programas similares) são formatos orientados a fluxo - eles devem ser transmitidos diretamente para uma fita ou canalizados para outro processo. enquanto, em teoria, seria possível adicionar um índice no final do arquivo / fluxo, eu não sei de qualquer versão que faz (no entanto, seria um aprimoramento útil)

ele não ajudará com seus arquivos tar ou cpio existentes, mas há outra ferramenta, dar ("disk archive"), que cria arquivos archive que contêm tal índice e pode fornecer rápido acesso direto a arquivos individuais dentro do arquivo.

se o dere não estiver incluído no seu unix / linux-dist, você pode encontrá-lo em:

link

    
por 28.08.2009 / 03:07
9

Você pode usar o SquashFS para esses arquivos. É

  • projetado para ser acessado usando um driver de fusível (embora exista uma interface tradicional)
  • compactado (quanto maior o tamanho do bloco, mais eficiente)
  • incluído no kernel do Linux
  • armazena UIDs / GIDs e tempo de criação
  • sensível a endianess, portanto bastante portátil

A única desvantagem que eu conheço é que é somente leitura.

link link

    
por 30.12.2013 / 18:31
6

Embora não armazene um índice, star supostamente é mais rápido que tar . Além disso, suporta nomes de arquivos mais longos e tem melhor suporte para atributos de arquivo.

Como tenho certeza de que você está ciente, a descompactação do arquivo leva tempo e provavelmente seria um fator na velocidade de extração, mesmo se houvesse um índice.

Editar: Você também pode querer dar uma olhada em xar . Tem um cabeçalho XML que contém informações sobre os arquivos no arquivo.

Na página mencionada:

Xar's XML header allows it to contain arbitrary metadata about files contained within the archive. In addition to the standard unix file metadata such as the size of the file and it's modification and creation times, xar can store information such as ext2fs and hfs file bits, unix flags, references to extended attributes, Mac OS X Finder information, Mac OS X resource forks, and hashes of the file data.

    
por 28.08.2009 / 03:04
2

O único formato de arquivo que eu sei que armazena um índice é ZIP, porque eu tive que reconstruir índices corrompidos mais de uma vez.

    
por 28.08.2009 / 02:53
2

Thorbjørn Ravn Anderser está certo. O GNU tar cria arquivos "procuráveis" por padrão. Mas não usa essa informação quando lê estes arquivos se a opção -n não é dada. Com a opção -n, acabei de extrair o arquivo de 7 GB do arquivo de 300 GB no tempo necessário para ler / gravar 7 GB. Sem -n demorou mais de uma hora e não produziu nenhum resultado.

Não sei ao certo como a compactação afeta isso. Meu arquivo não foi compactado. Arquivos compactados não são "procuráveis" porque o alcatrão GNU atual (1.26) descarrega a compactação para um programa externo.

    
por 17.10.2013 / 14:56
1

Não indexa que eu saiba, mas eu uso dump & restaurar com arquivos grandes e navegar na árvore de restauração no modo interativo para selecionar arquivos aleatórios é MUITO rápido.

    
por 28.08.2009 / 04:44
1

Você pode usar o formato de arquivo / compactação 7z (7zip) se tiver acesso ao pacote p7zip-full .

No Ubuntu, você pode usar este comando para instalá-lo:

$ sudo apt-get install p7zip-full

Para criar um arquivo, você pode usar 7z a <archive_name> <file_or_directory> e, se não quiser compactar os arquivos e quiser apenas "armazená-los" no estado em que se encontra, poderá usar a opção -mx0 como:

$ 7z a -mx0 myarchive.7z myfile.txt

Creating archive myarchive.7z

Você pode então extrair os arquivos usando 7z e :

$ 7z e myarchive.7z

Processing archive: myarchive.7z
Extracting  myfile.txt

Ou você pode listar o índice do arquivo com o 7z l , que é útil para pesquisar com grep :

$ 7z l myarchive.7z | grep

2014-07-08 12:13:39 ....A            0            0  myfile.txt

Esta é também a opção t para testar a integridade, u para adicionar / atualizar um arquivo ao arquivo e d para excluir um arquivo.

NOTA IMPORTANTE
Do not use o formato 7zip para backups do sistema de arquivos linux, pois ele não armazena o proprietário e o grupo dos arquivos contidos.

    
por 08.07.2014 / 04:50
0

Acredito que o tar GNU é capaz de fazer o que você quer, mas não consigo localizar um recurso definitivo dizendo isso.

Em qualquer caso, você precisa de um formato de arquivamento com um índice (já que isso permitirá que você faça o que quiser). Eu não acredito que os arquivos ZIP possam crescer tão grande, infelizmente.

    
por 28.08.2009 / 20:11