Backup per sshfs

Wenn man einen Server betreibt ist ein Backup sehr praktisch. Viele Hoster bietet mittlerweile Backupspeicher an, auf welchen man seine Daten sichern kann. In diesem Artikel wird dabei davon ausgegangen das sich auf dem Server größere Imagedateien befinden, welche inkrementell gesichert werden sollen. Im ersten Schritt wird der Backupspeicher eingebunden. Viele Server lassen sich dabei mit SFTP ansprechen. Um dieses einzubinden muss das passende Paket installiert werden:

apt-get install sshfs

Danach erstellen wir einen Mountpunkt:

mkdir /mnt/backup

Anschließend kann das entfernte Dateisystem eingebunden werden:

sshfs nutzer@example.org:/ /mnt/backup

Für das Backup wird “rdiff-backup” genutzt, welches über die Paketverwaltung installiert werden kann:

apt-get install rdiff-backup

Problematisch an “rdiff-backup” ist die Tatsache, das dieses unter anderem mit Hardlinks arbeitet und diese bei SFTP unter Umständen nicht zur Verfügung stehen. Deshalb muss im ersten Schritt ein Image erzeugt werden und dieses eingebunden werden. Mittels:

rdiff-backup /etc/ /mnt/backup/etc/

kann dann anschließend das Backup angelegt werden. Möchte man ermitteln welche Backupversionen sich im Verzeichnis befinden, so kann dies durch

rdiff-backup -l /mnt/backup/etc/

bewerkstelligt werden. Damit man das ganze nicht immer per Hand erledigen muss (was bei Backups nicht ratsam wäre), habe ich das ganze in ein Skript gegossen welches auf GitHub zu finden ist.

Weitere Informationen gibt es unter:
http://wiki.ubuntuusers.de/FUSE/sshfs
http://www.nongnu.org/rdiff-backup/
http://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_rdiff-backup

Images unter Linux anlegen und nutzen

Unter Linux ist es ohne Probleme möglich ein Image zu mounten. In diesem Fall soll ein leeres Image erstellt werden und anschließend eingebunden werden. Erstellt wird das Image unter Zuhilfenahme von “dd”:

dd if=/dev/zero of=image.img bs=1024000 count=1000

Das in diesem Fall erstellte 1 GiB große Image ist mit Nullen gefüllt. Mittels:

mkfs.ext4 image.img

wird das Image mit einem ext4 Dateisystem versehen. Dies ist notwendig um es anschließend einzubinden. Bewerkstelligt wird das durch den Befehl “mount”:

mount -o loop /home/seeseekey/image.img /home/seeseekey/ImageMountpoint/

Nach dem erfolgreichen Einbinden kann das Image genutzt werden.

Image von einer SD-Karte unter Mac OS X erstellen

Manchmal benötigt man ein Image von einer SD-Karte, z.B. dann wenn man eine Installation einer Raspberry Pi Distribution von einer solchen Karte sichern möchte. Im ersten Schritt muss man ermitteln welche Kennung die SD-Karte trägt. Dies geschieht im Terminal mittels:

diskutil list

Die Ausgabe könnte dann in etwa so aussehen:

/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         250.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           *249.8 GB   disk1
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *16.1 GB    disk2
   1:             Windows_FAT_32 NO NAME                 16.1 GB    disk2s1

In diesem Fall ist das Gerät “/dev/disk2” die SD-Karte ist. Mittels des Befehls “dd” wird dann das entsprechende Image erzeugt:

sudo dd if=/dev/disk2 of=sdcard.img

Der Vorgang nimmt dabei durchaus einige Zeit in Anspruch, in welcher man keine Ausgaben auf der Konsole sieht. Nach der Erzeugung des Images, gibt “dd” noch eine Auswertung des Kopiervorganges zum Besten und die Kopie ist komplett.

Use the key, NAS.

Nach und nach wird das was mit dem NAS. Als nächster Punkt auf der Liste stand die Verschlüsselung auf dem Plan. Da ich plante eine Containerdatei auf dem RAID 5 Laufwerk zu erstellen (Größe zirka 5700 GB) war meine erste Wahl Truecrypt. Also Truecrypt auf dem NAS installiert und gestartet. Und schon kamen die nächsten Probleme. Truecrypt wollte kein Image größer 2 TB erstellen. Da es sich bei dem Dateisystem um NTFS handelt konnte es daran schonmal nicht liegen, schließlich liegt die maximale Dateigröße bei 16 Exbibyte. Das sollte immerhin eine Weile reichen :)

Nach ein paar Tests und das suchen nach einem Workaround im Truecrypt Forum gab ich es dann schließlich auf. Eine Alternative musste her. Also erstmal ein paar Minuten im Netz nach der Suche nach einer Alternative verbracht. Irgendwann fiel mir dann FreeOTFE auf was in etwa das gleiche konnte wie Truecrypt. Also ab damit auf das NAS und angefangen ein Container zu erstellen. Aber man sollte sich ja nie zu früh freuen und so brache FreeOTFE nach knapp zwei Terrabyte ab. Wieder einmal wegen “zu wenig Speicher”.

Da das nach einem Fehler im System klang (schließlich scheiterten beide Programme), schrieb ich ein Testprogramm welches eine 5 TB Datei erzeugt. Das Testprogramm funktionierte Tadellos und ich hatte eine 5 TB große Datei voller Müll auf der Festplatte :)

Also habe ich Truecrypt wieder hervorgekramt und mal genau untersucht bis zu welcher Größe er mich einen Container anlegen lässt. Nach einigem Probieren bin ich dann auf die maximale Containergröße von 2097151 MB gekommen. Also genau 2 hoch 21 MB minus 1. Habe danach erstmal in den Quelltext von Truecrypt geschaut, aber um da durchzusehen bedarf es wohl einiger Einarbeitungszeit.

Nebenbei noch einen Bugreport an die Truecrypt Leute geschrieben. So danach wollte ich im Truecrypt Quelltext debuggen, dazu muss man den Quelltext ersteinmal compilieren. Ist im ersten Moment kein Problem schließlich ist Truecrypt Open Source. Doch mal wieder zu früh gefreut. Zum compilieren von Truecrypt benötigt man allerdings das Windows Driver Kit (WDK) von Microsoft. Das bekommt man aber leider nur als MSDN Abonnement und das kostet wieder viel Geld.

Also trat nun Plan B (oder ist das schon Plan C oder D?) in Kraft. Vielleicht handelt es sich um ein Windows spezifisches Problem und da Truecrypt auch unter Linux zur Verfügung steht lag der Gedanke nah einfach das Laufwerk per SMB freizugeben und den Truecrypt Container von einem Linux Rechner aus zu erstellen.

Das funktionierte auch auf den ersten Blick, allerdings gab es dort das Problem das die SMB Connection immer nach ein paar Minuten abbrach und der ganze Spaß auch knapp 32 Tage gedauert hätte. Naja nun kann ich nur noch schauen ob sich die Entwickler den Bugreport zu Herzen nehmen oder nochmal selber im Quelltext nachschauen.

So und hier noch zwei Bilder vom NAS: