ubuntuusers.de

BufferFS

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Vanger

Anmeldungsdatum:
4. Juni 2009

Beiträge: 46

Hallo zusammen,

in der nächsten Zeit möchte ich ein neues Projekt starten und habe mir gedacht, ich stelle das hier kurz vor um im Voraus Feedback zu erhalten. Wichtigste Fragestellung ist ob es für das Problem, das mein "BufferFS" lösen soll, bereits Lösungen gibt - und falls nein würde ich mich auch über allgemeines Feedback zu meinem Vorhaben freuen.

Das Ziel ist ein asynchrones, gepuffertes Dateisystem. Ich habe einen lokalen Fileserver auf dem aktuell 7 TB verschiedenste Daten vorgehalten werden. Die Hardware ist reine Consumer-Hardware und somit nicht auf einen 24/7-Betrieb ausgelegt. Der Stromverbrauch ist mir ein Dorn im Auge (Strom kostet Geld und auch ansonsten ist unnötiger Stromverbrauch für mich eine ökologische Sünde) und die Tatsache, dass das Brummen des Fileservers meinen Schlaf stören würde, tut sein übriges. Die Daten auf dem Fileserver benötige ich immer wieder - weswegen der Server momentan im Ergebnis trotzdem die meiste Zeit des Tages läuft. Das würde ich gerne ändern.

Vor kurzem habe ich mir ein Raspberry Pi gekauft und würde dieses nun gerne zusammen mit einer externen USB-Festplatte (1 TB) als eine Art "Puffer" für den Fileserver verwenden - mit dem Ziel, dass der Fileserver seltener eingeschaltet sein muss. Das Raspi schaltet sich hierbei zwischen Client und Fileserver und versucht Anfragen auf Dateien selbstständig zu erfüllen. Hierzu werden alle Metadaten vom freigegebenen Verzeichnis des Servers, die Inhalte einiger häufig genutzter Dateien sowie manuell ausgewählte Dateien auf der externen Festplatte des Raspi zwischengespeichert. Lesevorgänge auf Dateien die auf der externen Festplatte des Raspi vorgehalten werden, werden von diesem Puffer aus erfüllt - ohne dass der Fileserver hierzu eingeschaltet sein müsste. Werden nicht gepufferte Dateien angefragt, startet das Raspi den Fileserver (Wake-on-LAN) und reicht die Daten durch. Schreibvorgänge werden zunächst vollständig auf der externen Festplatte des Raspi gepuffert und irgendwann später (ab einer gewissen Datenmenge, in regelmäßigen Abständen und/oder manuell angestoßen) auf den Fileserver geschrieben.

Meine Idee wäre dieses Problem mit einem von mir zu entwickelnden FUSE-Dateisystem zu lösen. Als Programmiersprache habe ich mich für Python entschieden, wobei ich anmerken möchte, dass ich diese Programmiersprache zum aktuellen Zeitpunkt nicht kann. Mithilfe dieses Projekts möchte ich Python lernen - momentan komme ich in erster Linie aus der Richtung PHP, JavaScript und C++. Ich lerne Programmiersprachen gerne an konkreten Projekten.

Meine Roadmap (ohne Termine):

  • Version 0.1: Alle Anfragen auf ein Verzeichnis werden 1:1 auf ein anderes Verzeichnis gemappt (–> wie mount --bind)

  • Version 0.2: Metadaten werden gepuffert (–> ls -l funktioniert obwohl das durchgereichte Verzeichnis nicht eingebunden ist)

  • Version 0.3: Bei Lese- und Schreibvorgängen wird ein Skript ausgeführt, das das durchgereichte Verzeichnis einbindet und anschließend die gewünschte Aktion durchführt (in so einem Skript soll später die Logik stecken den Fileserver mit Wake-on-LAN aufzuwecken)

  • Version 0.4: Schreibvorgänge werden vollständig gepuffert, Lesevorgänge für einige manuell ausgewählte Dateien werden aus dem Puffer erfüllt

  • Version 0.5: Die zu pufferenden Dateien werden mithilfe eines Algorithmus vollautomatisch ausgewählt und entsprechend in den Puffer geladen bzw. aus dem Puffer gelöscht

  • Version 1.0: Der ganze Spaß funktioniert wie er soll 😉

Schonmal Danke für euer Feedback!

Viele Grüße, Rudi

Antworten |