Assurez-vous d'abord que le volume logique n'est pas monté. Si c'est le cas et que vous souhaitez faire une "copie à chaud", créez d'abord un instantané et utilisez-le à la place:
lvcreate --snapshot --name transfer_snap --size 1G
Je dois transférer beaucoup de données (7 To) entre deux serveurs connectés à 1 Gbit, donc j'avais besoin des moyens les plus rapides pour le faire.
Devriez-vous utiliser SSH?
L'utilisation de ssh est hors de question, non pas à cause de son cryptage (si vous avez un CPU avec support AES-NI, cela ne fait pas trop mal) mais à cause de ses tampons réseau. Ceux-ci ne évoluent pas bien. Il existe une version corrigée de Ssh qui résout ce problème, mais comme il n'y a pas de packages précompilés, ce n'est pas très pratique.
Utilisation de la compression
Lors du transfert d'images de disque brutes, il est toujours conseillé d'utiliser la compression. Mais vous ne voulez pas que la compression devienne un goulot d'étranglement. La plupart des outils de compression Unix comme gzip sont mono-thread, donc si la compression sature un CPU, ce sera un goulot d'étranglement. Pour cette raison, j'utilise toujours pigz, une variante gzip qui utilise tous les cœurs de processeur pour la compression. Et cela est nécessaire si vous souhaitez augmenter et dépasser les vitesses GBit.
Utilisation du cryptage
Comme dit précédemment, ssh est lent. Si vous avez un processeur AES-NI, cela ne devrait pas être un goulot d'étranglement. Ainsi, au lieu d'utiliser ssh, nous pouvons utiliser openssl directement.
Vitesses
Pour vous donner une idée de l'impact de la vitesse des composants, voici mes résultats. Ce sont des vitesses de transfert entre deux systèmes de production lisant et écrivant en mémoire. Vos résultats réels dépendent de la vitesse du réseau, de la vitesse du disque dur et de la vitesse du processeur source! Je fais cela pour montrer qu'il n'y a au moins aucune baisse de performance énorme.
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
Conclusion: l'utilisation de la compression donne une accélération notable, car elle réduit considérablement la taille des données. Ceci est encore plus important si vous avez des vitesses de réseau plus lentes. Lorsque vous utilisez la compression, surveillez votre utilisation du processeur. si l'utilisation est au maximum, vous pouvez essayer sans. L'utilisation de la compression n'est qu'un faible impact sur les systèmes AES-NI, à mon humble avis uniquement car elle dérobe 30 à 40% de cpu à la compression.
Utilisation de l'écran
Si vous transférez beaucoup de données comme moi, vous ne voulez pas qu'elles soient interrompues par une déconnexion réseau de votre client ssh, il vaut donc mieux le démarrer avec un écran des deux côtés. Ceci est juste une note, je n'écrirai pas de tutoriel d'écran ici.
Permet de copier
Installez certaines dépendances (sur la source et la destination):
apt install pigz pv netcat-openbsd
puis créez un volume sur la destination avec la même taille que la source. En cas de doute, utilisez lvdisplay sur la source pour obtenir la taille et créer la cible, c'est-à-dire:
lvcreate -n lvname vgname -L 50G
ensuite, préparez la destination pour la réception des données:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
et lorsque vous êtes prêt, démarrez le transfert sur la source:
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
Remarque: Si vous transférez les données localement ou que vous ne vous souciez pas du chiffrement, retirez simplement la partie Openssl des deux côtés. Si vous vous en souciez, asdkjn2hb est la clé de chiffrement, vous devez la changer.