Angenommen, ich mounte einen Cloud-Speicher (in meinem Fall Amazon Cloud Drive) mit einem FUSE-Client unter /mnt/cloud. Da das direkte Lesen und Schreiben von Dateien /mnt/cloudüber das Internet langsam ist, möchte ich die Dateien, aus denen ich lese und die ich schreibe, im Cloud-Speicher zwischenspeichern. Da ich möglicherweise viele Daten gleichzeitig schreibe, sollte sich der Cache auf meiner Festplatte und nicht im RAM befinden. Ich möchte jedoch nicht den gesamten Cloud-Speicher auf meiner Festplatte replizieren, da meine Festplatte möglicherweise zu klein ist.
Ich möchte also eine zwischengespeicherte Ansicht in /mnt/cloudmount at haben /mnt/cloud_cache, die einen anderen Pfad verwendet, /var/cache/cloudbeispielsweise als Caching-Speicherort.
Wenn ich jetzt lese /mnt/cloud_cache/file, soll Folgendes passieren:
Überprüfen Sie, ob fileum zwischengespeichert ist /var/cache/cloud/file.
- Wenn zwischengespeichert: Check-
filein-Cache ist aktuell, indem Modtime und / oder Checksumme von abgerufen werden/mnt/cloud. Wenn es aktuell ist, servieren Sie die Datei aus dem Cache, andernfalls fahren Sie mit Schritt 2 fort. - Wenn nicht zwischengespeichert oder Cache - out-of-date: Kopieren
/mnt/cloud/fileauf/var/cache/cloud/fileund serviert es aus dem Cache.
Wenn ich schreibe, /mnt/cloud_cache/filesoll das passieren:
- Schreiben Sie
/var/cache/cloud/filein ein Tagebuch,filein das zurückgeschrieben werden muss , und zeichnen Sie es auf/mnt/cloud - Warten Sie,
/var/cache/cloud/filebis das Schreiben abgeschlossen ist und / oder vorherige Zurückschreiben/mnt/cloudabgeschlossen ist - Kopieren
/var/cache/cloud/filenach/mnt/cloud
Ich habe die folgenden Anforderungen und Einschränkungen:
- Kostenlos und Open Source
- Möglichkeit zum Festlegen eines beliebigen Cache-Speicherorts
- Möglichkeit zum Zwischenspeichern eines beliebigen Speicherorts (wahrscheinlich ein FUSE-Mount-Punkt)
- Transparentes Caching, dh using,
/mnt/cloud_cacheist für den Caching-Mechanismus transparent und funktioniert wie jedes andere gemountete Dateisystem - Aufzeichnen, was zurückgeschrieben werden muss (im Cache werden möglicherweise viele Daten abgelegt, die im Laufe der Tage an den ursprünglichen Speicherort zurückgeschrieben werden müssen)
- Automatisches Löschen von zwischengespeicherten Dateien, die zurückgeschrieben wurden oder auf die seit einiger Zeit nicht mehr zugegriffen wurde
- Konsistenz (dh das Reflektieren von externen Änderungen an
/mnt/cloud) ist nicht besonders wichtig, da wahrscheinlich immer nur ein Client gleichzeitig darauf zugreift/mnt/cloud, aber es wäre schön, wenn dies geschehen würde.
Ich habe einige Zeit damit verbracht, nach vorhandenen Lösungen zu suchen, aber nichts Befriedigendes gefunden.
- FS-Cache und CacheFS ( https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt ) scheinen nur mit
nfsoderafsDateisystemen zu funktionieren, und ich weiß nicht, wie ich eine andere FUSE-Datei zwischenspeichern soll System oder ein beliebiges allgemeines Verzeichnis. - bcache ( https://bcache.evilpiepirate.org/ ) scheint nur mit Blockgeräten zu funktionieren, dh es konnte kein anderes FUSE-Dateisystem zwischengespeichert werden
- gcsfuse ( https://github.com/GoogleCloudPlatform/gcsfuse ) Ich denke, das macht genau das, was ich will, aber es ist in Google Cloud Storage integriert. Damit es im Allgemeinen funktioniert, müsste ich es hacken und alle Zugriffe auf GCS in lokale Dateizugriffe auf dem angegebenen Einhängepunkt oder Zugriffe auf Amazon Cloud Drive ändern