Primeiro, verifique se o volume lógico não está montado. Se for e você deseja fazer uma "cópia quente", crie primeiro um instantâneo e use-o:
lvcreate --snapshot --name transfer_snap --size 1G
Eu tenho que transferir muitos dados (7 TB) entre dois servidores conectados de 1 Gbit, então eu precisava da maneira mais rápida possível de fazê-lo.
Você deve usar SSH?
O uso de ssh está fora de questão, não por causa de sua criptografia (se você possui uma CPU com suporte AES-NI, não dói muito), mas por causa de seus buffers de rede. Aqueles não estão bem dimensionados. Existe uma versão Ssh corrigida que resolve esse problema, mas como não existem pacotes pré-compilados, isso não é muito conveniente.
Usando compactação
Ao transferir imagens de disco bruto, é sempre aconselhável usar a compactação. Mas você não deseja 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 esse motivo, eu sempre uso pigz, uma variante gzip que usa todos os núcleos da CPU para compactação. E é necessário que você queira ir acima e acima da velocidade do GBit.
Usando criptografia
Como dito anteriormente, o ssh é lento. Se você possui 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 idéia do impacto na velocidade dos componentes, aqui estão meus resultados. Essas são velocidades de transferência entre dois sistemas de produção, lendo e gravando na memória. Os resultados reais dependem da velocidade da rede, da velocidade do disco rígido e da velocidade da CPU de origem! Estou fazendo isso para mostrar que pelo menos não há uma queda enorme no desempenho.
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
Conclusão: o uso de compactação proporciona uma aceleração notá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 da CPU. se o uso for maximizado, você pode tentar sem ele. Usar a compactação como apenas um pequeno impacto nos sistemas AES-NI, imho apenas porque rouba cerca de 30 a 40% da CPU.
Usando a tela
Se você estiver transferindo muitos dados como eu, não deseja que eles sejam interrompidos por uma desconexão de rede do seu cliente ssh, portanto é melhor iniciá-lo com a tela dos dois lados. Esta é apenas uma observação, não vou escrever um tutorial de tela aqui.
Permite copiar
Instale algumas dependências (na origem e destino):
apt install pigz pv netcat-openbsd
em seguida, crie um volume no destino com o mesmo tamanho da fonte. Se não tiver certeza, use lvdisplay na fonte para obter o tamanho e criar o destino, ou seja:
lvcreate -n lvname vgname -L 50G
Em seguida, prepare o destino para receber os dados:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
e quando estiver pronto, inicie a transferência na fonte:
pv -r -t -b -p -e /dev/vgname/lvname | pigz -1 | openssl aes-256-cbc -salt -pass pass:asdkjn2hb | nc <destip/host> 444 -q 1
Nota: Se você estiver transferindo os dados localmente ou não se importa com criptografia, basta remover a parte Openssl dos dois lados. Se você se importa, asdkjn2hb é a chave de criptografia, você deve alterá-la.