Posts Tagged ‘mke2fs’

Formatear y montar un disco con NFS

Friday, June 20th, 2008

Voy a explicar a través de mi experiencia como podemos compartir un disco en una LAN,
no es nada novedos, pero la información se encuentra a veces dispersa
en internet. Además hay muchas cosas que no son explicadas, por eso
aquí trato de cubrir esos asuntos y hacer un resumen.

Nota: En el post utilizo indebidamente la palabra formatear. La uso en el sentido de crear un sistema de archivos (formateo lógico).
Decidí utilizarla, ya que es la que habitualmente se utiliza para
referirse a la creación de un sistema de archivos, pero en realidad
está definición no es exacta. Formatear es darle formato al disco de
forma física.

Una vez que conectamos el disco y arrancamos el sistema. Abrimos una consola y con superusuario hacemos.


# fdisk -l

Esto nos devolverá una lista de las particiones de cada disco. Con
esto obtendremos cual es el nombre del dispositivo. El disco en
cuestión es de 80 GB.


Disco /dev/sda: 80.0 GB, 80026361856 bytes
255 cabezas, 63 sectores/pista, 9729 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

El disco /dev/sda no contiene una tabla de particiones válida

Disco /dev/sdb: 300.0 GB, 300069052416 bytes
255 cabezas, 63 sectores/pista, 36481 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdb1   *           1       36293   291523491   83  Linux
/dev/sdb2           36294       36481     1510110    5  Extendida
/dev/sdb5           36294       36481     1510078+  82  Linux swap / Solaris

Disco /dev/sdc: 250.0 GB, 250059350016 bytes
255 cabezas, 63 sectores/pista, 30401 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdc1               1       30401   244196001   83  Linux

Una vez identificado el nombre del dispositivo (/dev/sda) procedemos a formatearlo. Utilizaremos el sistema de archivos ext3 y la herramienta mke2fs para el cometido.

Es importante notar que sólo podemos formatear si el dispositivo en cuestión se encuentra desmontado.


# mkfs.ext3 /dev/sda
mke2fs 1.40-WIP (14-Nov-2006)
¡/dev/sda es todo el dispositivo, no sólo una partición!
¿Se continúa de todas formas? (s,n) s
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
9781248 nodos i, 19537686 bloques
976884 bloques (5.00%) reservados para el súper usuario
Primer bloque de datos=0
Número máximo de bloques en el sistema de archivos=0
597 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
16384 nodos i por grupo
Respaldo del súper bloque guardado en los bloques:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Mientras se escribían las tablas de nodos i: terminado
Creando el fichero de transacciones (32768 bloques): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 37 meses o
180 dias, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.

Nota: podríamos haber utilizado para formatear a ext3 el siguiente comando: mke2fs -j <dispositivo>

Para poder utilizar el disco (con su sistema de archivo) debemos montarlo. Antes que nada y siguiendo el buen dicho: “Prevenir antes que curar”. Vamos a hacer una copia de resguardo de un archivo muy delicado, fstab. Para esto bastará un simple.


# cp /etc/fstab /etc/fstab.backup

Ahora sigamos; debemos crear un punto de montaje para poder colgar
el disco a nuestro sistema de archivos y luego debemos editar la fstab para indicar al sistema que cuelgue el disco al punto de montaje especificado.


$ mkdir /mnt/sda
$ chmod 777 /mnt/sda
# echo "/dev/sda /mnt/sda ext3 defaults 0 0" >> /etc/fstab
# mount -a

Al fstab, le estamos especificando:

  1. El dispositivo
  2. El punto de montaje
  3. El sistema de archivos
  4. Las opciones. La opción defaults equivale a rw, suid, dev, exec, auto, nouser y async
  5. Frecuencias de copias de seguridad, utilizado por dump
  6. Orden en el que se compararán los sistemas de archivos en el arranque; el 0 índica que no se comprueba

Fstab describe los diferentes sistemas de archivos del
equipo. Cada sistema se define en una linea. Una linea está formada por
campos separadados por espacio o tabulador.

Creamos el punto de montaje en /mnt/sda y agregamos al fstab las ordenes para montarlo y luego con la opción a de mount indicamos que se monten todos los sitemas de archivos especificados en fstab.

Ahora instalaremos el servidor NFS


aptitude install portmap nfs-kernel-server nfs-common

Detallemos un poco está instalación, para que no sea un vulgar copy & paste

nfs-kernel-server
Este es el servidor NFS, pero se ejecuta en el espacio del núcleo (kernel), obteniendo de este modo varias ventajas.
portmap
Es un demonio que mapea los números de RPC a puertos.
nfs-common
Utilidades de NFS tanto para el servidor como el cliente.

Nota: El kernel tiene que soportar NFS,
para eso debe estar compilado con esa característica. Podemos verificar
que el núcleo está compilado con soporte para NFS, haciendo cat /proc/filesystems. La salida nos muestra los sistemas de archivos que soporta el núcleo, dentro de estos debe figurar nodev nfs.

Una vez finalizada la instalación, tenemos que indicar al servidor
que carpetas queremos compartir que exporte a nuestros clientes. Para
esto debemos editar el archivo exports. Este archivo es un ACL, por esto tenemos que definir quién puede acceder al recurso y cómo


# echo "/mnt/sda 192.168.2.0/24(rw,sync,no_root_squash)” >> /etc/exports

Expliquemos un poco lo anterior. La sintaxis es sencilla tenemos. <recurso> <cliente>(<opciones>). El recurso es el disco montado, el cliente nuestra LAN y las opciones para esos clientes, donde especificamos:

rw
Read Write, no hay más que decir.
sync
Aquí el servidor sólo responderá a solicitudes una vez que los
cambios hayan sido confirmados en disco (todos los bloques de la cache
buffer se hayan escrito al disco). Ganamos que el servidor sea
consistente pero perdemos performance (se confirma una vez que se copia
el contenido de la cache al disco). Imaginar que sucedería en caso que
la máquina remota (o la red) se cae y la cache buffer no fue escrita en
disco…
no_root_squash
Con esto solucionamos un problema que tiene NFS con los UID y GID.
Al indicar esto, cada cliente que utilice la raíz compartida tendrá UID
y GID de la máquina servidora. Por ejemplo, el usuario del servidor es
david y el cliente pablo. Cuándo el cliente cree un archivo en la raíz
compartida, el uid será de david y no de pablo.

Ahora debemos hacer notar de estas modificaciones al servidor NFS, para eso lo alertamos con



# exportfs -a

Eso sería suficiente por el lado del servidor, nos pasamos al lado del cliente. El cliente debe tener instalado los paquetes portmap y nfs-common, en caso que no se encuentren instalados:


# aptitude install portmap nfs-common

Ahora tenemos que montar el disco que compartimos desde el servidor. Para esto debemos tener la
siguiente información:

  • La dirección IP del servidor NFS
  • La ruta del recurso compartido (el disco)

Antes de montarlo, crearemos un punto de montaje e indicaremos el recurso a montar, en este caso el disco sda del servidor, supondremos que la dirección IP del servidor es, 192.168.2.1.


$ mkdir disco_remoto
# echo "192.168.2.1:/mnt/sda /disco_remoto nfs rw,defaults 0 0" >> /etc/fstab
# mount -a

Ahora podemos hacer algunas pruebas para verificar que esté todo correcto. Del lado del servidor ejecutamos el comando exportfs, nos mostrará un listado de los sistemas de archivos exportados.


$ exportfs
/mnt/sda 192.168.2.0/24

La ip 192.168.2.159 es la dirección IP de la máquina cliente en la que acabamos de montar el disco.

Del lado del cliente podemos utilizar el comanto showmount con la opción e, la cual despliega la lista de sistemas de archivos exportados por un determinado servidor.


$ showmount -e 192.168.2.1
Export list for 192.168.2.1:
/mnt/sda 192.168.2.0/24

Nota: Durante toda la explicación se dio a entender implícitamente que la máquina servidor no se encontraba detrás de un firewall. En el caso que se encuentre detrás del firewall, deberemos abrir los siguientes puertos: 2049 TCP/UDP para nfsd y 111 TCP/UDP para portmap. Para el resto de los demonios hay que definir un rango de IP’s, para mayor información consultar aquí.

Bibliografía