(Photo by Nathalia Segato on Unsplash)
Wie wäre es, wenn man einen Speicherbereich hätte, der auf allen Maschinen verfügbar ist, der aber auch automatisch auf verschiedenen Seiten gesichert wird? Wie wäre es, wenn einen das System auch informieren kann, wo ein File sich überall befindet? Versioniert?
Das wird mit Git Annex realisiert.
Normalerweise verarbeitet Git keine Binary Blobs. Git Annex verarbeitet diese Blobs gesondert. Und damit ist es dann möglich, diverse Annex-Repositories unterschiedlicher Form zu realisieren:
- Ein lokales Repository auf einem Arbeits-Desktoprechner
- Ein Backup auf Platten
- Backups auf S3
- Tarballs (die man z. B. mit Syncthing verteilen kann)
Ein lokales Git Annex Repository stellt zunächst einmal alle Dateien dar, die sich im Annex befinden. Das sind im Alltgemeinen symbolische Links auf die Binary Blobs. Das muß aber nicht bedeuten, daß die Blobs auch auf der Maschine sind.
Man kann z. B. auf seinem Laptop die Daten vorhalten, die man wirklich benötigt. Wenn man eine Datei benötigt, holt man sie sich aus dem Annex, z. B. aus einem S3-Store oder von einer lokalen Platte. Hier werden die Backups auf Wunsch auch verschlüsselt. Mittels
git annex whereis Datei
sagt einem das System, wo die Datei zu finden ist. Das System löscht auch lokal nicht wahrlos Dateien, es müssen immer eine vordefinierte Anzahl von Kopien der Datei vorhanden sein.
Mit Hilfe des git-annex assistants steht zudem ein Automatisierungsmechanismus bereit, der über eine Webseite kontrolliert werden kann. Dort sind dann alle Repositories miteinander so verknüpft, daß ein Speichern einer Datei auf dem lokalen System je nach Eigenschaft der anderen Repositories direkt in die anderen Repositories verteilt werden. Somit werden automatisch alle notwendigen Kopien angelegt.
Man kann auch passive Kopien von Unterverzeichnissen auf Systeme verteilen. So kann man z. B. seine Musik in einem Annex halten und das Musikverzeichnis via rsync auf sein Smartphone kopieren. Der Annex weiß auch über diese Kopien Bescheid und man kann notfalls Dateien von seinem Smartphone zurückholen. Aber jede neue Musikdatei wird dann per Befehl auch wieder auf das Smartpone synchronisiert.
Man kann sogar mit dem git-annex Webdownloads als Objekte definieren. Der Annex speichert dann den Url und holt von diesem dann auch die Datei.
Dateien und Verzeichnisse können - auch automatisiert - getaggt werden. Dann ist man in der Lage, die Dateistruktur nach Tag umzustrukturieren. Da die Dateien selbst ja nur Links auf den Blobs sind, sind dadurch die komplexesten Darstellungen der Dateien möglich.
Die Anwendungsszenarien sind ziemlich unbegrenzt.
Kleiner Nachtrag
Mir ist aufgefallen, daß es fertig compilierte Binaries auf der
git-annex-Seite
gibt. Damit kann man auch git-annex nativ auf dem SFOS-Phone betreiben.