Estou com alguns problemas com o NFS e gostaria de tentar usar o TCP antigo.
Eu não tenho idéia por onde começar, no entanto.
Em termos de hardware, estou usando um cabo cruzado Ethernet para conectar dois netbooks à rede.
Para colocá-los em rede, digito
$ sudo ifconfig eth0 192.168.1.1 up && ping -c 10 -s 10 192.168.1.2 && sudo /etc/init.d/nfs-kernel-server start
no primeiro netbook e
$ sudo ifconfig eth0 192.168.1.2 up
$ ping -c 10 -s 10 192.168.1.1
$ mount /mnt/network1
no segundo
onde /mnt/network1
é especificado em / etc / fstab como
192.168.1.1:/home /mnt/network1 nfs noauto,user,exec,soft,nfsvers=2 0 0
bem como em /etc/exports
(usando a sintaxe desse arquivo), no primeiro netbook.
O acima funciona bem, mas os arquivos e diretórios são enormes. Os arquivos têm em média cerca de meio gigabyte por peça e os diretórios têm entre 15 e 50 gigabytes.
Estou usando rsync
para transferi-los, e o comando (on 192.168.1.2
) é
$ rsync -avxS /mnt/network1 ~/somedir
Não tenho certeza se há uma maneira de ajustar minhas configurações de NFS para lidar melhor com arquivos enormes, mas gostaria de ver se a execução de um rsync
daemon sobre TCP antigo simples funciona melhor do que rsync
sobre NFS.
Então, para reiterar, como faço para configurar uma rede semelhante ao TCP?
ATUALIZAR:
Então, depois de algumas horas tentando me livrar do pântano da minha própria ignorância (ou, como eu gosto de pensar nisso, me puxar pelas minhas próprias botas), descobri alguns fatos úteis.
Mas, antes de tudo, o que me levou a essa trilha de coelhos, em vez de simplesmente aceitar a melhor resposta atual, foi esta: nc
é um programa incrivelmente legal que resolutamente falha em trabalhar para mim. Eu tentei o netcat-openbsd
e netcat-traditional
pacotes sem qualquer sorte.
O erro que recebo na máquina receptora ( 192.168.1.2
) é:
me@netbook:~$ nc -q 1 -l -p 32934 | tar xv
Can't grab 0.0.0.0:32934 with bind
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
route
dá:
me@netbook:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default dir-615 0.0.0.0 UG 0 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 * 255.255.255.0 U 2 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
Mas, eis as boas notícias: ter os endereços IP estáticos definidos /etc/network/interfaces
, o que comecei a fazer enquanto tentava nc
trabalhar, corrigiu todos os meus problemas de NFS e reacendeu meu amor pelo NFS.
A configuração exata que eu usei (com 192.168.1.1
para o primeiro netbook, é claro) foi:
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
Com essas configurações, os dois netbooks poderão fazer ping diretamente um após o outro após serem inicializados, mesmo sem um ifup
.
Enfim, eu ainda gostaria de ver nc
em ação, então espero que alguém me ajude a depurar esse processo.
fonte
/bin/cp
ou não usar o NFSnfsvers=2
) a partir deste tutorial ( michaelminn.com/linux/home_network )Respostas:
A maneira rápida
A maneira mais rápida de transferir arquivos pela LAN provavelmente não é o rsync, a menos que haja poucas alterações. O rsync gasta um bom tempo fazendo somas de verificação, calculando diferenças etc. Se você sabe que vai transferir a maioria dos dados de qualquer maneira, faça algo assim (nota: há várias implementações de
netcat
; consulte o manual para as opções corretas. Em particular, o seu pode não querer o-p
):Isso usa o netcat (
nc
) para enviar tar através de uma conexão TCP bruta na porta 1234. Não há criptografia, verificação de autenticidade etc., portanto é muito rápido. Se sua conexão cruzada estiver executando em gigabit ou menos, você vinculará a rede; se for mais, você vinculará o disco (a menos que tenha uma matriz de armazenamento ou disco rápido). Osv
sinalizadores para o tar fazem com que ele imprima os nomes dos arquivos (modo detalhado). Com arquivos grandes, isso praticamente não sobrecarrega. Se você estivesse produzindo toneladas de arquivos pequenos, desativaria isso. Além disso, você pode inserir algo comopv
no pipeline para obter um indicador de progresso:É claro que você também pode inserir outras coisas, como
gzip -1
(e adicionar oz
sinalizador no final de recebimento - oz
sinalizador no final de envio usaria um nível de compressão maior que 1, a menos que você defina a variável de ambiente GZIP, é claro). Embora o gzip provavelmente seja mais lento, a menos que seus dados sejam realmente compactados.Se você realmente precisa do rsync
Se você estiver realmente transferindo apenas uma pequena parte dos dados que foram alterados, o rsync poderá ser mais rápido. Você também pode querer olhar para a opção
-W
/--whole-file
, como em uma rede muito rápida (como uma conexão cruzada) que pode ser mais rápida.A maneira mais fácil de executar o rsync é pelo ssh. Você precisará experimentar as cifras ssh para ver qual é a mais rápida; será AES, ChaCha20 ou Blowfish (embora existam algumas preocupações de segurança com o tamanho do bloco de 64 bits do Blowfish), dependendo se o seu chip possui o AES da Intel Instruções -NI (e seu OpenSSL as usa). Em um ssh novo o suficiente, o rsync-over-ssh se parece com o seguinte:
Para ssh / sshd mais antigo, tente
aes128-ctr
ouaes128-cbc
no lugar de[email protected]
.ChaCha20 seria
[email protected]
(também precisa de um ssh / sshd novo o suficiente) e Blowfish seria blowfish-cbc. O OpenSSH não permite a execução sem uma cifra. Obviamente, você pode usar as opções de rsync que desejar no lugar de-avP
. E é claro que você pode ir na outra direção e executar o rsync na máquina de destino (pull) em vez da máquina de origem (push).Tornando o rsync mais rápido
Se você executar um daemon rsync, poderá se livrar da sobrecarga de criptografia. Primeiro, você criaria um arquivo de configuração daemon (
/etc/rsyncd.conf
), por exemplo, na máquina de origem (leia a página de manual do rsyncd.conf para obter detalhes):Em seguida, na máquina de destino, você executaria:
Você também pode fazer o contrário (mas é claro que precisará definir somente leitura como não). Existem opções para autenticação, etc., consulte a página de manual para obter detalhes.
fonte
netcat
abordagem? Se a rede soltar pacotes, parece que ela perderá partes aleatórias dos arquivos.tee
comandos no pipe de ambos os lados para calcular as somas de verificação.tar
peça está dizendo para ele fazer o diretório atual. Na verdade, isso não faz parte donc
comando, o tar está sendo usado para criar um arquivo tar, que está sendo canalizado para o netcat (e, por outro lado, o netcat está sendo canalizado para o tar para extrair o arquivo). Eu sou o comentário de um medo não é realmente suficiente para explicar tubos, mas espero que isso é o suficiente para você começar ...Quão? Ou TL; DR
O método mais rápido que encontrei é uma combinação de
tar
,mbuffer
essh
.Por exemplo:
Com isso, obtive transferências sustentadas de rede local acima de 950 Mb / s em links de 1Gb. Substitua os caminhos em cada comando tar para ser apropriado para o que você está transferindo.
Por quê? mbuffer!
O maior gargalo na transferência de arquivos grandes por uma rede é, de longe, a E / S do disco. A resposta para isso é
mbuffer
oubuffer
. Eles são amplamente similares, masmbuffer
têm algumas vantagens. O tamanho padrão do buffer é 2mbuffer
MB e 1 MBbuffer
. Buffers maiores provavelmente não ficarão vazios. Escolher um tamanho de bloco que seja o menor múltiplo comum do tamanho de bloco nativo no sistema de arquivos de destino e de destino dará o melhor desempenho.O buffer é a coisa que faz toda a diferença! Use-o se tiver! Se você não tiver, pegue! Usar
(m}?buffer
mais qualquer coisa é melhor do que qualquer coisa por si só. é quase literalmente uma panacéia para transferências lentas de arquivos de rede.Se você estiver transferindo vários arquivos, use-os
tar
para "agrupá-los" em um único fluxo de dados. Se for um único arquivo, você poderá usarcat
o redirecionamento de E / S. A sobrecarga detar
vs.cat
é estatisticamente insignificante, então eu sempre usotar
(ouzfs -send
onde posso), a menos que já seja um tarball . Não é garantido que nenhum desses fornece metadados (e, em particularcat
, não). Se você quiser metadados, deixarei isso como um exercício para você.Por fim, a utilização
ssh
de um mecanismo de transporte é segura e carrega muito pouca sobrecarga. Novamente, a sobrecarga dessh
vs.nc
é estatisticamente insignificante.fonte
openssl speed
em um i7-3770, fornece ~ 126–146 MB / s para a CBC blowfish e ~ 138–157 MB / s para a AES CBC (este chip possui instruções da AES-NI). Então ~ 200–300 MB / s para sha256. Portanto, ele mal consegue 1 gigabit. Com o OpenSSH 6.1+, você pode usar o AES GCM, o que pode ser feito com taxas ofuscantes (370–1320 MB / s, dependendo do tamanho da mensagem). Então eu acho que é verdade que o OpenSSH tem pouca sobrecarga se você estiver executando 6.1+ em um chip com AES-NI e usando AES-GCM.ssh
(ou rsync sobre ssh) é muito, MUITO importante. Eu tenho um NAS que usa uma CPU Intel Atom. A criptografia SSH ABSOLUTA A velocidade de transferência. Eu recebo consistentemente <400 Mbit / s para RSA, substituindo-o manualmente para RC4, obtendo ~ 600 Mbits / s e, se eu usar o rsync como um daemon, ele será executado na velocidade nativa do link (> 900 MBit / s, em um gigabit conexão).Você nem precisa usar o TCP. AoE é uma implementação de ATA via Ethernet, sendo a camada 2 uma abordagem de menor sobrecarga, sem conhecimento da pilha TCP / IP. Ele fornecerá a transferência mais rápida possível com o mínimo de sobrecarga. ***
https://en.wikipedia.org/wiki/ATA_over_Ethernet
*** Se a rede for um gargalo, verifique se você está enviando dados compactados.
fonte