Preciso transferir uma enorme quantidade de mp3s entre dois serviços (Ubuntu). Por enorme, quero dizer cerca de um milhão de arquivos, que são em média 300K. Eu tentei com, scp
mas levaria cerca de uma semana. (cerca de 500 KB / s) Se eu transferir um único arquivo por HTTP, recebo de 9 a 10 MB / s, mas não sei como transferi-los.
Existe uma maneira de transferir todos eles rapidamente?
linux
performance
file-transfer
nicudotro
fonte
fonte
Respostas:
Eu recomendaria alcatrão. Quando as árvores de arquivos já são semelhantes, o rsync executa muito bem. No entanto, como o rsync fará várias análises em cada arquivo e depois copiará as alterações, é muito mais lento que o tar para a cópia inicial. Este comando provavelmente fará o que você deseja. Ele copiará os arquivos entre as máquinas, bem como preservará as permissões e as propriedades do usuário / grupo.
De acordo com o comentário de Mackintosh abaixo, este é o comando que você usaria para o rsync
fonte
~
caractere de escape será ativado apenas se o SSH estiver usando um terminal. Este não é o caso quando você especifica um comando remoto (a menos que passe a-t
opção). Portanto, sua preocupação é inválida.Disco rígido externo e entrega por correio no mesmo dia.
fonte
Eu usaria rsync.
Se você os exportou via HTTP com listagens de diretório disponíveis, você também pode usar o wget e o argumento --mirror.
Você já está vendo que o HTTP é mais rápido que o SCP porque o SCP está criptografando tudo (e, portanto, afunilando a CPU). HTTP e rsync vão se mover mais rápido porque não estão criptografados.
Aqui estão alguns documentos sobre como configurar o rsync no Ubuntu: https://help.ubuntu.com/community/rsync
Esses documentos falam sobre o tunelamento do rsync pelo SSH, mas se você está apenas movendo dados em uma LAN privada, não precisa do SSH. (Suponho que você esteja em uma LAN privada. Se você está recebendo 9 a 10 MB / s na Internet, quero saber que tipo de conexões você possui!)
Aqui estão outros documentos muito básicos que permitem configurar um servidor rsync relativamente inseguro (sem dependência do SSH): http://transamrit.net/docs/rsync/
fonte
--include
e--exclude
para obter mais nuances.Sem muita discussão, use netcat, swissarmy knife da rede. Sem sobrecarga de protocolo, você está copiando diretamente para o soquete de rede. Exemplo
fonte
pv
) e verificação de integridade viasha512sum
, mas uma vez que um pouco é invertido, todo o fluxo fica ruim porque não há como recuperá-lo. O que realmente precisamos é de um protocolo leve como um torrent de streaming para esses ambientes seguros quando precisarmos de sobrecarga baixa - algo que verifique a integridade no nível do chunk (por exemplo, 4 MB) e possa reenviar um chunk quando houver falha. TCP crc não é poderoso o suficiente.Com muitos arquivos, se você usar o rsync, eu tentaria obter a versão 3 ou superior nas duas extremidades . O motivo é que uma versão menor enumerará todos os arquivos antes de iniciar a transferência. O novo recurso é chamado de recursão incremental .
fonte
rsync, como outros já recomendaram. Se a sobrecarga da CPU da criptografia for um gargalo, use outro algoritmo menos intensivo da CPU, como blowfish. Por exemplo, algo como
rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path
fonte
Ao mover ontem 80 TB de dados (milhões de arquivos minúsculos),
rsync
passar de paratar
provou ser muito mais rápido , pois paramos de tentare mudou para
tar
...Como esses servidores estão na mesma LAN, o destino é montado em NFS no sistema de origem, o que está fazendo o push. Não torne ainda mais rápido, decidimos não preservar os
atime
arquivos:O gráfico abaixo mostra a diferença entre a mudança de rsync e alcatrão. Foi idéia do meu chefe e meu colega a executou e fez a excelente redação em seu blog . Eu apenas gosto de fotos bonitas . :)
fonte
tar cf - directory | ttcp -t dest_machine
de ftp.arl.mil/mike/ttcp.htmlAo copiar um grande número de arquivos, descobri que ferramentas como tar e rsync são mais ineficientes do que precisam devido à sobrecarga de abrir e fechar muitos arquivos. Eu escrevi uma ferramenta de código aberto chamada arquivador rápido que é mais rápida que o tar para esses cenários: https://github.com/replicon/fast-archiver ; ele funciona mais rápido executando várias operações de arquivo simultâneas.
Aqui está um exemplo de arquivador rápido x tar em um backup de mais de dois milhões de arquivos; o arquivador rápido leva 27 minutos para arquivar, contra o tar levando 1 hora e 23 minutos.
Para transferir arquivos entre servidores, você pode usar o arquivador rápido com ssh, assim:
fonte
Também uso o tar através da
netcat
abordagem, exceto que prefiro usarsocat
- muito mais poder para otimizar sua situação - por exemplo, ajustando o mss. (Além disso, ria se quiser, mas acho ossocat
argumentos mais fáceis de lembrar porque são consistentes). Então, para mim, isso é muito comum ultimamente, pois tenho mudado as coisas para novos servidores:Aliases são opcionais.
fonte
Outra alternativa é o Unison . Pode ser um pouco mais eficiente que o Rsync nesse caso, e é um pouco mais fácil configurar um ouvinte.
fonte
Parece que pode haver alguns erros de digitação na resposta superior. Isso pode funcionar melhor:
fonte
wget --mirror
como Evan Anderson sugeriu ou qualquer outro cliente http. Cuidado para não ter links simbólicos desagradáveis ou arquivos de índice enganosos. Se tudo o que você tem é MP3, você deve estar seguro.Notei que outras pessoas recomendaram o uso do netcat . Com base na minha experiência , posso dizer que é lento em comparação com as outras soluções.
fonte
Graças à maravilhosa resposta de Scott Pack (eu não sabia como fazer isso com o ssh antes), posso oferecer essa melhoria (se
bash
for o seu shell). Isso adicionará compactação paralela, um indicador de progresso e verificará a integridade no link de rede:pv
é um bom programa de visualização de progresso para o seu pipe epigz
é um programa gzip paralelo que usa quantos threads a sua CPU possui por padrão (acredito que até 8 no máximo). Você pode ajustar o nível de compactação para ajustar melhor a proporção da CPU à largura de banda da rede e trocá-lo compxz -9e
epxz -d
se você tiver muito mais CPU do que largura de banda. Você só precisa verificar se as duas somas correspondem após a conclusão.Essa opção é útil para quantidades muito grandes de dados, bem como para redes de alta latência, mas não é muito útil se o link estiver instável e cair. Nesses casos, o rsync é provavelmente a melhor opção possível.
Saída de amostra:
Para dispositivos de bloco:
Obviamente, verifique se eles têm o mesmo tamanho ou limite com count =, skip =, seek =, etc.
Quando eu copio sistemas de arquivos dessa maneira, geralmente irei
dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
zerar a maior parte do espaço não utilizado, o que acelera o xfer.fonte
Eu não acho que você fará melhor que o scp, a menos que instale placas de rede mais rápidas. Se você estiver fazendo isso pela Internet, isso não ajudará.
Eu recomendaria usar o rsync . Pode não ser mais rápido, mas pelo menos se falhar (ou você o desligar porque está demorando muito tempo), você pode retomar de onde parou na próxima vez.
Se você pode conectar as duas máquinas diretamente usando a Ethernet gigabit, provavelmente será a mais rápida.
fonte
Para 100 Mb / s, o rendimento teórico é de 12,5 MB / s; portanto, a 10 MB / s, você está indo muito bem.
Eu também ecoaria a sugestão de fazer rsync, provavelmente através do ssh. Algo como:
A 100 Mb / s, suas CPUs devem ser capazes de lidar com a criptografia / descriptografia sem afetar significativamente a taxa de dados. E se você interromper o fluxo de dados, poderá retomar de onde parou. Cuidado, com "milhões" de arquivos, a inicialização levará um tempo antes de realmente transferir qualquer coisa.
fonte
Eu encontrei isso, exceto que eu estava transferindo logs do Oracle.
Aqui está o colapso
scp
rsync
FTP / HTTP
Eu usei o FTP com grande sucesso (onde um grande sucesso é equivalente a ~ 700Mb / s em uma rede Gb). Se você estiver recebendo 10 MB (o que equivale a 80 Mb / s), provavelmente algo está errado.
O que você pode nos dizer sobre a origem e o destino dos dados? É unidade única para unidade única? RAID para USB?
Eu sei que esta pergunta já tem uma resposta, mas se sua rede está indo tão devagar com um cabo cruzado de Gb / s, algo absolutamente precisa ser corrigido.
fonte
Você não mencionou se as duas máquinas estão na mesma LAN ou se um canal seguro (ou seja, usando SSH) é obrigatório, mas outra ferramenta que você pode usar é o netcat .
Eu usaria o seguinte na máquina receptora:
Depois, no lado de envio:
Tem as seguintes vantagens:
gzip -1
fornece compactação leve sem saturar a CPU, fazendo uma boa troca, oferecendo um pouco de compactação, mantendo o rendimento máximo. (Provavelmente não é tão vantajoso para dados MP3, mas não dói.)por exemplo,
Notas:
tar
vez de,cpio
se preferir.gzip -1
você mesmo para evitar a saturação da CPU. (Ou pelo menos defina o CompressionLevel como 1.)fonte
Um scp simples com opções apropriadas alcançará facilmente 9-10 MB / s através da LAN:
Com essas opções, é provável que a taxa de transferência tenha se tornado 4x ou 5x mais rápida do que nenhuma opção (padrão)
fonte
Se você tiver um servidor ftp no lado src, poderá usar o ncftpget no site ncftp . Ele funciona perfeitamente com arquivos pequenos, pois utiliza tar internamente.
Uma comparação mostra o seguinte: mover arquivos pequenos de 1,9 GB (33926 arquivos)
fonte
Você também pode tentar usar o comando BBCP para fazer sua transferência. É um ssh paralelo em buffer que realmente grita. Normalmente, podemos obter 90% + taxa de linha, desde que possamos manter o tubo alimentado.
Normalmente, nós nos esforçamos muito para evitar ter que nos mexer. Usamos pools do ZFS aos quais sempre podemos "adicionar" mais espaço em disco. Mas às vezes ... você só precisa mudar as coisas. Se tivermos um sistema de arquivos "ativo" que pode levar horas (ou dias) para copiar, mesmo quando estiver em plena explosão.
Também enviamos nossos despejos zfs pelo BBCP ... isso maximiza a utilização da nossa rede e minimiza os tempos de transferência.
O BBCP está disponível gratuitamente, você pode pesquisá-lo no Google e é uma compilação direta. Basta copiá-lo para o seu / usr / local / bin nas máquinas src e de destino e isso praticamente funcionará.
fonte
Acho que minha resposta está um pouco atrasada aqui, mas fiz boas experiências com o uso do mc (Midnight Commander) em um servidor para conectar via SFTP ao outro servidor.
A opção de conexão via FTP está nos menus "Esquerda" e "Direita", digitando o endereço da seguinte maneira:
ou
Você pode navegar e executar operações de arquivo quase como em um sistema de arquivos local.
Ele possui uma opção embutida para fazer a cópia em segundo plano, mas eu prefiro usar o comando screen e desanexar da tela enquanto o mc estiver copiando (acho que é mais rápido também).
fonte
Para @scottpack, resposta da opção rSync
Para exibir o progresso do upload, use '--progess' como opção após -avW no comando, como mostrado abaixo.
fonte
Aqui está uma referência rápida para comparar algumas técnicas,
Número de arquivos: 9632, Tamanho total: 814 MiB, Tamanho médio: 84 KiB
O comando para tar / netcat era:
fonte
rsync ou você pode querer tarar tudo dentro de um arquivo e depois scp. Se você não tiver o espaço em disco, poderá canalizar o alcatrão diretamente sobre o ssh enquanto este estiver sendo feito.
fonte
Se você estiver enviando arquivos MP3 e outros arquivos compactados, não obterá muito com qualquer solução que tente comprimir ainda mais esses arquivos. A solução seria algo que pode criar várias conexões entre os dois servidores e, assim, colocar mais estresse na largura de banda entre os dois sistemas. Uma vez que isso chegue ao limite, não há muito o que ganhar sem melhorar o hardware. (Placas de rede mais rápidas entre esses servidores, por exemplo.)
fonte
Tentei algumas ferramentas para copiar um arquivo de 1 GB. O resultado está abaixo: HTTP o mais rápido, com o wget -c nc segundo na linha scp mais lento e com falha algumas vezes. Nenhuma maneira de retomar o rsync usa ssh como back-end, portanto, o mesmo resultado. Em conclusão, eu iria para o http com wget -bqc e daria algum tempo. Espero que isso ajude
fonte
Eu tive que copiar o disco do BackupPC em outra máquina.
Eu usei rsync.
A máquina tinha 256 MB de memória.
O procedimento que segui foi este:
rsync
sem-H
(levou 9 horas)cpool
diretório e comecei com opc
diretório; Eu cortei a transferência.rsync
com o-H
sinalizador e todos os arquivos vinculados nopc
diretório foram transferidos corretamente (o procedimento encontrou todos os arquivos reais no diretóriocpool
vinculado aopc
diretório) (levou 3 horas).No final, pude verificar se
df -m
não foi gasto espaço extra.Dessa maneira, eu iludo o problema com a memória e o rsync. Todo o tempo eu posso verificar o desempenho usando top e top e finalmente transferi 165 GB de dados.
fonte