
FUSEクライアントを使用していくつかのクラウドストレージ(私の場合はAmazon Cloud Drive)をインストールしたとします/mnt/cloud
。しかし、ファイルを直接読み書きするのは/mnt/cloud
インターネット経由で行う必要があるため遅いので、読み書きするファイルをクラウドストレージにキャッシュしたいと思います。おそらく一度に大量のデータを書き込むので、キャッシュはRAMではなくディスクに配置する必要があります。しかし、私のディスクが小さすぎるため、クラウドストレージ全体を自分のディスクにコピーしたくありません。
そのため、キャッシュの場所などの他のパスを使用する/mnt/cloud
Mountedでキャッシュビューを取得したいと思います。/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-キャッシュとCacheFS(https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt
nfs
)は、またはファイルシステムでのみ機能しているようですafs
。他のFUSEファイルシステムや通常のディレクトリをキャッシュする方法がわかりません。 - 隠れ家(https://bcache.evilpiepirate.org/)はブロックデバイスでのみ動作するようです。つまり、他のFUSEファイルシステムはキャッシュできません。
- GCSFUSE(https://github.com/GoogleCloudPlatform/gcsfuse)これは私が望むものだと思いますが、Google Cloud Storageと統合されています。機能するには、ハッキングしてGCSへのアクセスを指定されたマウントポイントのローカルファイルアクセスまたはAmazon Cloud Driveへのアクセスに変更する必要がありました。
答え1
試してみてください猫男、現在開発中の汎用ヒューズキャッシュファイルシステムです。
答え2
FS-Cache / CacheFSを使用すると、2つの間にNFS間接参照を追加して、ヒューズが取り付けられているシステムをキャッシュできます。ヒューズが/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クラウドディレクトリにアクセスできないため、これは無知の答えです。しかし、「どうすればいいですか?」精神:設定AmazonクラウドサービスNFS、その後Telnet を使用して NFS サーバーにログインcachefilesd
。
「言葉は簡単だし、実践は難しい…」