Eu tenho 5 milhões de arquivos que ocupam cerca de 1 TB de espaço de armazenamento. Preciso transferir esses arquivos para terceiros.
Qual é a melhor forma de fazer isso? Tentei reduzir o tamanho usando .tar.gz, mas mesmo com meu computador com 8 GB de RAM, recebo um erro de "falta de memória do sistema".
A melhor solução é enviar os arquivos por correio tradicional?
memory
tar
compression
out-of-memory
oshirowanen
fonte
fonte
.tar.gz
ou COPIAR o arquivo compactado resultante? De qualquer maneira, algo é estranho, porque nenhuma operação deve consumir mais memória apenas porque os arquivos são grandes. Ou seja, ambas as operações devem estar em fluxo contínuo. Por favor, inclua mais informações sobre exatamente quais comandos estão falhando.tar
deve arquivar arquivos de forma incremental conforme a lista, nunca criando uma lista na memória. Mas, novamente, por favor, mostre o comando exato que você está usando. Além disso, todos os arquivos estão no mesmo diretório ou a estrutura de diretórios é muito profunda?Respostas:
Informações adicionais fornecidas nos comentários revelam que o OP está usando um método da GUI para criar o
.tar.gz
arquivo.O software da GUI geralmente inclui muito mais inchaço do que o software equivalente da linha de comando equivalente ou executa tarefas desnecessárias adicionais em prol de algum recurso "extra", como uma barra de progresso. Não me surpreenderia se o software da GUI estivesse tentando coletar uma lista de todos os nomes de arquivos na memória. Não é necessário fazer isso para criar um arquivo. As ferramentas dedicadas
tar
egzip
são definitivamente projetado para trabalhar com streaming de entrada e saída que significa que eles podem lidar com entrada e saída muito maior do que a memória.Se você evitar o programa GUI, provavelmente poderá gerar esse archive usando uma
tar
chamada diária completamente normal como esta:Onde
foo
está o diretório que contém todos os seus 5 milhões de arquivos.As outras respostas a esta pergunta oferecem alguns
tar
comandos alternativos adicionais para tentar, caso você queira dividir o resultado em várias partes, etc ...fonte
"cinco milhões" de arquivos e 1 TB no total? Seus arquivos devem ser muito pequenos, então. Eu simplesmente tentaria
rsync
:Se você não tiver isso - ou o seu caso de uso não permitir
rsync
, eu pelo menos verificaria se7z
funciona com seus dados. Pode não ser, mas acho que ainda vale a pena tentar:Ou se você não se sentir confortável com
7z
pelo menos tente criar um.tar.xz
arquivo:(deve-se observar que as versões mais antigas de
tar
não criam.tar.xz
arquivos, mas os.tar.lzma
arquivos ao usar aJ
opção. Mesmo as versões mais antigastar
não suportamJ
totalmente o sinalizador.)Como você está usando um programa GUI para criar esses arquivos, suponho que você esteja se sentindo um pouco desconfortável usando uma interface de linha de comando.
Para facilitar a criação, gerenciamento e extração de arquivos da interface da linha de comandos, existe o pequeno utilitário chamado
atool
. Está disponível para praticamente todas as distribuições comuns que eu já vi e funciona praticamente em todos os arquivos que encontrei, a menos que sejam irremediavelmente obscuros.Verifique se sua distribuição tem
atool
em seus repositórios ou peça ao seu administrador para instalá-la, quando estiver em um ambiente de trabalho.atool
instala um monte de links simbólicos para si mesmo; portanto, empacotar e descompactar se torna fácil:Cria um arquivo.
Expande o arquivo.
Lista o conteúdo do arquivo.
Que tipo de arquivo é criado,
atool
discerne que pela extensão de nome de seu arquivo na linha de comando.fonte
rsync
é que, se (quando) a conexão for interrompida, elarsync
poderá continuar de onde parou.A menos que você possa fazer uma compactação melhor que 25: 1, é improvável que você ganhe algo ao compactá-la antes do envio direto, a menos que você tenha algum formato de fita de hardware que possa trocar com terceiros.
O maior armazenamento comum é o blue ray e isso lhe dará aproximadamente 40Gb. Você precisaria de uma compressão de 25 para 1 em seus dados para ajustá-los a isso. Se o seu terceiro tiver apenas DVD, você precisará de 125: 1 (aproximadamente).
Se você não conseguir corresponder a esses números de compactação, use apenas um disco normal, copie-o e envie-o para terceiros. Nesse caso, enviar algo menor que uma unidade de 1 TB que precisaria de compressão é loucura.
Você só precisa comparar isso com o uso
ssh -C
(compactação padrão) ou, de preferência,rsync
com compactação para copiar os arquivos pela rede, sem necessidade de compactar e tar com antecedência. 1 TB não é impossível passar pela rede, mas vai demorar um pouco.fonte
Você considerou torrent? Ponto a ponto pode ser a melhor opção para uma transferência pela Internet:
Você não disse qual sistema operacional estava usando, mas como você está falando sobre a compactação tar.gz, presumo que você esteja usando algum sistema operacional semelhante ao GNU / Linux. Por isso, sugiro Transmissão . É um software de torrent de código aberto que roda em Mac e Linux. Gosto porque os desenvolvedores se esforçam para torná-lo nativo para todos os clientes GUI que eles suportam: sem linguagem de plataforma cruzada.
Você pode combinar esse método com a compactação, mas perderá a capacidade de priorizar partes da transferência.
fonte
7z seria minha escolha. Permite a divisão automática de arquivos e suporta compactação multithread. Não,
xz
não, apesar do que a mensagem de ajuda diz. Tente com:A saída é dividida em blocos de 100 MB (altere-a com o
-v
comutador).A única desvantagem real é que o 7z não retém metadados unix (por exemplo, permissões e proprietário). Se você precisar disso, envie a
tar
saída para o7za
canal (vejaman 7za
alguns exemplos).fonte
The only real downside
mas que desvantagem!split
em um arquivo .tar.gz e manter os metadados.tar
abordagem.Sim, boa sorte em conseguir isso. E a ferramenta GUI tentará fazer isso no mesmo volume, o que significa: a) você precisa de mais 1 TB de espaço livre eb) a agitação da leitura de um arquivo e anexá-lo ao arquivo não será muito saudável para a unidade.
Eu vejo duas possibilidades:
1) rsync do seu computador para terceiros. Um ou outro precisará de um endereço IP global que não mude com frequência. A grande vantagem do rsync é que, se você for interrompido por qualquer motivo, ele poderá continuar de onde parou. Copiar um tarball de 1Tb será bem-sucedido ou falhará
2) compre uma unidade externa de 1 TB, copie as coisas para ela e entregue a unidade. Alta latência, mas largura de banda muito boa quando chega. Vários serviços de backup online para isso para o backup inicial.
fonte
Eu sugiro que você use algo como:
que criará 10 arquivos com no máximo 100 GB de tamanho. Mas isso não responderia ao seu problema "OOM", uma vez que o tar deve transmitir sua leitura / gravação, de modo que o gargalo é óbvio.
fonte
Que tal isso:
find
pesquisas lista a árvore de diretóriostar -T -
lê a lista de stdin-czf -
cria um arquivoz
morto e grava no stdout, compacta o fluxossh remotehost
entre no host remoto usandossh
cd /target/dir/
mude para o diretório de destinotar xzf -
extrair o fluxo de entrada de stdinfonte
Com o fexsend, você pode enviar arquivos de qualquer número e tamanho para qualquer destinatário on-the-fly, consulte:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
Obviamente, você precisa de um servidor F * EX, mas é gratuito:
http://fex.rus.uni-stuttgart.de:8080/
fonte