Stellen Sie zunächst sicher, dass das logische Volume nicht bereitgestellt ist. Wenn dies der Fall ist und Sie eine "heiße Kopie" erstellen möchten, erstellen Sie zuerst einen Schnappschuss und verwenden Sie stattdessen Folgendes:
lvcreate --snapshot --name transfer_snap --size 1G
Ich muss eine Menge Daten (7 TB) zwischen zwei mit 1 GBit verbundenen Servern übertragen, daher brauchte ich die schnellstmögliche Möglichkeit, dies zu tun.
Solltest du SSH benutzen?
Die Verwendung von ssh kommt nicht wegen seiner Verschlüsselung in Frage (wenn Sie eine CPU mit AES-NI-Unterstützung haben, schadet dies nicht so sehr), sondern wegen seiner Netzwerkpuffer. Diese skalieren nicht gut. Es gibt eine gepatchte Ssh-Version , die dieses Problem behebt. Da es jedoch keine vorkompilierten Pakete gibt, ist dies nicht sehr praktisch.
Komprimierung verwenden
Bei der Übertragung von Raw-Disk-Images empfiehlt es sich immer, die Komprimierung zu verwenden. Sie möchten jedoch nicht, dass die Komprimierung zu einem Engpass wird. Die meisten Unix-Komprimierungstools wie gzip sind Singlethread-Tools. Wenn die Komprimierung eine CPU auslastet, ist dies ein Engpass. Aus diesem Grund verwende ich immer pigz, eine gzip-Variante, bei der alle CPU-Kerne für die Komprimierung verwendet werden. Und das ist notwendig, um die GBit-Geschwindigkeit zu übertreffen.
Verschlüsselung verwenden
Wie gesagt, ssh ist langsam. Wenn Sie eine AES-NI-CPU haben, sollte dies kein Engpass sein. Anstatt also ssh zu verwenden, können wir openssl direkt verwenden.
Geschwindigkeiten
Um Ihnen eine Vorstellung von der Geschwindigkeit der Komponenten zu geben, sind hier meine Ergebnisse. Das sind Übertragungsgeschwindigkeiten zwischen zwei Produktionssystemen, die lesen und in den Speicher schreiben. Die tatsächlichen Ergebnisse hängen von der Netzwerkgeschwindigkeit, der Festplattengeschwindigkeit und der CPU-Quellgeschwindigkeit ab! Ich mache das, um zu zeigen, dass es zumindest keinen großen Leistungsabfall gibt.
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
Fazit: Durch die Komprimierung wird eine spürbare Beschleunigung erzielt, da die Datenmenge erheblich reduziert wird. Dies ist umso wichtiger, wenn Sie langsamere Netzwerkgeschwindigkeiten haben. Achten Sie bei der Verwendung der Komprimierung auf die CPU-Auslastung. Wenn die Nutzung maximal wird, können Sie versuchen, ohne es. Verwenden der Komprimierung als nur geringe Auswirkung auf AES-NI-Systeme, imho nur, weil sie der Komprimierung etwa 30-40% CPU stiehlt.
Bildschirm verwenden
Wenn Sie wie ich viele Daten übertragen, möchten Sie nicht, dass diese durch eine Netzwerkunterbrechung Ihres ssh-Clients unterbrochen werden. Beginnen Sie daher besser mit einem Bildschirm auf beiden Seiten. Dies ist nur ein Hinweis, ich werde hier kein Bildschirm-Tutorial schreiben.
Lets Copy
Installieren Sie einige Abhängigkeiten (von Quelle und Ziel):
apt install pigz pv netcat-openbsd
Erstellen Sie dann auf dem Ziel ein Volume mit der gleichen Größe wie die Quelle. Wenn Sie sich nicht sicher sind, verwenden Sie lvdisplay für die Quelle, um die Größe zu ermitteln und das Ziel zu erstellen.
lvcreate -n lvname vgname -L 50G
Bereiten Sie als nächstes das Ziel für den Empfang der Daten vor:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
und wenn Sie fertig sind, starten Sie die Übertragung auf der Quelle:
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
Hinweis: Wenn Sie die Daten lokal übertragen oder sich nicht für die Verschlüsselung interessieren, entfernen Sie einfach den Openssl-Teil von beiden Seiten. Wenn es Ihnen wichtig ist, dass asdkjn2hb der Verschlüsselungsschlüssel ist, sollten Sie ihn ändern.