Wie erhalte ich transparente, effiziente Snapshots oder Versionierungen von Dateisystemen unter ext3 / 4?

11

Ich habe lange über die Versionierung von Dateisystemen nachgedacht. Dies ist eine Killer-Funktion, und ich habe mir Wayback, ext3cow, zfs, Sicherungslösungen oder einfach nur cvs / svn / git-Overlays angesehen.

Ich betrachte ext3cow als das Modell für meine Anforderungen. Transparent, effizient, aber ich kann auf die zusätzliche ls abc@timestampFunktion verzichten. Solange ich irgendwie eine automatisierte, transparente Versionierung meiner Dateien bekomme.

Es kann augenblicklich sein oder auf Schnappschüssen in Intervallen von 10 s, 30 s, 1 m, 5 m, 15 m usw. basieren. Nur etwas, das Tausende von Dateien in einem bestimmten Verzeichnis in verschiedenen Größen, die kleinsten, aber einige, effizient verarbeitet über 100 m bis 1 gb.

ZFS ist nicht wirklich eine Option, da ich unter Linux bin (und es vorziehen würde, es nicht über Fuse zu verwenden, da ich bereits ein ext3-Setup habe, das ich versionieren möchte, nicht etwas Neues).

Welche Lösungen gibt es?

Dale Forester
quelle

Antworten:

7

Wenn Sie Ihre Dateisysteme mit LVM verpacken, können Sie mithilfe der zugrunde liegenden logischen Datenträgerschicht ein Snapshot-Volume erstellen. Es ist ein ziemlich einfacher Prozess und überraschend effektiv für Standard-Schnappschüsse wie das Sichern und Rückgängigmachen von rm -frOopsies.

McJeff
quelle
Danke für die Antwort. Leider suche ich etwas, das auf ein vorhandenes Dateisystem angewendet werden kann.
Dale Forester
6

Nach 8 Jahren der Suche fand ich das SVNFS von Marco R. Gazzetta (das sich von älteren Projekten mit dem gleichen Namen von John Madden unterscheidet [welches man verschiedene Dinge tut]). Dieses SVNFS verwendet svn transparent in R / W-Operationen:

Anstatt ein Dateisystem zu erstellen, das seine eigene Versionierung durchführt, habe ich ein vorhandenes Versionierungstool, Subversion, verwendet und dessen Verwendung transparent gemacht. Der Vorteil ist, dass Sie für dieses Dateisystem kein neues Tool benötigen, wenn Sie mit Subversion vertraut sind

Es ist in Python geschrieben und verwendet FUSE:

Jetzt starten Sie das Versionsdateisystem, indem Sie das angehängte Skript aufrufen:

python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles

Sobald alles in Ordnung ist, sollten Sie in der Lage sein, eine Liste beider Verzeichnisse zu erhalten und festzustellen, dass der Inhalt identisch ist.

Wenn Sie nun (fast) eine Datei in einem der beiden Verzeichnisse erstellen, wird diese auch auf der anderen Seite des Zauns angezeigt. Der große Unterschied besteht darin, dass beim Erstellen einer Datei im Verzeichnis myfiles diese automatisch unter die Versionskontrolle gestellt wird (das Gegenteil ist nicht der Fall).

Im Beispiel verwendet SVNFS ein separates Verzeichnis für das Repo. Obwohl ich es nicht getestet habe. Für meine Bedürfnisse hätte ich gerne ein Repository direkt in meinem Arbeitsverzeichnis.


Ich habe auch vor 4 Jahren einen Hinweis auf die Versionsfunktionen von Reiser4 gefunden:

Siehe Reiser 4. Dateien sind Verzeichnisse.

z.B: diff -u main.C main.C/r/123

Oder um auf Eigenschaften zuzugreifen

cat main.C/p/svn-eolstyle

echo "foobar" > main.C/p/my-property 

Es scheint, dass es am besten ist, diesem Modell zu folgen, da ein großes Dateisystem diesen Weg bereits geht.

-Paul Querna

Aber ich habe es auch nicht überprüft.


Vor zwei Jahren habe ich weiter gesucht, das Projekt FiST zur Generierung stapelbarer Dateisysteme gefunden und mich an prof. Erez Zadok von der Stony Brook University war Berater / Mentor für das Projekt versionfs langer Zeit . Zitat:

http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/

http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf

ermöglicht es Benutzern, ihre eigenen Versionen einfach und effizient zu verwalten. Versionfs bietet diese Funktionalität mit nicht mehr als 4% Overhead für typische benutzerähnliche Workloads. Mit Versionfs können Benutzer auswählen, welche Versionen beibehalten werden und wie sie über Aufbewahrungsrichtlinien bzw. Speicherrichtlinien gespeichert werden. Benutzer können den Kompromiss zwischen Speicherplatz und Leistung auswählen, der ihren individuellen Anforderungen am besten entspricht: vollständige Kopien, komprimierte Kopien oder Blockdeltas. Obwohl Benutzer ihre Versionen steuern können, kann der Administrator minimale und maximale Werte erzwingen und Benutzern sinnvolle Standardeinstellungen bereitstellen.

Durch die Verwendung von libversionfs können unveränderte Anwendungen außerdem Versionen untersuchen, bearbeiten und wiederherstellen. Benutzer können einfach vertraute Tools ausführen, um auf frühere Dateiversionen zuzugreifen, anstatt dass Benutzer separate Befehle lernen müssen, oder den Systemadministrator bitten, ein Dateisystem erneut bereitzustellen. Ohne libversionfs sind frühere Versionen für Benutzer vollständig verborgen.

Schließlich geht Versionfs über das einfache Copy-on-Write hinaus, das in früheren Systemen verwendet wurde: Wir implementieren Copy-on-Change. Obwohl wir zunächst erwartet hatten, dass der Vergleich zwischen alten und neuen Seiten zu teuer sein würde, stellten wir fest, dass die Erhöhung der Systemzeit durch die verringerte E / A- und CPU-Zeit, die mit dem Schreiben unveränderter Blöcke verbunden ist, mehr als ausgeglichen wird. Wenn teurere Speicherrichtlinien verwendet werden (z. B. Komprimierung), ist das Kopieren bei Änderung noch nützlicher.

Es schien mir sehr interessant zu sein, aber die Kontaktaufnahme mit den Leuten, die an dem Projekt gearbeitet haben, ergab, dass es keinen bekannten Ort für den Quellcode gibt. Professor selbst erklärte in der Mail:

Der Code von Versionfs ist jetzt sehr alt und funktionierte nur in Kernel 2.4. Wenn Sie weiterhin eine stapelbare Versionierung von f / s wünschen, müssen Sie diese von Grund auf neu schreiben - möglicherweise basierend auf wrapfs (siehe wrapfs.filesystems.org/).

Es gibt hier also kein funktionierendes Projekt, obwohl mir das Konzept stapelbarer Dateisysteme sehr nett erscheint. Möchte jemand ein Projekt basierend auf Wrapfs starten , benachrichtige mich bitte :)

saulius2
quelle
3

Sie können gitfs überprüfen . Es ist ein FUSE-Dateisystem, das auf Git basiert, ziemlich stabil und super einfach zu bedienen ist.

Im Grunde ist es eine Überlagerung über Git. Jedes Mal, wenn Sie eine Datei oder ein Verzeichnis aktualisieren, wird mit dieser Änderung ein Commit erstellt (weiß, dass die Commits überprüft werden müssen, damit beim Entpacken eines Archivs nicht 100 Commits entstehen). Kann auch Ihre Fernbedienung synchronisieren und die Konflikte mithilfe der Strategie "Immer meine akzeptieren" zusammenführen.

Wenn Sie es bereitstellen, erhalten Sie zwei Verzeichnisse: current und history . ├── current │   ├── test1.md │   ├── test2.md │   ├── test3.md -> current/test2.md │   ├── test4.md │   └── test_directory └── history ├── 2014-11-23 │   ├── 20-00-21-d71d1579a7 │   │   └── testing.md │   └── 20-42-32-7d09611d83 │   ├── test2.md │   └── testing.md ├── 2014-12-08 │   ├── 16-38-30-6d6e71fe47 │   │   ├── test2.md │   │   └── test1.md

Weitere Informationen finden Sie auf dieser Seite .

vtemian
quelle
Das Hinzufügen weiterer Informationen würde diese Antwort verbessern.
Dave M
2

bup sieht vielversprechend aus.

Ältere Diskussion hier: http://lwn.net/Articles/380983/

Shane Geiger
quelle
Es gibt eine Einschränkung bei der Verwendung von etwas, das auf Git basiert. Änderungen in Git werden nicht als Deltas vom Ursprung behandelt - jedes Commit ist die vollständige Datei, selbst wenn Sie nur ein Byte ändern.
Synthesizer
0

Versuchen Sie es mit rsnapshot - ich habe es selbst nicht verwendet, bin aber beim Betrachten von Deduplizierungssystemen auf Dateiebene darauf gestoßen.

Jason
quelle
Das ist interessant. Ich werde es auf jeden Fall untersuchen. Ich mache mir Sorgen, dass die io-Last auf meinem System zu Stottern führen kann (ich habe vor einiger Zeit mit rsync nichts Ähnliches gemacht und es aufgrund von Störungen / Stottern in anderen Konsolen beim Ausführen nicht mehr verwendet).
Dale Forester
Ich habe mir rsnapshot angesehen und ich mag seine Idee, aber es ist sehr, sehr bedauerlich, dass es eine Kopie von allem erfordert, was es ist. Leider und notwendigerweise arbeite ich mit Laufwerken an ihrer Grenze und möchte Snapshot-Inhalte erstellen, die viel größer sind als der verbleibende freie Speicherplatz.
Dale Forester
1
Die Schwierigkeit liegt in Ihren Anforderungen. neben etwas wie rsnapshot oder LVM, ext2 / ext3 in Sie weisen darauf hin , ext3cow nicht eine Snapshot - Anlage gebaut haben., aber Sie würden die darunter liegende fielsystem ändern müssen. Beachten Sie, dass Sie anscheinend rsnapshot verwenden und Ihre Daten auf einem anderen Computer speichern können. Ich weiß nicht, über welchen Speicherplatz Sie sprechen, aber es kann sinnvoll sein, Ihre Schnappschüsse auf einem anderen Computer zu speichern . Beachten Sie auch, dass für Snapshots jeglicher Art Speicherplatz erforderlich ist. Wenn Ihre Laufwerke fast voll sind, wie viel Speicherplatz haben Sie noch für Schnappschüsse?
Jason