Hola de nuevo a todos. Hoy vamos a echar un vistazo a NFS…foto de Eloy Mier Pérez

Esta guia tratara de explicar como configurar un cliente NFS y un servidor NFS en Ubuntu 10.04. NFS son las siglas de Sistema de Fichero de Red (Network File System); por medio de NFS, un cliente puede acceder (L/E) a un lugar remoto compartido por un servidor NFS como si el cliente estuviese usando el disco en local.

1. Notas preliminares

Para la guia he realizado la instalación de dos máquinas virtuales con Ubuntu 10.04. Una de ellas hará las labores de server y la otra las de cliente.

Instalacion de maquinas virtuales

Servidor NFS: 192.168.2.103 con nombre Ubuntu1004NFSserver

Cliente NFS: 192.168.2.104 con nombre Ubuntu1004

Aquí podemos ver las dos máquinas virtuales corriendo en el servidor VmWare que tengo montado:

Para la configuración de los servicios voy a usar acceso por ssh, asi que lo primero que voy a hacer es instalar el server de ssh en cada una de las dos máquinas. Para ellos ejecutamos el siguiente comando tanto en el cliente como en el servidor:

 

sudo aptitude install openssh-server

Debido a que vamos a necesitar ejecutar todos los pasos de la guia con privilegios de root, podemos o bien usar sudo delante de todos los comandos existentes en esta guia o bien pasamos a ser root en la sesion mediante:

sudo su


2. Instalando NFS

En el servidor para la instalacion ejecutamos

aptitude install nfs-kernel-server nfs-common portmap

Aquí podeis apreciar los resultados de la instalación:

En el cliente podemos instalar NFS de la siguiente forma:

aptitude install nfs-common portmap

 

Lo mismo que en el caso del servidor, aquí podemos ver los resultados de la instalación:

3. Exportando directorios en el servidor

Del lado del servidor, me gustaría hacer que los directorios /home y /var/nfs sean accesibles al cliente; por consiguiente debemos «exportar» esos directorios en el servidor.

Cuando un cliente accede a un recurso compartido en NFS, normalmente lo hace como el usuario «nobody». Normalmente el directorio /home no tiene como propietario ese usuario (y no recomiendo que lo tenga), y debido a que queremos que el acceso a /home sea de L/E, indicaremos en NFS que el acceso a esa ruta debe ser realizado por root (si el recurso compartido /home fuera solo de lectura, esto no seria necesario). El directorio /var/nfs no existe, así que vamos a empezar por crearlo y asociarle un propietario acorde a lo ya indicado (nobody:nogroup) de la siguiente forma:

mkdir /var/nfs
chown nobody:nogroup /var/nfs


Aquí dejo la captura de cómo queda ese directorio ya creado y con los propietarios indicados:

Ahora comenzamos con la configuración propiamente dicha. Vamos a modificar el fichero /etc/exports que es donde «exportamos» nuestros recursos compartidos mediante NFS. Vamos a indicar /home y /var/nfs como recursos compartidos NFS y vamos a decirle a NFS que el acceso a /home sea como root (para aprender mas acerca de /etc/exports, su formato y opciones disponibles, podéis echar un vistazo en man 5 exports)

 

vi /etc/exports

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home 192.168.2.104(rw,sync,no_root_squash,no_subtree_check)
/var/nfs 192.168.2.104(rw,sync,no_subtree_check)


(La opción no_root_squash indica que /home deberá ser accedido mediante root). Cada vez que modifiquemos el fichero de configuración /etc/exports, debemos ejecutar exportfs -a para que los cambios tengan efecto.

Aquí tenéis las capturas de pantalla del proceso anteriormente descrito:

El fichero modificado /etc/exports

La ejecución del comando exportfs:

4. Montando los recursos compartidos NFS en el cliente

Bien, lo primero que debemos hacer en el cliente es crear los directorios donde vamos a querer montar los compartidos NFS, por ejemplo:

 

mkdir -p /mnt/nfs/home
mkdir -p /mnt/nfs/var/nfs


Esta es la estructura de directorios creada:

Ahora del lado del cliente, podemos realizar el montaje de la siguiente forma:

 

mount 192.168.2.103:/home /mnt/nfs/home
mount 192.168.2.103:/var/nfs /mnt/nfs/var/nfs


Ahora ya debieramos ser capaces de ver los dos recursos NFS en la salida del comando df -h

root@Ubuntu1004:/mnt# df -h
S.ficheros Tamaño Usado Disp Uso% Montado en
/dev/sda1 12G 2,9G 7,9G 27% /
none 496M 188K 496M 1% /dev
none 500M 80K 500M 1% /dev/shm
none 500M 108K 500M 1% /var/run
none 500M 0 500M 0% /var/lock
none 500M 0 500M 0% /lib/init/rw
192.168.2.103:/home 12G 2,9G 7,9G 27% /mnt/nfs/home
192.168.2.103:/var/nfs 12G 2,9G 7,9G 27% /mnt/nfs/var/nfs
root@Ubuntu1004:/mnt#

y el comando mount retorna

root@Ubuntu1004:/mnt# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
192.168.2.103:/home on /mnt/nfs/home type nfs (rw,addr=192.168.2.103)
192.168.2.103:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,addr=192.168.2.103)

 

5. Las pruebas

Del lado del cliente, ahora podemos probar a crear ficheros de test en las ubicaciones compartidas:

 

touch /mnt/nfs/home/test.txt
touch /mnt/nfs/var/nfs/test.txt

 

Ahora podemos irnos al servidor para verificar que vemos los dos ficheros de prueba creados:

 

ls -l /home/

eloy@Ubuntu1004NFSserver:/$ ls -l home
total 4
drwxr-xr-x 24 eloy eloy 4096 2010-10-17 02:51 eloy
-rw-r--r-- 1 root root 0 2010-10-17 03:21 test.txt

ls -l /var/nfs

eloy@Ubuntu1004NFSserver:/$ ls -l /var/nfs/
total 0
-rw-r--r-- 1 nobody nogroup 0 2010-10-17 03:21 test.txt

(Nótese los diferentes propietarios de los ficheros de test creados: el recurso NFS /home es accedido por el usuario root, por lo tanto el propietario de /home/test.txt es root; el recurso compartido /var/nfs ha sido accedido por el usuario nobody, por lo tanto el fichero de test /var/nfs/test.txt es propiedad de nobody.)

6. Montando comparticiones NFS en el arranque

En lugar de montar los recursos compartidos NFS manualmente en el lado del cliente, podemos modificar el fichero /etc/fstab para que esos recursos se monten de forma automática cuando arranca el propio cliente.

Para ello simplemente debemos abrir el fichero /etc/fstab y añadir las siguientes lineas:

 

vi /etc/fstab
[...]
192.168.2.103:/home /mnt/nfs/home nfs rw,sync,hard,intr 0 0
192.168.2.103:/var/nfs /mnt/nfs/var/nfs nfs rw,sync,hard,intr 0 0


En lugar de las opciones rw,sync,hard,intr podrías usar otras que se adapten a tus necesidades. Para investigar un poco sobre las opciones disponibles puedes echar un vistazo a la página del manual, accesible mediante man nfs

Para verificar si esta funcionando correctamente el fichero /etc/fstab, simplemente reinicia el cliente:

reboot

Después del reinicio, debiéramos ver los dos recursos compartidos NFS como salida en el comando df -h

 

eloy@Ubuntu1004:~$ df -h
S.ficheros Tamaño Usado Disp Uso% Montado en
/dev/sda1 12G 2,9G 7,9G 27% /
none 496M 188K 496M 1% /dev
none 500M 164K 500M 1% /dev/shm
none 500M 104K 500M 1% /var/run
none 500M 0 500M 0% /var/lock
none 500M 0 500M 0% /lib/init/rw
none 12G 2,9G 7,9G 27% /var/lib/ureadahead/debugfs
192.168.2.103:/home 12G 2,9G 7,9G 27% /mnt/nfs/home
192.168.2.103:/var/nfs
12G 2,9G 7,9G 27% /mnt/nfs/var/nfs
eloy@Ubuntu1004:~$

 

y mount

 

eloy@Ubuntu1004:~$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
192.168.2.103:/home on /mnt/nfs/home type nfs (rw,sync,hard,intr,addr=192.168.2.103)
192.168.2.103:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,sync,hard,intr,addr=192.168.2.103)

 

7. Enlaces de interes

* Linux NFS: http://nfs.sourceforge.net/
* Ubuntu: http://www.ubuntu.com/

Pues hoy ya es tarde, así que me voy a la cama. Espero que disfrutéis del articulo tanto o mas como yo escribiéndolo. Un abrazo a todos y buenas noches.

Comments (2)

michaelpotter

Jun 02, 2011 at 8:11 AM

Mil gracias por el tutorial, la verdad es el más completo que he encontrado hasta ahora y me funcionó a la perfección.

Marvell

Jun 02, 2011 at 8:26 AM

De nada hombre, me alegro que el tiempo que invierto en mostrar a los demás cómo solucionar los mismos problemas que yo encuentro, sea aprovechable por mas personas como tu.

Gracias por el agradecimiento.

You must be logged in to post a comment.