
たとえば、FUSE クライアントを使用して、クラウド ストレージ (私の場合は Amazon Cloud Drive) を にマウントするとします/mnt/cloud
。ただし、ファイルを直接読み書きすると、/mnt/cloud
インターネットを経由する必要があるため速度が遅くなるため、クラウド ストレージから読み書きするファイルをキャッシュする必要があります。一度に大量のデータを書き込む可能性があるため、キャッシュは RAM ではなくディスク上に配置する必要があります。ただし、ディスクが小さすぎる可能性があるため、クラウド ストレージ全体をディスクに複製することは避けます。
そこで、別のパス (たとえばキャッシュ場所)を使用する に/mnt/cloud
マウントされたキャッシュ ビューを用意したいと思います。/mnt/cloud_cache
/var/cache/cloud
今 と読む場合/mnt/cloud_cache/file
、次のことが起こることを望みます。
file
が にキャッシュされているかどうかを確認します/var/cache/cloud/file
。
- キャッシュされている場合:
file
から変更時刻やチェックサムを取得して、キャッシュが最新であることを確認します/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
おそらく一度にアクセスするクライアントは 1 つだけなので、一貫性 (つまり、外部の変更を に反映すること) はそれほど重要ではありません/mnt/cloud
が、あれば便利です。
既存の解決策を探すのにかなりの時間を費やしましたが、満足のいくものは見つかりませんでした。
- 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 へのアクセスに変更する必要があります。
答え1
使ってみる猫、私が現在取り組んでいる汎用ヒューズ キャッシュ ファイル システムです。
答え2
間に NFS 間接を追加することで、FS-Cache/CacheFS を使用して fuse マウントされたシステムをキャッシュすることができます。fuse マウントが /fusefs にある場合は、/etc/exportfs に次のように記述して、nfs で自分自身と共有します。
/fusefs localhost(fsid=0)
これで次の操作を実行できます:
mount -t nfs -o fsc localhost:/fusefs /nfs systemctl start cachefilesd
/nfs は /fusefs へのキャッシュされたアクセスを提供します。
私は sshfs をバック FS としてこのアプローチを使用していますが、うまく動作します。
(残念ながら、これによってファイル コンテンツへのアクセスが高速化されるだけで、ファイル メタデータはキャッシュされないためstat
、open
依然として低速です)。
答え3
これは無知な回答です。テストするためのAmazonクラウドディレクトリにアクセスできないからです。しかし、"どうやってするの"精神: セットアップNFS を提供する Amazon クラウド、 それからNFSサーバーにリモートログインするには、cachefilesd
。
「言うのは簡単だが、実行するのは難しい…」