Tente usar o catfs , um sistema de arquivos em cache com fusível genérico no qual estou trabalhando atualmente.
Digamos que eu monte algum armazenamento em nuvem (no meu caso, o Amazon Cloud Drive) com um cliente FUSE em /mnt/cloud . Mas como ler e gravar arquivos diretamente em /mnt/cloud é lento porque precisa passar pela Internet, quero armazenar em cache os arquivos dos quais estou lendo e gravando no armazenamento em nuvem. Como posso estar escrevendo muitos dados por vez, o cache deve ficar no meu disco e não na RAM. Mas eu não quero replicar todo o armazenamento em nuvem no meu disco, porque meu disco pode ser muito pequeno.
Portanto, quero ter uma exibição armazenada em cache em /mnt/cloud montado em /mnt/cloud_cache , que usa outro caminho, digamos /var/cache/cloud como o local de armazenamento em cache.
Se eu agora leio /mnt/cloud_cache/file , quero que o seguinte aconteça:
Verifique se file está em cache em /var/cache/cloud/file .
file no cache está atualizando, buscando modtime e / ou soma de verificação de /mnt/cloud . Se estiver atualizado, envie o arquivo do cache, caso contrário, vá para 2. /mnt/cloud/file para /var/cache/cloud/file e exiba-o no cache. Quando escrevo para /mnt/cloud_cache/file , quero que isso aconteça:
/var/cache/cloud/file e registre em um diário que file precisa ser gravado novamente em /mnt/cloud
/var/cache/cloud/file seja feita e / ou faça as gravações anteriores em /mnt/cloud a serem concluídas /var/cache/cloud/file para /mnt/cloud
Eu tenho os seguintes requisitos e restrições:
/mnt/cloud_cache é transparente para o mecanismo de armazenamento em cache e funciona como qualquer outro sistema de arquivos montado /mnt/cloud ) não é muito importante, pois provavelmente terei apenas um cliente acessando /mnt/cloud por vez, mas seria bom ter. Passei algum tempo procurando soluções existentes, mas não encontrei nada satisfatório.
nfs ou afs sistemas de arquivos e eu não sei como fazer cache de outro sistema de arquivos FUSE ou qualquer diretório geral. Tente usar o catfs , um sistema de arquivos em cache com fusível genérico no qual estou trabalhando atualmente.
É possível usar o FS-Cache / CacheFS para armazenar em cache um sistema montado por fusível, adicionando uma indireta NFS entre: Se a sua montagem de fusível estiver em / fusefs, compartilhe-a em nfs escrevendo isto em / etc / exportfs:
/fusefs localhost(fsid=0)
Agora você pode fazer isso:
mount -t nfs -o fsc localhost:/fusefs /nfs
systemctl start cachefilesd
e / nfs oferecerão acesso em cache a / fusefs.
Eu estou usando essa abordagem com o sshfs como back FS, funciona muito bem.
(Infelizmente, isso só acelera o acesso ao conteúdo do arquivo; os metadados do arquivo não são armazenados em cache, então stat e open ainda são lentos).
Este é um tipo de resposta ignorante, já que não tenho acesso a um diretório de nuvem da Amazon com o qual testá-lo. Mas no "Como Fazer" spirit: setup Nuvem da Amazon para servir NFS , então faça login remotamente no servidor NFS usando cachefilesd .
"Mais fácil falar do que fazer ..."