7.4. Uso de la caché con NFS
NFS no utilizará la caché a menos que se le indique explícitamente. Este párrafo muestra cómo configurar un montaje NFS utilizando FS-Cache.
Requisitos previos
El paquete cachefilesd está instalado y funcionando. Para asegurarse de que se está ejecutando, utilice el siguiente comando:
# systemctl start cachefilesd # systemctl status cachefilesd
El estado debe ser active (running).
Monte los recursos compartidos NFS con la siguiente opción:
# mount nfs-share:/ /mount/point -o fsc
Todos los accesos a los archivos bajo
/mount/point
pasará a través de la caché, a menos que el archivo se abra para la E/S directa o la escritura. Para más información, consulte Sección 7.4.2, “Limitaciones de la caché con NFS”. NFS indexa el contenido de la caché utilizando el manejador del archivo NFS, not el nombre del archivo, lo que significa que los archivos con enlaces duros comparten la caché correctamente.
Las versiones 3, 4.0, 4.1 y 4.2 de NFS admiten el almacenamiento en caché. Sin embargo, cada versión utiliza diferentes ramas para el almacenamiento en caché.
7.4.1. Configuración de la compartición de la caché NFS
Hay varios problemas potenciales que tienen que ver con la compartición de la caché NFS. Dado que la caché es persistente, los bloques de datos en la caché están indexados en una secuencia de cuatro claves:
- Nivel 1: Detalles del servidor
- Nivel 2: Algunas opciones de montaje; tipo de seguridad; FSID; unificador
- Nivel 3: Manejador de archivos
- Nivel 4: Número de página en el expediente
Para evitar problemas de gestión de la coherencia entre los superbloques, todos los superbloques NFS que requieren almacenar datos en caché tienen claves de nivel 2 únicas. Normalmente, dos montajes NFS con el mismo volumen de origen y las mismas opciones comparten un superbloque, y por lo tanto comparten el almacenamiento en caché, incluso si montan diferentes directorios dentro de ese volumen.
Este es un ejemplo de cómo configurar la compartición de caché con diferentes opciones.
Procedimiento
Monte los recursos compartidos NFS con los siguientes comandos:
mount home0:/disk0/fred /home/fred -o fsc mount home0:/disk0/jim /home/jim -o fsc
Aquí,
/home/fred
y/home/jim
probablemente comparten el superbloque ya que tienen las mismas opciones, especialmente si provienen del mismo volumen/partición en el servidor NFS (home0
).Para no compartir el superbloque, utilice el comando
mount
con las siguientes opciones:mount home0:/disk0/fred /home/fred -o fsc,rsize=8192 mount home0:/disk0/jim /home/jim -o fsc,rsize=65536
En este caso,
/home/fred
y/home/jim
no compartirán el superbloque ya que tienen diferentes parámetros de acceso a la red, que forman parte de la clave de nivel 2.Para almacenar en caché el contenido de los dos subárboles (
/home/fred1
y/home/fred2
) twice sin compartir el superbloque, utilice el siguiente comando:mount home0:/disk0/fred /home/fred1 -o fsc,rsize=8192 mount home0:/disk0/fred /home/fred2 -o fsc,rsize=65536
Otra forma de evitar la compartición de superbloques es suprimirla explícitamente con el parámetro
nosharecache
. Utilizando el mismo ejemplo:mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc
Sin embargo, en este caso sólo se permite que uno de los superbloques utilice la caché, ya que no hay nada que distinga las claves de nivel 2 de
home0:/disk0/fred
yhome0:/disk0/jim
.Para especificar el direccionamiento al superbloque, añada un unique identifier en al menos uno de los montajes, es decir
fsc=unique-identifier
:mount home0:/disk0/fred /home/fred -o nosharecache,fsc mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
Aquí, el identificador único
jim
se añade a la clave de nivel 2 utilizada en la caché para/home/jim
.
El usuario no puede compartir cachés entre superbloques que tengan diferentes parámetros de comunicación o de protocolo. Por ejemplo, no es posible compartir entre NFSv4.0 y NFSv3 o entre NFSv4.1 y NFSv4.2 porque fuerzan superbloques diferentes. También el ajuste de parámetros, como el tamaño de lectura (rsize), impide compartir la caché porque, de nuevo, fuerza un superbloque diferente.