El objetivo de configurar un cliente de NFS en el WRT es poder ampliar las capacidades tanto de almacenamiento como de cantidad y complejidad máxima de ejecutar programas. Debido a que el WRT posee interfaces 100baseT1) y a que el protocolo NFS está diseñado para ser extremadamente eficiente, es que se pueden alcanzar tasas de transferencia más que interesantes y muy superiores a las que se alcanzarían con el Mod de la SD.
Sin embargo el mod de la SD tiene varias ventajas al método que se describe en este documento, las cuales deberían ser consideradas:
En este manual se asume que el WRT está corriendo OpenWRT kamikaze, pero otras distribuciones de linux basadas en OpenWRT deberían presentar a lo sumo diferencias muy mínimas.
NFS:
Es un protocolo para poder acceder a un sistema de archivos remoto por medio de la red. Es muy eficiente y tanto cliente como servidor son extremadamente pequeños.
Mod de la SD:
Es una modificación que se le realizan a los WRT con el fin de poder enchufarle una memoria SD al equipo y poder usarlo como si fuera un disco duro.
montar:
Se le llama montar al procedimiento que implica hacer visible un sistema de archivos. Los sistemas de archivos están en red, o en dispositivos de bloques como disquetes, cederrones, discos duros, etc. Dicho en otras palabras es lo que permite enganchar el disquete en una carpeta y poder mediante esa carpeta ver lo que hay dentro del disquete.
Para instalar el servidor de NFS es conveniente leer:
http://nfs.sourceforge.net/nfs-howto/
Y dado que es imprescindible tener un servidor de NFS para poder tener clientes de NFS, es que no tiene sentido alguno proceder con la guía si no se tiene un servidor en funcionamiento.
Para estar seguros de que el servidor funciona, es muy conveniente recordar los siguientes puntos y hacer una segunda verificación:
exportfs -ar.rpcinfo -p tiene que mencionar por lo menos una línea con nfs.He aquí la parte interesante del manual.
A modo de ejemplo se asumirá que la IP del servidor NFS es la 10.71.0.1, y que la IP del cliente de NFS, o sea la del AP, es la 10.71.0.137.
Para que el WRT pueda ser un cliente de NFS hay que montar en algún directorio del WRT la carpeta exportada en el servidor. Para eso se precisan los siguientes paquetes:
kmod-fs-nfs: Módulo del kernel para soporte NFS.swap-utils (opcional): Herramientas para crear y habilitar swap.losetup y kmod-loop (opcionales): Para configurar la emulación de disp. de bloques.
Nota: swap-utils, losetup y kmod-loop son los tes paquetes que nos dan las herramientas necesarias e imprescindibles para poder tener memoria swap a través de la red, si no se desea tener swap por sobre la red entonces es preferible no instalar los paquetes.
Para instalar, por ejemplo, el paquete kmod-fs-nfs hay que ejecutar:
ipkg update ipkg install kmod-fs-nfs
Ya a partir de este momento es que se podría acceder al directorio exportado usando el comando:
mount 10.71.0.1:/carpeta/origen /destino -t nfs -o nolock
10.71.0.1:
Es la IP del servidor NFS.
/carpeta/origen:
Es el nombre del directorio tal cual está exportado en el servidor (ver /etc/exports).
/destino:
Este es el directorio en el WRT sobre el cual se montará la carpeta exportada. Es extremadamente conveniente que se elija adecuadamente el nombre del directorio de destino, siendo /mnt/algo una sabia decisión.
Si la carpeta de destino no existe, entonces antes de correr mount, hay que crearla con mkdir:
mkdir /destino
nfs:
nfs no es más que el tipo del sistema de archivos.
nolock:
nolock es la opción que nos permite montar el directorio exportado sin la necesidad de tener complejo software adicional en el WRT. Básicamente la funcionalidad que se pierde es la de poder bloquear archivos. Por tanto es conveniente recordar esto y no realizar tareas sobre el directorio montado que impliquen bloqueos.
Listo, ya podemos pensar en:
Como es deseable que se monte automáticamente al prender el Access Point, es que procedemos con las siguientes instrucciones.
En un cliente normal de NFS, lo que generalmente se haría para que al prender la computadora se montase automáticamente el directorio exportado, sería agregar una línea en el archivo /etc/fstab:
# <File system> <Mount point> <Type> <Options> <dump> <pass> # Note: use option = defaults for nfs if no options 10.71.0.1:/carpeta/origen /destino nfs nolock 0 0
Pero debido a que el archivo /etc/fstab no se encuentra presente por omisión en el WRT, es que va a ser necesario crearlo desde cero con estas líneas recién mencionadas.
El siguiente paso es crear el siguiente script:
/etc/init.d/nfsmount:
#!/bin/sh /etc/rc.common # copyright: Francisco Castro on Friday 23, November. START=42 start(){ grep -v '^ *#' /etc/fstab | { while read filesystem mountpoint type options dump pass do [ "$type" = "nfs" ] || continue if [ "$options" = "defaults" ] then mount "$filesystem" "$mountpoint" -t nfs else mount "$filesystem" "$mountpoint" -t nfs -o "$options" fi done } }
y darle permisos de ejecución:
chmod +x /etc/init.d/nfsmount
Y finalmente para que se ejecute automáticamente al inicio hay que crear un enlaces simbólico:
ln -s /etc/init.d/nfsmount /etc/rc.d/S42nfsmount
El siguiente paso es configurar la memoria swap, para lo cual los cambios no se dejarán permanentes, pero si así se deseara se tendría que seguir un procedimiento similar al mencionado en el punto anterior.
Con los paquetes swap-utils, losetup y kmod-loop instalados, hay que crear sobre el sistema de archivos compartido por NFS un archivo del tamaño que se desee para la swap. Una forma de crearlo es desde el servido ejecutar:
dd if=/dev/zero of=/carpeta/origen/swap count=BLOQUES
donde /carpeta/origen era el nombre del directorio tal cual estaba exportado, y BLOQUES es el número de bloques de 512 bytes que se desea tenga el archivo. Por ejemplo con count=2048 se crea un archivo de un megabyte, y con count=204800 se crea de 100 megabytes.
Una vez creado el archivo, desde el WRT hay que formatear la swap usando:
mkswap /destino/swap
y activarla usando:
LF=`losetup -f` losetup "$LF" /destino/swap && swapon "$LF"
Finalmente para comprobar que la swap está marchando hay que correr el comando free: y ver una salida similar a esta:
total used free shared buffers Mem: 14304 11052 3252 0 996 Swap: 102392 0 102392 Total: 116696 11052 105644
Si no hubiera tenido swap, la salida hubiera sido:
total used free shared buffers Mem: 14304 11052 3352 0 996 Swap: 0 0 0 Total: 14304 11052 3352
Notar las diferencias.