Einfache Übertragung von virtualisierten Servern

Das Verschieben großer Blockdevices oder LVM Volumes über eine schmalbandige Leitung hat mehrere Anforderungen:

  • Bandbreite schonen
  • Übertragungsdauer minimieren
  • Fortschritt überwachen

Die folgende Pipe bedient sich insbesonder dem Monitor pv

dd if=/dev/mapper/sourcelv | pv -c -N raw -s 20g | bzip2 -9 |  \
pv -N compressed -c -L 400k | ssh root@newserver "bzip2 -d | \
dd of=/dev/mapper/targetlv"

Die Anführungszeichen sind besonders wichtig, da sonst dd auf das lokale LVM schreibt!

Man erhält eine übersichtilche Ausgabe:

raw:  1,8GB 0:21:39 [2,03MB/s] [===>           ]  9% ETA 3:38:50
compressed:  473MB 0:21:39 [ 403kB/s] [      <=>       ]

Kommentare

Performance im lokalen Netz

Wenn man den Luxus eines Gigabit-Netzwerks ausnützen will, ist es weise, die Kompression auszuschalten, da die CPU sonst nicht hinterher kommt. Der Flaschehals ist dann die CPU, die mit der Kompression nicht hinterher kommt, während sich das Netzwerk langweilt.

Außerdem sollte man den Parameter -L 400k (des 2. pv Befehls) entsprechend anpassen oder weglassen. Damit wird nämlich die Übertragung auf eine maximale Bandbreite gedrosselt - auch etwas, das man im lokalen Netz unter Umständen nicht will.

Compression und Cypher

Ein weiteres Performance Problem im lokalen Netz ist der Overhead der durch SSH an sich entsteht.

Dagegen hilft:
1.) ein schneller Cypher Algorithmus: z.B. Blowfish
2.) keine Compression

Dazu einfach die SSH Optionen " -o Compression=no -c blowfish " verwenden.

Dadurch kann die Performance um einiges gesteigert werden (die Sicherheit ist allerdings nicht mehr gegeben)!