Спочатку переконайтеся, що логічний том не встановлений. Якщо це так, і ви хочете зробити "гарячу копію", спершу створіть знімок і скористайтеся цим:
lvcreate --snapshot --name transfer_snap --size 1G
Мені потрібно передати багато даних (7 ТБ) між двома серверами, підключеними 1 Гбіт, тому мені потрібні були швидкі способи зробити це.
Чи варто використовувати SSH?
Використання ssh не викликає сумнівів, не через його шифрування (якщо у вас процесор із підтримкою AES-NI, це не зашкодить), а через мережеві буфери. Вони не масштабують добре. Існує виправлена версія Ssh, яка вирішує цю проблему, але оскільки немає попередньо складених пакетів, це не дуже зручно.
Використання стиснення
При передачі зображень із необробленого диска завжди доцільно використовувати стиснення. Але ви не хочете, щоб компресія стала вузьким місцем. Більшість інструментів стиснення Unix, таких як gzip, є однопотоковими, тому якщо стиснення наситить один процесор, це буде вузьким місцем. З цієї причини я завжди використовую pigz, варіант gzip, який використовує всі ядра CPU для стиснення. І це необхідно для того, щоб ви хотіли піднятись до і вище швидкості GBit.
Використання шифрування
Як говорилося раніше, ssh повільно. Якщо у вас є процесор AES-NI, це не повинно бути вузьким місцем. Отже, замість використання ssh, ми можемо використовувати openssl безпосередньо.
Швидкість
Щоб дати вам уявлення про швидкість впливу компонентів, ось мої результати. Це швидкість передачі між двома виробничими системами читання і запису в пам'ять. Фактичні результати залежать від швидкості мережі, швидкості жорсткого диска та швидкості джерела процесора! Я роблю це, щоб показати, що принаймні не спостерігається величезного падіння продуктивності.
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
Висновок: використання стиснення дає помітне прискорення, оскільки значно зменшує розмір даних. Це ще важливіше, якщо у вас низька швидкість мережі. Під час використання стиснення стежте за своїм процесором. якщо використання буде вимкнено, ви можете спробувати без нього. Використовуючи стиснення лише як невеликий вплив на системи AES-NI, але тільки тому, що воно викрадає 30-40% процесора від стиснення.
Використання екрана
Якщо ви передаєте багато даних, як я, ви не хочете, щоб вони переривались мережевим відключенням вашого ssh-клієнта, тому краще запустити його з екрану з обох сторін. Це лише примітка, я не буду писати тут підручник з екрана.
Дозволяє копіювати
Встановіть деякі залежності (від джерела та місця призначення):
apt install pigz pv netcat-openbsd
потім створіть том у пункті призначення з тим самим розміром, що і джерело. Якщо ви не впевнені, використовуйте lvdisplay у вихідному коді, щоб отримати розмір та створити ціль, тобто:
lvcreate -n lvname vgname -L 50G
далі, підготуйте місце призначення для отримання даних:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
і коли будете готові, почніть передачу на Джерело:
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
Примітка. Якщо ви переносите дані локально або не піклуєтесь про шифрування, просто вийміть частину Openssl з обох сторін. Якщо ви переймаєтесь, asdkjn2hb - це ключ шифрування, вам слід змінити його.