Primeiro, verifique se o volume lógico não está montado. Se estiver e você quiser fazer uma "cópia quente", crie um instantâneo primeiro e use isso:
lvcreate --snapshot --name transfer_snap --size 1G
Eu tenho que transferir muitos dados (7 TB) entre dois Servidores conectados de 1Gbit, então eu precisava da maneira mais rápida possível de fazê-lo.
Você deve usar o SSH?
O uso do ssh está fora de questão, não por causa de sua criptografia (se você tem uma CPU com suporte a AES-NI, não atrapalha muito), mas por causa de seus buffers de rede. Aqueles que não estão escalando bem. Existe uma versão do Ssh corrigida que resolve este problema, mas como não existem pacotes pré-compilados, não é muito conveniente.
Usando compactação
Ao transferir imagens brutas de disco, é sempre aconselhável usar a compactação. Mas você não quer que a compactação se torne um gargalo. A maioria das ferramentas de compactação unix, como o gzip, são de thread único, portanto, se a compactação saturar uma CPU, será um gargalo. Por essa razão, eu sempre uso o pigz, uma variante do gzip que usa todos os núcleos do processador para compactação. E isso é necessário de você querer ir acima e acima das velocidades GBit.
Usando criptografia
Como dito antes, o ssh é lento. Se você tem uma CPU AES-NI, isso não deve ser um gargalo. Então, ao invés de usar o ssh, podemos usar o openssl diretamente.
Velocidades
Para lhe dar uma ideia do impacto na velocidade dos componentes, aqui estão os meus resultados. Essas são velocidades de transferência entre dois sistemas de produção, lendo e gravando na memória. Seus resultados reais dependem da velocidade da rede, da velocidade do disco rígido e da velocidade da CPU da fonte! Estou fazendo isso para mostrar que pelo menos não há queda no desempenho.
%código%
Conclusão: usar a compactação dá uma aceleração perceptível, pois reduz muito o tamanho dos dados. Isso é ainda mais importante se você tiver velocidades de rede mais lentas. Ao usar a compactação, observe o uso de sua CPU. Se o uso for maximizado, você pode tentar sem ele. Usando a compressão como um pequeno impacto nos sistemas AES-NI, apenas porque rouba cerca de 30 a 40% da CPU da compressão.
Usando a tela
Se você está transferindo muitos dados como eu, você não quer que ele seja interrompido por uma desconexão de rede do seu cliente ssh, então é melhor começar com a tela em ambos os lados. Esta é apenas uma nota, não vou escrever um tutorial de tela aqui.
Deixa a cópia
Instale algumas dependências (na origem e no destino):
Simple nc dd:
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 47.3576 s, 106 MB/s
+pigz compression level 1 (speed gain depends on actual data):
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 38.8045 s, 130 MB/s
+pigz compression level 5:
network traffic: 2.43GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 44.4623 s, 113 MB/s
+compression level 1 + openssl encryption:
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 43.1163 s, 117 MB/s
crie um volume no destino com o mesmo tamanho da fonte. Se não tiver certeza, use o lvdisplay na fonte para obter o tamanho e criar o alvo, por exemplo:
apt install pigz pv netcat-openbsd
em seguida, prepare o destino para receber os dados:
lvcreate -n lvname vgname -L 50G
e quando estiver pronto, inicie a transferência na fonte:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
Nota: Se você estiver transferindo os dados localmente ou não se importar com a criptografia, basta remover a parte Openssl de ambos os lados. Se você se importa, asdkjn2hb é a chave de criptografia, você deve alterá-lo.