Sistemas de archivo de red
Los sistemas de archivo de red permiten acceder a ficheros remotos como si estuviesen en un medio de almacenamiento local. Gracias al sistema de archivos de red un ordenador cliente puede acceder a sistemas de archivos que exporta el servidor, con independencia del sistema de archivos de disco que se utiliza en el servidor.
Algunos sistemas de archivos de red son:
Network fs | comentario |
---|---|
SMB/CIFS |
Es el sistema nativo de Windows. Permite navegar por los recursos ofrecidos y está orientado al funcionamiento en LAN |
NFS |
Es el sistema nativo de Unix. No está pensado para navegar por los recursos y funciona en WAN |
Coda |
El cliente guarda de forma local los ficheros de trabajo, para asegurar la disponibilidad cuando no existe conexión de red |
Intermezzo | Inspirado en Coda pero diseñado de nuevo |
Lustre |
Nuevo desarrollo destinado a supercomputación. Para grandes clusters o procesadores masivamente paralelos (MPP). |
NFS - Network File System
NFS permite que un servidor exporte un sistema de ficheros, y uno o varios clientes, lo monten para utilizarlo como un sistema de ficheros local. La comunicación entre el servidor y el cliente se realiza a través de la red, utilizando el protocolo NFS. El sistema de ficheros de disco que utiliza físicamente el servidor es irrelevante para el cliente.
NFS es enrutable, de manera que el servidor y el cliente pueden estar en diferentes redes comunicadas por un conjunto de routers.
Configurando el servidor NFS
El servidor NFS está empaquetado para la mayoría de las distribuciones de GNU/Linux, por ejemplo, en Mandriva 2006 el servidor está incluido en el paquete nfs-utils-1.0.7-6mdk.i586.rpm
Una vez instalado, es posible arrancar el servicio NFS desde el shell
[root@localhost ~]# /etc/init.d/nfs start
Iniciando servicios NFS: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
[root@localhost ~]#
El fichero de configuración del servidor NFS es /etc/exports. En este fichero se incluirá una línea por cada recurso (directorio) a exportar. Cuando se exporta un directorio se debe indicar:
- Quien podrá montar dicho directorio remoto: Es posible indicar la dirección IP de un ordenador o una red, un nombre DNS o grupos de red NIS. Es posible utilizar los comodines '*' y '?' al utilizar nombres DNS. La página de manual de exports ofrece información detallada.
- Las opciones con las que se exporta (lectura/escritura, sólo lectura, etc...)
Un fichero /etc/exports de ejemplo puede contener:
# Exportamos la raíz en modo RW para master y trusty
/ master(rw) trusty(rw,no_root_squash)
# Es posible utilizar comodines en los nombres DNS pero no cuando se utilizan IPs
/projects proj*.local.domain(rw) pc??.dominio.com(ro)
/usr *.*.dominio.com(ro)
# También se puede especificar una sola máquina con tdoas sus opciones
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
# Cuando no se especifica ninguna máquina es para todas
/pub (ro,insecure,all_squash)
# También es posible especificar máquinas indicando su ip o red
/home/fred 192.168.0.1(ro) 192.168.10.0/24(ro) 192.168.11.0/255.255.255.0(ro)
Es muy importante que las opciones de exportado estén junto a la definición de la máquina, si las separa un espacio se supondrá que las opciones son para todo el mundo. Cuando se realicen cambios al fichero de configuración /etc/exports, se deberá reiniciar el servidor o bien pedirle que vuelva a leere el fichero de configuración.
[root@localhost ~]# /etc/init.d/nfs reload
Opciones de exportado para los recursos NFS
Cuando en un servidor NFS se exporta un directorio es necesario indicar las opciones con las que será exportado. Es muy importante prestar atención a estas opciones, pues de ellas dependerá el acceso que los clientes podrán realizar al sistema de ficheros compartido en red.
Opción | Función |
---|---|
ro |
Exporta en modo de sólo lectura. Este es el modo por defecto. |
rw |
Exporta en modo de lectura/escritura. |
sync |
El servidor NFS no responde al cliente hasta que los cambios no se han realizado físicamente en disco. Este es el modo por defecto. |
async |
El servidor NFS responde al cliente antes de que los cambios se hayan realizado físicamente en disco. Se consigue un mejor rendimiento a costa de la integridad de los datos en el caso de que se reinicie el servidor. |
secure | El servidor sólo atenderá a clientes que hagan peticiones desde puertos menores que 1024. Este es el modo por defecto. |
insecure | Atiende a clientes aunque la petición no se realice desde un puerto inferior a 1024. |
root_squash | El servidor mapea las solicitudes del uid/gid 0 del cliente al usuario/grupo anónimo del servidor. Opción por defecto. |
no_root_squash | Desactiva el mapeo del uid/gid 0 al usuario/grupo anónimo. |
all_squash | El servidor mapea las solicitudes de cualquier uid/gid del cliente al usuario/grupo anónimo del servidor. |
no_all_squash |
Se desactiva el mapeo a usuario/grupo anónimo del servidor las peticiones de cualquier uid/gid del cliente. Opción por defecto. |
anonuid |
Permite especificar el UID del usuario anónimo en el servidor. |
anongid |
Permite especificar el GID del usuario anónimo en el servidor. |
Montando sistemas de ficheros remotos
Para montar un sistema de ficheros remóto sólo necesitamos tener instalado un cliente NFS. En el caso de Mandriva 2006, el cliente está en el paquete: nfs-utils-clients-1.0.7-6mdk
Para montar un sistema de archivos NFS se utiliza la siguiente sintáxis:
mount nombredelservidor:/directorio/exportado /punto/de/montaje
Al montar un sistema de ficheros, es posible indicar diferentes opciones (la página de manual de mount tiene información detallada)
Opción | Función |
---|---|
ro | Montar en modo de sólo lectura. |
rw | Montar en modo de lectura/escritura. |
bg | Montar en segundo plano. Si no es posible montar inmediatemente el recurso remoto, se sigue intentando en segundo plano. |
soft/hard |
Controlan el comportamiento de los procesos que intentan utilizar un servidor NFS que no responde. Si el sistema de archivos se montó con la opción 'soft' el proceso que intenta utilizar un servidor que no responde recibirá un error. La mayoría de los programas no están preparados para tratar estos errores. Si la opción de montado es 'hard' el proceso quedará bloqueado mientras el servidor no responda, cuando el servidor responda continuará su ejecución. Se recomienda utilizar las opciones 'hard' y 'intr' en todos los sistemas de ficheros NFS. |
intr | Montaje que se puede interrumpir. Los procesos pendientes de entrada/salida se pueden interrumpir y cancelar la operación. |
wsize/rsize | Número de bytes que se escriben/leen de la red en una sóla operación. Afecta al rendimiento. |
Obteniendo información sobre el servicio NFS
El programa nfsstat proporciona estadísticas de uso del servidor NFS
[root@valinor ~]# nfsstat
Server rpc stats:
calls badcalls badauth badclnt xdrcall
51 0 0 0 0
Server nfs v3:
null getattr setattr lookup access readlink
16 37% 15 34% 0 0% 0 0% 0 0% 0 0%
read write create mkdir symlink mknod
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
remove rmdir rename link readdir readdirplus
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
fsstat fsinfo pathconf commit
0 0% 12 27% 0 0% 0 0%
[root@valinor ~]#
También es posible consultar la lista de directorios exportados por un servidor mediante el comando showmount.
Sobre las diferentes versiones de NFS y sus transportes
Existen diferentes versiones del protocolo NFS:
- NFSv1: Nunca se ha utilizado en producción, fué un desarrollo interno de Sun
- NFSv2: Se ha utilizado extensamente. Es un sistema de ficheros de 32 bits y por tanto el tamaño máximo de un fichero son 4GiB. Es potencialmente peligroso utilizarlo en el modo asíncrono.
- NFSv3: Es la versión más extendida y es la versión utilizada por defecto en las distribuciones de GNU/Linux para montar un recurso remoto con NFS. Elimina el límite de los 4GiB por fichero y mejora la estabilidad en
- NFSv4: Es una nueva reescritura del protocolo realizada por el IETF. Agrega nuevas funciones y ya no utiliza los servicios portmap ni rpc. Sólo puede utilizar TCP como transporte.
Las distribuciones actuales de GNU/Linux pueden actuar como servidor y cliente de NFS v2, v3 y v4. Aunque normalmente, a la hora de montar un recurso remoto, por defecto intentan utilizar la v3 del protocolo.
Las versiones v2 y v3 están basadas en un protocolo de comunicaciones sin estado. De manera que el servidor se puede reiniciar mientras atienda a los clientes sin que se pierda la conexión. La versión v4 del protocolo utiliza estados y aporta la lógica necesaria para gestionar las desconexiones de red.
Las versiones v2 y v3 pueden utilizar como protocolo de transporte TCP o UDP siendo TCP la opción recomendada de forma general, la versión v4 debe funcionar sobre TCP. UDP es un protocolo más ligero que TCP, pero no está orientado a conexión ni ofrece reordenamiento de la secuencia de datagramas ni es confiable. Tradicionalmente los servidores NFS han utilizado UDP como protocolo de transporte por defecto pero se ha demostrado que en muchas ocasiones ofrece un mal rendimiento y en redes rápidas puede suponer riesgos para la integridad de los datos que se transportan. El transporte recomendado para NFS es TCP.
SMB/CIFS - Server Message Block/Common Internet File System
El protocolo SMB fue diseñado originalmente por IBM, pero actualmente la versión más extendida del mismo es la implementada por Microsoft en sus sistemas operativos, hoy en día denominada CIFS. En Unix existe el servicio Samba que implementa un servidor y cliente para SMB/CIFS.
Entre las características del protocolo encontramos:
- Permite compartir sistemas de archivos e impresoras
- Tradicionalmente ha utilizado NetBIOS/NetBEUI aunque las versiones nuevas pueden funcionar encima de TCP/IP. Cuando no se utiliza TCP/IP no existe posibilidad de enrutado, de manera que cliente y servidor deben estar en la misma red
- El servicio permite explorar la red para descubrir máquinas y recursos compartidos
- Tradicionalmente se ha utilizado una resolución de nombres WINS, aunque en las versiones nuevas (a partir de Windows 2000) se ha relegado en favor de DNS y Active Directory
Componentes:
Componente | Función |
---|---|
smbd | Demonio que sirve los recursos en red, también se encarga de autentificar a los usuarios. |
nmbd | Demonio que implementa la resolución de nombres en el entorno de red de Microsoft. Permite navegar por los recursos de red. |
/etc/smb.conf | Fichero de configuración principal. Declara los recuros que se exportan en red. |
/etc/smbpasswd |
Fichero de claves para los usuarios SMB |
smbclient | Cliente para recuros SMB, permite obtener listados de crecursos compartidos y transferir ficheros con una funcionalidad similar a la de un cliente FTP |
smbmount | Permite montar recursos compartidos con SMB como si fuesen sistemas de archivos locales. También se puede utilizar: mount -t smb ... |
smbpasswd |
Permite cambiar la contraseña de red SMB para un usuario |
smbstatus |
Permite obtener información sobre el uso de recursos SMB |
testparm |
Comprueba el fichero de configuración |
SWAT |
Interfaz web para la administración del servicio Samba, por defecto atiende conexiones en el puerto 901 |
Configuración del servidor Samba
Samba es un software complejo que realiza diferentes funciones, sus ficheros de configuración se encuentran en /etc/samba y de todos ellos smb.conf es el principal, el que controla qué recursos se están exportando a la red.
El fichero /etc/samba/smb.conf está dividido en diferentes secciones. Normalmente cada sección se refiere a un recurso compartido en red, directorio o impresora, pero existen tres secciones especiales [global], [homes] y [printers], que se refieren respectivamente a las características globales del servidor, la forma en la que se exportan los directorios personales de los usuarios y la forma en la que se exportan en red las impresoras del servidor. La página de manual 5 smb.conf es una referencia para la configuración del servicio.
Otras opciones: Coda / Intermezzo / Lustre
Los sistemas de ficheros en red Coda e InterMezzo intentan dar soporte a dispositivos móviles que se conectan/desconectan con frecuencia de la red. Para permitir el funcionamiento de los clientes durante las desconexiones de red, estos guardan una copia local (caché) del sistema de archivos remoto. Cuando se restablece la conexión de red, los clientes envian los cambios locales al servidor. En este proceso pueden surgir conflictos (cuando dos o más clientes han hecho cambios locales sobre los mismos datos e intentan actualizar el servidor).
El sistema de archivos en red Lustre es el nuevo proyecto en el que participan los desarrolladores de InterMezzo, está destinado a la supercomputación y tiene por objetivo conseguir un gran rendimiento al tiempo que resuelve las necesidades de almacenamieno de grandes clusters o máquinas masivamente paralelas.