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 ..."