クラウドストレージ(私の場合は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
いるかどうかを確認します。
- キャッシュされている場合:
file
modtimeおよび/またはチェックサムをから取得することにより、チェックインキャッシュは最新/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へのアクセスに変更する必要があります。