7.4. Usando o cache com NFS
A NFS não utilizará o cache a menos que seja explicitamente instruída. Este parágrafo mostra como configurar uma montagem NFS usando o FS-Cache.
Pré-requisitos
O cachefilesd pacote está instalado e funcionando. Para garantir a sua execução, use o seguinte comando:
# systemctl start cachefilesd # systemctl status cachefilesd
O status deve ser active (running).
Monte as ações da NFS com a seguinte opção:
# mount nfs-share:/ /mount/point -o fsc
Todo acesso a arquivos em
/mount/point
passará através do cache, a menos que o arquivo seja aberto para E/S direta ou escrita. Para maiores informações, veja Seção 7.4.2, “Limitações de cache com NFS”. NFS indexa o conteúdo do cache usando o handle do arquivo NFS, not o nome do arquivo, o que significa que os arquivos com link rígido compartilham o cache corretamente.
As versões NFS 3, 4.0, 4.1 e 4.2 suportam o caching. Entretanto, cada versão utiliza ramos diferentes para o caching.
7.4.1. Configuração do compartilhamento de cache NFS
Há vários problemas potenciais relacionados ao compartilhamento de cache NFS. Como o cache é persistente, os blocos de dados no cache são indexados em uma seqüência de quatro chaves:
- Nível 1: Detalhes do servidor
- Nível 2: Algumas opções de montagem; tipo de segurança; FSID; unificadores
- Nível 3: File Handle
- Nível 4: Número de página no arquivo
Para evitar problemas de gerenciamento de coerência entre superblocos, todos os superblocos NFS que requerem o cache dos dados têm chaves únicas de nível 2. Normalmente, dois NFS montados com o mesmo volume de fonte e opções compartilham um superbloco, e assim compartilham o cache, mesmo que eles montem diretórios diferentes dentro desse volume.
Este é um exemplo de como configurar o compartilhamento de cache com diferentes opções.
Procedimento
Monte NFS compartilha com os seguintes comandos:
mount home0:/disk0/fred /home/fred -o fsc mount home0:/disk0/jim /home/jim -o fsc
Aqui,
/home/fred
e/home/jim
provavelmente compartilham o superbloco, pois têm as mesmas opções, especialmente se vierem do mesmo volume/partição no servidor NFS (home0
).Para não compartilhar o superbloco, use o comando
mount
com as seguintes opções:mount home0:/disk0/fred /home/fred -o fsc,rsize=8192 mount home0:/disk0/jim /home/jim -o fsc,rsize=65536
Neste caso,
/home/fred
e/home/jim
não compartilharão o superbloco, pois têm parâmetros diferentes de acesso à rede, que fazem parte da chave do Nível 2.Para armazenar o conteúdo das duas subárvores (
/home/fred1
e/home/fred2
) twice com o não compartilhamento do superbloco, use o seguinte comando:mount home0:/disk0/fred /home/fred1 -o fsc,rsize=8192 mount home0:/disk0/fred /home/fred2 -o fsc,rsize=65536
Outra maneira de evitar o compartilhamento de superblocos é suprimi-lo explicitamente com o parâmetro
nosharecache
. Usando o mesmo exemplo:mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc
Entretanto, neste caso, apenas um dos superblocos é permitido usar o cache, já que não há nada que distinga as chaves de nível 2 de
home0:/disk0/fred
ehome0:/disk0/jim
.Para especificar o endereçamento ao superbloco, adicionar um endereço unique identifier em pelo menos uma das montagens, ou seja
fsc=unique-identifier
:mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
Aqui, o identificador único
jim
é adicionado à chave de nível 2 usada no cache para/home/jim
.
O usuário não pode compartilhar caches entre superblocos que têm comunicações ou parâmetros de protocolo diferentes. Por exemplo, não é possível compartilhar entre NFSv4.0 e NFSv3 ou entre NFSv4.1 e NFSv4.2 porque eles forçam superblocos diferentes. Também a definição de parâmetros, como o tamanho de leitura (rsize), impede o compartilhamento do cache porque, novamente, força um superbloqueio diferente.