rsync und TrueCrypt: Funktioniert, übersteigt aber meine Logik
Sehr viele Informationen bekommt man nicht gerade, wenn man im Internet über rsync und TrueCrypt-Container recherchiert. Und die gefundenen Optionen verhalten sich dann wie Blinker: Funktioniert, funktioniert nicht, funktioniert …
Sagen wir mal so – ich bekomme es zum Laufen. Allerdings ist das Verhalten von Maschine zu Maschine total unterschiedlich und ich verstehe nicht ganz wieso. Es hängt wahrscheinlich mit der rsync-Version zusammen. Allerdings bekomme ich die für Strato HiDrive nicht heraus – zumindest nicht direkt. Ich sichere Dateien periodisch von meinem Rechner via rsync auf das Synology. Ebenso gehen diverse Daten via rsync und ssh Richtung HiDrive (auch Android-Geräte).
rsync-Version schätzen
Da ich keine Chance habe, die rsync-Version auf dem Remote-Host zu erfahren – dazu müsste ich mich anmelden können und das ist nicht erlaubt – muss ich schätzen. Zumindest kann ich so herausfinden, welche rsync-Version mindestens im Einsatz ist.
rsync -vvvv --dirs --delete --dry-run <irgend eine Datei> <Benutzer>@rsync.hidrive.strato.com:/<Pfad>
Protokoll 30 auf beiden Seiten verrät mir also, dass mindestens rsync 3.0.0 im Einsatz ist. Auf meinem Client kann ich nachsehen und hier befindet sich 3.0.9 im Einsatz.
So weit so gut … und nun wird es bizarr …
Was habe ich getestet?
Ich habe mir einen TrueCrypt-Container von fünf MByte erstellt und diesen mit rsync durch die Gegend gejagt. Zunächst einfach den leeren Container. Danach kopierte ich zwei PDF-Dateien rein, die insgesamt 500 KByte groß waren. Hier nun die Ergebnisse und gleich eine gute Nachricht: TrueCrypt-Container lassen sich auch mit Strato HiDrive erfolgreich synchronisieren, ohne dass man jedes mal den kompletten Container durch das Netz jagen muss.
Einige Zusatzinformationen
Die ganze Geschichte scheint an der Option --checksum
zu hängen. Diese Option hat allerdings seinen Preis. Ist der Schalter nicht gesetzt, prüft rsync lediglich die Dateigröße und den Zeitstempel der letzten Modifizierung. Der Witz eines TrueCrypt-Containers ist aber gerade, dass dies nicht preisgegeben wird. Aktivierst Du diesen Schalter, prüft rsync alle Dateien mit einer 128-Bit-Prüfsumme, die exakt die selbe Größe haben. Dazu wird auf beiden Seiten allerdings relativ viel Disk I/O produziert, da natürlich die kompletten Dateien ausgelesen werden müssen. Somit kann das den Synchronisations-Prozess deutlich in die Länge ziehen. Allerdings muss dafür nicht der komplette Container übertragen werden.
Wenn das Ganze nun noch logisch konsistent wäre …
Die Tests
Vom Client Richtung Synology
Schicke ich den TrueCrypt-Container auf das Synology, wird beim ersten Mal der komplette Container übertragen und danach kann ich Optionen verwenden was ich möchte – keine weiteren Updates mehr. Das sieht man an der Sende-Größe.
Schiebe ich nun die beiden erwähnten PDF-Dateien in den Container, überträgt sich auch nur diese Differenz zum Synology und die beiden Dateien sind auch im gesicherten Container.
Verwende ich nun die Optionen --checksum
oder --checksum --inplace
kommt im Prinzip das selbe Ergebnis dabei raus.
Soweit so gut und schön, dass rsync anscheinend TrueCrypt-Container per Standard richtig sichert. Das wäre schön …
Lokale Datensicherung
Veranstalte ich das Ganze nun auf dem lokalen Rechner (kein rsync Daemon involviert), bekomme ich ein komplett anderes Ergebnis. Ich synchronisere also einfach nur von einem Ordner in einen anderen. Auch hier überträgt der erste Lauf die komplette Datei. Gebe ich die Optionen --checksum
oder --checksum --inplace
nicht an, wird der Container jedes mal komplett übertragen. und dann eben nichts mehr – gut, hat sich ja auch nichts geändert.
Schiebe ich hier nun die beiden PDF-Dateien rein und verwende die selben Optionen wie Richtung Synology, kommt das dabei heraus:
Ich verwende --checksum
oder --checksum --inplace
und der Container überträgt sich komplett – also die gesamten fünf MByte. Ok, lokal ist das weniger schlimm – aber trotzdem – es sind nicht alle Container nur fünf MByte groß.
Richtung HiDrive sichern
So, als wäre das noch nicht verwirrend genug, geht es lustig weiter. Sichere ich nun vom Synology Richtung HiDrive, habe ich wieder ein anderes Verhalten.
Lösche ich die PDF-Dateien aus dem Container, muss ich --checksum
verwenden, sonst werden die Änderungen manchmal nicht übertragen. Dann und wann klappt es ohne besondere Optionen, allerdings nicht immer – das zeigt nachfolgendes Beispiel. Befehle direkt hintereinander ausgeführt, TrueCrypt-Container dabei nicht angefasst.
Und jetzt?
Wie gesagt blicke ich nicht ganz durch, wann und wie das mit rsync und den TrueCrypt-Containern funktioniert. Ich habe mehrere Testläufe gemacht und immer ähnlich bizarre Ergebnisse bekommen.
Was ich mit Sicherheit sagen kann: Wenn die Option --checksum
Verwendung findet, klappt es ganz sicher. Allerdings hat das, auch erwähnt, seinen Preis.
Von daher ist es wahrscheinlich am Geschicktesten, TrueCrpyt-Container einen komplett eigenen und dedizierten rsync-Lauf zu spendieren. Dann kann die Prüfsummen-Option zumindest keinen anderen Dateien beeinflussen. Bei große TrueCrypt-Containern wird durch das Auslesen der Datei das Backup schon deutlich länger dauern. Der Vorteil ist aber, dass man Bandbreite spart – es werden nur die Änderungen plus etwas Overhead übertragen.
Wenn Du so etwas vorhast, mache ausführliche Tests mit Deinem Ziel. Das heißt:
- TrueCrypt-Container mounten
- Inhalt verändern
- synchronsierern
- vom Ziel wieder herunterladen
- in TrueCrypt einbinden und nachsehen, ob die Änderungen gezogen haben
- das Ganze am Besten mehrmals wiederholen und auch innerhalb des Containers Dateien löschen, hinzufügen, anlegen und was weiß ich noch alles. Mag sich alles als ein Overkill anhören, aber beim Schreiben dieses Beitrags habe ich die sprichwörtlichen Pferde vor einer Apotheke kotzen sehen.
Ich habe nicht alles gelesen, aber das rsync überträgt nur verändere blocks wenn man auf einen anderen host sichert, also via rsync daemon. Ich glaub auch via ssh bin mir da aber nicht sicher (man rsync). rsync lokal überträgt immer alles.
Vielleicht passt das Kommentar auch nicht weil, wie gesagt, ich nicht alles gelesen habe ;-).
Das mit dem lokal sichern ist auch das geringste Problem. Die Inkonsistenzen zwischen SIchern auf Synology und Sichern auf HiDrive verwirren mich ...
Timestamp prevention an oder aus? Das würde erklären warum du mit csum arbeiten musst. Das sich scheinbar willkürlich die Checksumme ändert kann bei einem Container schonmal passieren. Es ist ein Filesystem mit Verschlüsselung hier wird noch mehr dynamisch geändert als die Dateien die sich darin befinden.
Ja wie gesagt weiß ich nicht, wie HiDrives rsync konfiguriert ist oder welche Version die einsetzen - ich kann bei letzterem nur raten. Ich weiß aber nun zumindest sicher, dass es mit --checksum Richtung HiDrive funktioniert. Verwende ich diese Option nicht, ist es ein Glücksspiel.
Ich rede hier von Einstellungen/Techniken die Truecrypt betreffen. Das hat mit Rsync nichts zu tun. Truecrypt hat eine Option für timestamp prevention und die solltest du ausschalten.
Alternativ versuchs mal mit LUKS. Das integriert sich sowieso besser in ein Linuxsystem. Anleitung zum verschlüsseln von Containern hab ich hier: http://claw.triple6.org/linux/dateiverschlusselung-luks/?lang=de
Ich habe die Erfahrung gemacht, dass rsync bei Truecrypt Containern nur dann zuverlässig und schnell funktioniert, wenn man beide Truecrypt Container entschlüsselt, mounted und dann einen rsync Durchlauf durchführt.
Dann geht das bei großen Truecrypt Containern auch schnell.
Diese Methode nutze ich zum Übertragen von Daten an meine externe Festplatte, wo ich die gleichen TC Container gespeichert habe.
Der Nachteil ist allerdings, dass aufgrund der Verschlüsselung die beiden TC Containerdateien von außen betrachtet bei einem Prüfsummenvergleich, z.B. mit md5sum nicht identisch sind.