Chapitre 10. Utilisation du cache avec NFS
NFS n'utilisera pas le cache à moins d'en avoir reçu l'instruction explicite. Ce paragraphe montre comment configurer un montage NFS en utilisant FS-Cache.
Conditions préalables
Le paquet cachefilesd est installé et fonctionne. Pour vous en assurer, utilisez la commande suivante :
# systemctl start cachefilesd # systemctl status cachefilesd
Le statut doit être active (running).
Montez les partages NFS avec l'option suivante :
# mount nfs-share:/ /mount/point -o fsc
Tous les accès aux fichiers sous
/mount/point
passent par le cache, sauf si le fichier est ouvert pour des entrées/sorties ou des écritures directes. Pour plus d'informations, voir Limitations du cache avec NFS.
NFS indexe le contenu du cache à l'aide de l'identifiant du fichier NFS, not le nom du fichier, ce qui signifie que les fichiers liés en dur partagent correctement le cache.
Les versions 3, 4.0, 4.1 et 4.2 de NFS prennent en charge la mise en cache. Cependant, chaque version utilise des branches différentes pour la mise en cache.
10.1. Configuration du partage du cache NFS
Le partage du cache NFS peut poser plusieurs problèmes. Le cache étant persistant, les blocs de données qu'il contient sont indexés sur une séquence de quatre clés :
- Niveau 1 : Détails du serveur
- Niveau 2 : Quelques options de montage ; type de sécurité ; FSID ; identifiant unique
- Niveau 3 : Poignée de dossier
- Niveau 4 : Numéro de page dans le fichier
Pour éviter les problèmes de gestion de la cohérence entre les superblocs, tous les superblocs NFS qui doivent mettre les données en cache ont des clés de niveau 2 uniques. Normalement, deux montages NFS avec le même volume source et les mêmes options partagent un superbloc, et donc la mise en cache, même s'ils montent des répertoires différents à l'intérieur de ce volume.
Voici un exemple de configuration du partage de cache avec différentes options.
Procédure
Montez les partages NFS à l'aide des commandes suivantes :
mount home0:/disk0/fred /home/fred -o fsc mount home0:/disk0/jim /home/jim -o fsc
Ici,
/home/fred
et/home/jim
partagent probablement le superbloc puisqu'ils ont les mêmes options, surtout s'ils proviennent du même volume/partition sur le serveur NFS (home0
).Pour ne pas partager le superbloc, utilisez la commande
mount
avec les options suivantes :mount home0:/disk0/fred /home/fred -o fsc,rsize=8192 mount home0:/disk0/jim /home/jim -o fsc,rsize=65536
Dans ce cas,
/home/fred
et/home/jim
ne partageront pas le superbloc car ils ont des paramètres d'accès au réseau différents, qui font partie de la clé de niveau 2.Pour mettre en cache le contenu des deux sous-arbres (
/home/fred1
et/home/fred2
) twice qui ne partagent pas le superbloc, utilisez la commande suivante :mount home0:/disk0/fred /home/fred1 -o fsc,rsize=8192 mount home0:/disk0/fred /home/fred2 -o fsc,rsize=65536
Une autre façon d'éviter le partage de superblocs est de le supprimer explicitement avec le paramètre
nosharecache
. Reprenons le même exemple :mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc
Toutefois, dans ce cas, un seul des superblocs est autorisé à utiliser la mémoire cache, car rien ne permet de distinguer les clés de niveau 2 de
home0:/disk0/fred
ethome0:/disk0/jim
.Pour spécifier l'adressage au superbloc, ajoutez un unique identifier sur au moins un des montages, c'est-à-dire
fsc=unique-identifier
:mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
Ici, l'identifiant unique
jim
est ajouté à la clé de niveau 2 utilisée dans le cache pour/home/jim
.
L'utilisateur ne peut pas partager des caches entre des superblocs qui ont des communications ou des paramètres de protocole différents. Par exemple, il n'est pas possible de partager entre NFSv4.0 et NFSv3 ou entre NFSv4.1 et NFSv4.2 parce qu'ils imposent des superblocs différents. La définition de paramètres tels que la taille de lecture (rsize) empêche également le partage du cache car, là encore, elle impose un superbloc différent.