読み取りと書き込みの両方のためにディレクトリまたはマウントされたファイルシステムを透過的にキャッシュする方法は?

読み取りと書き込みの両方のためにディレクトリまたはマウントされたファイルシステムを透過的にキャッシュする方法は?

FUSEクライアントを使用していくつかのクラウドストレージ(私の場合はAmazon Cloud Drive)をインストールしたとします/mnt/cloud。しかし、ファイルを直接読み書きするのは/mnt/cloudインターネット経由で行う必要があるため遅いので、読み書きするファイルをクラウドストレージにキャッシュしたいと思います。おそらく一度に大量のデータを書き込むので、キャッシュはRAMではなくディスクに配置する必要があります。しかし、私のディスクが小さすぎるため、クラウドストレージ全体を自分のディスクにコピーしたくありません。

そのため、キャッシュの場所などの他のパスを使用する/mnt/cloudMountedでキャッシュビューを取得したいと思います。/mnt/cloud_cache/var/cache/cloud

今読んだら、/mnt/cloud_cache/file次のことが起こりますように。

fileにキャッシュされていることを確認してください/var/cache/cloud/file

  1. キャッシュされている場合:fileモードタイムおよび/またはチェックサムを取得して、キャッシュが最新であることを確認してください/mnt/cloud。最新のファイルの場合はキャッシュからファイルを提供し、そうでない場合は2に進みます。
  2. キャッシュされていないか、キャッシュが期限切れになった場合:キャッシュ/mnt/cloud/fileにコピーして/var/cache/cloud/fileキャッシュから提供します。

次のアドレスに書き込むときに/mnt/cloud_cache/fileこれが発生したいと思います。

  1. 再構築する必要がある/var/cache/cloud/fileログを作成して記録します。file/mnt/cloud
  2. 書き込みが/var/cache/cloud/file完了するか、以前の書き込みの保存が/mnt/cloud完了するのを待ちます。
  3. /var/cache/cloud/fileにコピー/mnt/cloud

次の要件と制限があります。

  • 無料とオープンソース
  • キャッシュを任意のキャッシュ位置に設定する機能
  • どこでもキャッシュできる機能(おそらくFUSEマウントポイント)
  • 透明なキャッシュ、つまり/mnt/cloud_cacheキャッシュメカニズムはユーザーにとって透明で、マウントされた他のファイルシステムのように動作します。
  • 書き換えるべき内容を記録します(キャッシュは、数日間元の保存場所に書き換える必要がある多くのデータを取得できます)。
  • 書き換えられたか、しばらくアクセスされなかったキャッシュファイルを自動的に削除します。
  • 一貫性(つまり、外部の変更をペアに反映すること)は/mnt/cloud一度に1つのクライアントだけにアクセスするので、あまり重要ではありませんが、そうであれば良いでしょう。/mnt/cloud

既存のソリューションを見つけるのにかなりの時間を費やしましたが、満足のいくものが見つかりませんでした。

  • FS-キャッシュとCacheFS(https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txtnfs)は、またはファイルシステムでのみ機能しているようですafs。他のFUSEファイルシステムや通常のディレクトリをキャッシュする方法がわかりません。
  • 隠れ家(https://bcache.evilpiepirate.org/)はブロックデバイスでのみ動作するようです。つまり、他のFUSEファイルシステムはキャッシュできません。
  • GCSFUSE(https://github.com/GoogleCloudPlatform/gcsfuse)これは私が望むものだと思いますが、Google Cloud Storageと統合されています。機能するには、ハッキングしてGCSへのアクセスを指定されたマウントポイントのローカルファイルアクセスまたはAmazon Cloud Driveへのアクセスに変更する必要がありました。

ベストアンサー1

試してみてください猫男、現在開発中の汎用ヒューズキャッシュファイルシステムです。

おすすめ記事