Immer wieder gibt es das Szenario, dass Daten von einem Server auf ein anderes Dateisystem migriert werden müssen. Hierfür gibt es verschiedene Gründe: Leistungssteigerung, neue Funktionen, mehr freie Ressourcen und viele mehr. Eine beliebte Möglichkeit die Daten von einem Datenträger auf den neuen zu migrieren ist mit Hilfe von rsync. Das Quell- und Zielverzeichnis wird eingehängt, die Daten werden im Betrieb zuerst kopiert und abschließend nochmals mit rsync abgeglichen, um neue bzw. bereits gelöschte Dateien, die zwischen dem Kopieren und dem rsync hinzugekommen sind, abzugleichen. Ein Nachteil dieser Methode ist, dass man für den Zeitraum des rsyncs das Quelldateisystem read-only oder offline setzen muss, damit man ein konsistentes Zieldateisystem erhält. Bei kleinen Datenmengen und Volumen kann man den rsync auf wenige Sekunden reduzieren. Bei größeren kann es jedoch schnell einige Stunden dauern.
Eine Alternative ist die Verwendung von AUFS (AnotherUnionFS). AUFS ist ein sog. Overlay-Dateisystem und ging hervor aus dem früheren UnionFS. AUFS wird z.B. auf Live CD Linux Distributionen eingesetzt. Es ermöglicht das ‘Beschreiben’ von unbeschreibbaren Medien wie CD-ROMs. Möglich ist das durch das übereinander hängen von zwei Dateisystemen.
In dem Beispiel der Datenmigration wird von einem Cluster mit mind. 2 Nodes ausgegangen, damit eine unterbrechungsfreie Datenmigration möglich ist. Bei nur einem Server gibt es einen kurzen Ausfall solange man die Dateisysteme für und mit AUFS umhängt. Voraussetzung für AUFS ist ein aktueller Kernel mit AUFS Support. Distributionen wie z.B. Debian bieten entsprechende Pakete aus dem Repository mit an. Es sollte meiner Meinung nach jedoch eine möglichst aktuelle Version eingesetzt werden.
Eine Datenmigration kann anschließend wie folgt aussehen: Das Quelldateisystem wird umgehängt auf ein temporäres Verzeichnis, genauso wie das leere Zieldateisystem. Dann kommt AUFS zum Einsatz:
‘mount -t aufs -o br=/mnt/ziel:/mnt/quelle none /bisheriger/mountpoint’
Hier wird der bisherige Mountpoint als AUFS Layer eingehängt. Neue Dateien werden in dem Branch /mnt/ziel abgelegt. Bestehende Dateien werden aus /mnt/quelle gelesen, welche wiederum bei Änderungen in /mnt/ziel abgelegt bzw. gespeichert werden. Dateien die gelöscht werden, werden mit einem ‘wh'(whiteout) Flag markiert. In diesem Status kann man ohne Zeitdruck die Daten zwischen den Dateisystemen im Hintergrund abgleichen. Der Datenabgleich kann mit den mitgelieferten Tools Brsync (aufs-utils) durchgeführt werden. Das mit dem in aufs-utils enthaltenen Skript ‘aubrsync’ gleicht die Daten wie ein normaler rsync zwischen Quell- und Zielverzeichnis ab, beachtet jedoch die mit .wh (whiteout) markierten Dateien und Verzeichnisse. Nach dem erfolgreichen Lauf des Skripts kann abschließend das neue Zielverzeichnis auf den originalen Mountpoint gehängt werden und die Migration ist abgeschlossen.

Sebastian Saemann
Sebastian Saemann
Head of Managed Services

Sepp kam von einem großen deutschen Hostingprovider zu NETWAYS, weil ihm dort zu langweilig war. Bei uns kann er sich nun besser verwirklichen, denn er leitet zusammen mit Martin das Managed Services Team. Wenn er nicht gerade Server in MCollective einbindet, versucht er mit seinem Motorrad einen neuen Geschwindigkeitsrekord aufzustellen.