クラウドストレージ(私の場合はAmazon Cloud Drive)をFUSEクライアントでマウントし/mnt/cloudます。ただし/mnt/cloud、インターネット経由でファイルを直接読み書きするのは遅いため、クラウドストレージで読み書きするファイルをキャッシュしたいと思います。一度に大量のデータを書き込む可能性があるため、キャッシュはRAMではなくディスクに配置する必要があります。しかし、ディスクが小さすぎるため、クラウドストレージ全体をディスクに複製したくありません。
したがって、キャッシュされたビューをに/mnt/cloudマウントし/mnt/cloud_cache、/var/cache/cloudキャッシュ位置として別のパスを使用します。
今読ん/mnt/cloud_cache/fileでいるなら、私は次のことをしたいです
fileでキャッシュされて/var/cache/cloud/fileいるかどうかを確認します。
- キャッシュされている場合:
filemodtimeおよび/またはチェックサムをから取得することにより、チェックインキャッシュは最新/mnt/cloudです。最新の場合はキャッシュからファイルを提供し、そうでない場合は2に進みます。 - キャッシュされていないか、キャッシュが古い場合:キャッシュにコピー
/mnt/cloud/fileし/var/cache/cloud/fileてキャッシュから提供します。
に書き込みを行うとき、次のようにし/mnt/cloud_cache/fileます
- 書き戻す必要が
/var/cache/cloud/fileあるジャーナルに書き込み、記録fileする/mnt/cloud /var/cache/cloud/file書き込み/mnt/cloudが完了するまで、または以前の書き戻しが完了するまで待機する- コピー
/var/cache/cloud/file先/mnt/cloud
次の要件と制約があります。
- 無料でオープンソース
- 任意のキャッシュ場所にキャッシュを設定する機能
- 任意の場所(おそらくFUSEマウントポイント)をキャッシュする機能
- 透過キャッシング、つまり使用
/mnt/cloud_cacheはキャッシングメカニズムに対して透過的であり、他のマウントされたファイルシステムのように動作します - 書き戻す必要があるものの記録を保持する(キャッシュは、数日間にわたって元のストレージの場所に書き戻す必要がある大量のデータを取得する場合があります)
- 書き戻された、またはしばらくアクセスされていないキャッシュファイルの自動削除
- 一貫性(つまり、外部からの変更を反映する
/mnt/cloud)はそれほど重要ではありません。おそらく/mnt/cloud、一度に1つのクライアントにしかアクセスできませんが、持っているとよいでしょう。
既存のソリューションを探すのにかなりの時間を費やしましたが、満足できるものは見つかりませんでした。
- FS-CacheとCacheFS(https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt)は
nfs、afsファイルシステムでのみ機能するようで、別のFUSEファイルをキャッシュする方法がわかりませんシステムまたは一般的なディレクトリ。 - bcache(https://bcache.evilpiepirate.org/)はブロックデバイスでのみ動作するようです。つまり、別のFUSEファイルシステムをキャッシュできませんでした
- gcsfuse(https://github.com/GoogleCloudPlatform/gcsfuse)これは私が望んでいることとまったく同じだと思いますが、Google Cloud Storageと統合されています。一般的に機能させるには、ハッキングして、GCSへのアクセスを特定のマウントポイントでのローカルファイルアクセスまたはAmazon Cloud Driveへのアクセスに変更する必要があります。