NEXX - Expandiendo el sistema de ficheros

Después del artículo NEXX, Instalación OpenWRT , es momento de dar un paso más y obtener un sistema polivalente completo.

NEXX dispone de interfaces Ethernet, Wi-Fi, pero carece de un gran almacenamiento. Tiene muy poca memoria Flash, unos 4MB u 8MB, siendo una limitación para poder realizar grandes proyectos. Pero también tiene un puerto USB, así que es posible “ampliar” la memoria mediante dispositivos USB, como discos o pendrives.

Este artículo muestra como “expandir” el sistema de ficheros raíz del NEXX, pudiendo utilizar el dispositivo como router y también como miniordenador o incluso unidad de almacenamiento de red.

NEXX y memorias USB

Descripción del procedimiento

Cuando hablamos de “expandir” el sistema de ficheros de nuestro NEXX, en realidad lo que vamos a hacer es copiar el sistema de ficheros que se encuentra en la memoria Flash en una memoria USB. Posteriormente haremos que al arrancar el cargador de Linux desde la Flash “monte” el sistema de ficheros de la unidad USB como raíz, disponiendo de esta forma de mucho más espacio.

El disponer de esta configuración aporta muchas ventajas, algunas de ellas son:

  • Como se ha indicado, dispondremos de mucho más espacio para poder instalar aplicaciones y para almacenar datos.
  • Dispondremos de un sistema en la memoria Flash del NEXX que no será modificado nunca. Por lo tanto, en caso de error de configuración, podemos arrancar sin el USB y dispondremos de nuestro NEXX como el primer día.
  • Podemos modificar el sistema del USB montándolo en otro Linux, pudiendo recuperar configuraciones erróneas.
  • Podemos hacer copias de seguridad fácilmente. Solo necesitamos extraer la unidad USB, montarla en otro Linux y realizar un backup, por ejemplo mediante un tar.
  • Podremos disponer de varios pendrives para realizar diferentes funciones, simplemente cambiando el pendrive.
  • Podemos distribuir un mismo sistema entre varios nodos copiando los pendrives.

Por lo tanto, necesitaremos además del NEXX uno o varios pendrives. También puedes usar algún disco duro USB. NEXX usa USB 2.0, por lo que podemos usar memorias USB 2.0 o bien 3.0. En caso de usar pendrives USB 3.0 no sacaremos todo el rendimiento del dispositivo, pero si comparamos los precios actuales entre ambos, no hay apenas diferencia. Lo mismo ocurre con los tamaños, encontrar memorias de menos de 8GB puede salir más caro que usar memorias de 16GB. En cualquier caso, yo prefiero memorias de pequeño tamaño, de forma que apenas sobresalen del NEXX, pero cualquier memoria valdría. Algunas de las que yo uso:

En mi caso no utilizo memorias de tamaño superior a 32GB para el NEXX.

Preparar la conexión del NEXX

Antes de comenzar, necesitamos tener contraseña para el usuario root. Si no hemos puesto todavía la contraseña al NEXX, debemos conectarnos mediante el interface LuCI y configurar la contraseña en el apartado System -> Administration -> Router Password.

Además, necesitamos que NEXX tenga conexión con Internet. Podemos realizarlo de varias formas distintas:

Conexión del NEXX mediante cable

Esta opción es quizás la más recomendable. Consiste en conectar en el puerto WAN un cable Ethernet con salida a Internet, por ejemplo el router ADSL/FTTH que tengamos en casa. Lo único a tener en cuenta es que la red del NEXX en el interface LAN es la 192.168.1.0/24 y esta red suele ser la que se utiliza en muchas configuraciones por defecto en los router ADSL/FTTH domésticos. Mi recomendación es que si la red coincide, lo mejor será cambiar la red del inteface LAN por otra y luego conectar el interface WAN a nuestro router. Para ello es necesario ir a Network -> Intefaces y luego pulsar el botón Edit de la interface LAN. Ahí podemos cambiar la dirección IP a otra, por ejemplo 192.168.8.1.

Conexión del NEXX mediante Wi-Fi

Esta opción consiste en conectar nuestro NEXX mediante Wi-Fi a una red, de forma que actúe como cliente de la red. Podemos usar la red Wi-Fi de nuestra casa o también usar nuestro móvil para hacer tethering (cuidado con el consumo de datos).

En este caso lo primero que haremos será ir al apartado Network -> Wifi del menú superior. Saldrá la configuración del Wi-Fi que será algo similar a la imagen siguiente. Seleccionamos scan para buscar la red a la que nos queremos conectar:

Redes Wifi

En el listado de redes que aparecen, buscaremos la nuestra y seleccionaremos Join Network. Veremos una pantalla como la siguiente, donde introduciremos la contraseña de nuestra red:

Redes Wifi - Conexión

Tras seleccionar el botón Submit obtendremos una pantalla como la siguiente. En mi caso no he modificado ningún dato y he pulsado en Save and Apply:

Redes Wifi - Detalles

Y finalmente estaremos conectados y veremos una pantalla como la siguiente:

Redes Wifi - Conectado

Podemos observar que hemos obtenido la dirección IP 192.168.43.1. Esta dirección podremos usarla para conectarnos también al dispositivo usando la misma red Wi-Fi.

Al igual que en el apartado anterior, es importante tener en cuenta es que la red del NEXX en el interface LAN es la 192.168.1.0/24 y esta red suele ser la que se utiliza en muchas configuraciones por defecto en los router ADSL/FTTH domésticos. Si este es el caso, al igual que antes, la recomendación es que si la red coincide es mejor cambiar la red de la interface LAN por otra y luego conectarnos a la red Wi-Fi de nuestro router. Para ello es necesario ir a Network -> Intefaces y luego pulsar el botón Edit de la interface LAN. Ahí podemos cambiar la dirección IP a otra, por ejemplo 192.168.8.1.

Copiar el sistema de ficheros

En este punto, tendremos conexión con el NEXX mediante un cable Ethernet en el puerto LAN y conexión a Internet mediante el cable en el puerto WAN o bien por Wi-Fi. Existen otras opciones, como conectarnos a través de la dirección usada en la red Wi-Fi vista anteriormente, pero lo importante es tener conexión con el NEXX y que éste a su vez tenga conexión con Internet. Voy a suponer que el NEXX tiene la dirección 192.168.1.1.

Nos conectaremos mediante ssh al NEXX, usando la dirección 192.168.1.1, usuario root y la contraseña que hemos establecido anteriormente. El comando será ssh -l root 192.168.1.1.

Una vez dentro, actualizaremos la lista de paquetes mediante el comando opkg update, dado que necesitamos software adicional para particionar y formatear la unidad USB. En la siguiente imagen se pueden observar los comandos introducidos y su salida:

Entrada en el NEXX por ssh y actualización paquetes

Después de actualizar el listado de paquetes, vamos a instalar los siguientes paquetes que nos permitirán usar la unidad USB: fdisk, block-mount, kmod-usb-storage, kmod-fs-ext4 y e2fsprogs. Para ello usaremos los siguientes comandos:

opkg install fdisk
opkg install block-mount
opkg install kmod-usb-storage
opkg install kmod-fs-ext4
opkg install e2fsprogs

La salida de estos comandos es la siguiente:

Instalación de paquetes

En este momento podemos conectar nuestro pendrive USB al NEXX. Ejecutaremos el comando dmesg y podremos ver si se ha conectado de forma correcta y el nombre del dispositivo. En mi caso (que será el habitual) veremos que el pendrive se llama sda y que tiene una única partición llamada sda1 (penúltima línea):

Conexión y listado de particiones

El siguiente paso consiste en borrar las particiones existentes (para evitar posibles problemas) y crear una partición nueva. ¡Se perderán todos los datos del pendrive! Para ello usaremos el comando fdisk que hemos instalado anteriormente. La serie de comandos es la siguiente, uno por línea y la explicación tras el corchete (no se debe introducir):

fdisk /dev/sda # Editamos el disco /dev/sda, nuestro pendrive
p # Imprime las particiones actuales
d # Borramos la partición, como solo hay una no pregunta el número de partición
n # Creamos una partición nueva
p # Partición primaria
1 # Partición 1
<enter> # Indicamos que el primer sector indicado por defecto es correcto
<enter> # Indicamos que el último sector indicado por defecto es correcto
w # Escribimos los datos en disco y salimos

Se pueden observar los comandos introducidos en la siguiente imagen:

fdisk

Formatearemos la partición de disco que acabamos de crear y la montaremos en el directorio /mnt. Al final comprobaremos que se ha montado correctamente usando el comando mount. Usaremos los siguientes comandos:

mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt
mount

Los comandos introducidos quedan de la siguiente forma (la línea importante es la última, donde se observa que la partición /dev/sda1 está montada en /mnt:

mount

Ahora vamos a copiar (usando el comando tar el sistema de ficheros que se encuentra en la memoria flash, partición raíz (/) en la partición /dev/sda1 (montada en /mnt, para ello usaremos los siguientes comandos (comentarios a la derecha, tras el corchete):

mkdir /tmp/raiz # Creamos un directorio temporal para montar el raíz
mount --bind / /tmp/raiz # Montamos el raíz en el directorio temporal
tar -C /tmp/raiz -cvf - . | tar -C /mnt -xf - # Copiamos el raíz en el pendrive
umount /tmp/raiz # Desmontamos el raíz

Los comandos introducidos quedan de la siguiente forma. Dado que el tar muestra los ficheros (parámetro v) he cortado la lista dejando los primeros y últimos ficheros. Al final utilizo el comando ls /mnt para ver que se han copiado:

copia del filesystem

Arrancar el sistema de ficheros del USB

Ahora que disponemos del pendrive con el sistema de ficheros completo, es momento de arrancar de él. Para ello es necesario indicarle a OpenWRT que arranque de esa partición. Esto lo lograremos usando el overlay que dispone, creando el fichero /etc/config/fstab indicando la siguiente información:

config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '1'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'

config 'mount'
        option  target          '/'
        option  device          '/dev/sda1'
        option  fstype          'ext4'
        option  options         'rw,sync'
        option  enabled         '1'
        option  enabled_fsck    '0'

La mayoría de esta información se genera de forma automática usando el comando block detect y sacando su salida al fichero. Luego será necesario editar el fichero mediante un editor (en el ejemplo he usado vi). Si necesitas otro editor, puedes instalarlo usando opkg, por ejemplo con opkg install nano para el editor nano. Los comandos usados han sido los siguientes (comentarios después del corchete):

block detect > /etc/config/fstab # Generamos el fichero
vi /etc/config/fstab # Modificamos el fichero

En la siguiente imagen se puede observar los comandos usados. Al final uso cat para mostrar el contenido del fichero:

Configuración del Overlay

En este punto, podemos reiniciar el dispositivo usando reboot. Nos conectaremos de nuevo mediante ssh y comprobamos que todo ha ido correctamente:

Comprobación

Como podemos observar, la partición /dev/sda1 es ahora el nuevo raíz (/) del sistema y el espacio en disco libre es de unos 14GB. Ahora podemos instalar software en el dispositivo sin problema de espacio, generar información y almacenarla, etc.

Si quieres, puedes apagar el NEXX, extraer la unidad USB y arrancar de nuevo, verás como el sistema arranca con la memoria Flash. Recuerda/apunta la contraseña que pusiste, porque la configuración del sistema de ficheros de la flash y del sistema de ficheros del USB ¡empezará a ser diferente en cuando comiences a hacer cambios en el USB!