[ONION] Cómo extender el almacenamiento en el Omega 2+

NOTA: Este post está basado en mi experiencia y la documentación oficial ubicada en esta url

Una de las cosas que más importan, hoy en día, es el almacenamiento, debido al gran número de datos que generamos… Nuestro Omega 2+ tiene almacenamiento interno, en concreto, monta una ROM en la que se almacena el firmware y el sistema operativo.

La imagen anterior es una captura de mi Omega 2+ recién reseteado de fábrica (suelo hacerlo mucho para hacer mis pruebas de rendimiento, configuraciones, etc). Así, es como esta la imagen que tendríais si accedéis a la consola nada más desempaquetar vuestro dispositivo.

  • Device info: indica las capacidades actuales de nuestro dispositivo
    • Procesador: 580 MHz Ralink MT-7688 MIPS
    • Memoria128MB 580MHz DDR2
    • Almacenamiento32 MB Flash Memory

Como podemos ver, las capacidades son. aunque generosas para su precio y tamaño, escasas para llevar a cabo proyectos importantes. Tan sólo 32MB de memoria flash dedicada al almacenamiento, de las cuáles, 8,5MB ya están dedicadas al sistema operativo… Llevar a cabo instalaciones de ciertos paquetes nos será bastante tedioso si no lo remediamos…

Tenemos dos opciones, ampliar solo almacenamiento (mediante USB o microsd) o bien ampliar almacenamiento y mover todo el sistema operativo y arranque al mismo. Yo seguiré la segunda opción, y es la que describiré en este post. Creo que es la mas completa y nos soluciona la vida de mejor manera…

Básicamente lo que haremos es “mover” desde la memoria flash del Omega 2+ todo el contenido del sistema operativo al nuevo soporte de almacenamiento.

La estructura básica del Omega 2+ se basa en dos carpetas:

  • /rom
    • contiene toda la información “solo lectura” del dispositivo
  • /overlay
    • contiene todos los cambios que realizamos sobre nuestro Omega 2+, como archivos, programas instalados, etc…

En el arranque, se combinan ambas carpetas y conseguimos la estructura lógica / desde dónde podemos acceder a todo el contenido (como en cualquier sistema Linux). Lo que haremos es mover todo el contenido del /overlay sobre nuestro nuevo soporte de almacenamiento, con lo que conseguiremos que toda nuestra información, al final, resida sobre dicho soporte, y podamos así extenderlo.

Material necesario

  • Omega 2+ con firmware >= 0.1.9 b149
  • Dock USB para Omega 2+
  • Cable USB
  • Micro sd del tamaño que creáis oportuno para vuestras necesidades (yo no pasaría de 16Gb, podéis ver su guía de memorias en esta url)

Arrancando el sistema desde micro sd

Para poder ampliar el almacenamiento y poder arrancar desde la sd, debemos seguir estos pasos:

  1. Actualizar el repositorio de paquetes (podéis ver un ejemplo en mi anterior entrada)
  2. Actualizar a la última versión nuestro firmware (ídem que el punto anterior)
  3. Formatear la sd desde el Omega 2+
  4. Preparar la sd para montar el sistema de ficheros con permiso de lectura
  5. Traspasar todo el sistema operativo y configuración de arranque a la sd

Tened en cuenta que:

  • Una vez iniciado el proceso, eliminaremos todo el contenido actual del Omega 2+
  • Perderemos toda la configuración y software que hayáis instalado en el Omega 2+
  • Si en algún momento sacáis la sd del slot y encendéis el sistema, provocaréis un reset del mismo, y lo tendréis todo desconfigurado, volviendo al punto de partida (muy probablemente no dispongáis ni de la consola! pero puedes ver este otro post dónde te explico cómo hacerlo)

Vamos a ello…

Comprobar el estado de nuestro filesystem

Para ello podemos ejecutar el siguiente comando df:

root@Omega-ABCD:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 5632      5632         0 100% /rom
tmpfs                    62872       216     62656   0% /tmp
/dev/mtdblock6           25664      2800     22864  11% /overlay
overlayfs:/overlay       25664      2800     22864  11% /
tmpfs                      512         0       512   0% /dev

En mi caso, /rom está al 100% de uso (normal, no se puede escribir), y mi /overlay está al 11%. Esto significa que nos quedan libres unos 25MB de espacio… Recordemos que parto de un sistema “limpio”.

Tras nuestro nuevo procedimiento, la capacidad se verá aumentada considerablemente. No olvidéis estos datos…

Instalación de paquetes

Es probable que debido a un cambio de kernel, obtengáis un error al realizar la instalació. En tal caso, dirigiros al final de este post para seguir las instrucciones necesarias, y posteriormente podréis continuar con el apartado siguiente a la instalación

Empecemos, actualizamos el sistema e instalamos las herramientas necesarias:

root@Omega-ABCD:~# opkg update
root@Omega-ABCD:~# opkg install kmod-usb-storage-extras e2fsprogs kmod-fs-ext4
  • kmod-usb-storage-extras
  • e2fsprogs
  • kmod-fs-ext4

Es el momento de insertar la sd en la ranura (si no lo hablareis hecho antes) y verificar que realmente podemos acceder a ella.

Formateo en ext4

Necesitamos explorar los volúmenes disponibles en nuestro sistema.

Ejecutamos el comando mount:

root@Omega-ABCD:~# mount
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/mtdblock6 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600,ptmxmode=000)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)
mountd(pid2059) on /tmp/run/mountd type autofs (rw,relatime,fd=5,pgrp=2057,timeout=60,minproto=5,maxproto=5,indirect)
/dev/mmcblk0p1 on /tmp/run/mountd/mmcblk0p1 type ext4 (rw,relatime,data=ordered)

Podemos ver la última entrada como /dev/mmcblk0p1, que es la que hace referencia a la tarjeta sd. Si en vez de sd usamos un stic USB, el dispositivo sería /dev/sda1. Si dispusiéramos de múltiples dispositivos, el identificador del final (1) indicaría el órden del dispositivo: sda1, sda2, sda3… mmcblk0p1, mmcblk0p2, mmcblk0p3…

Nosotros usaremos /dev/mmcblk0p1 que es nuestra tarjeta sd. En nuestro caso se trata de una micro sd de 4Gb.

A continuación, iniciamos el formateo de la tarjeta:

root@Omega-ABCD:~# mkfs.ext4 /dev/mmcblk0p1
mke2fs 1.43.3 (04-Sep-2016)
/dev/mmcblk0p1 contains a ext4 file system
        created on Thu Nov 30 11:19:33 2017
Proceed anyway? (y,n) y
Creating filesystem with 985088 4k blocks and 246512 inodes
Filesystem UUID: 2611a4ff-6706-4a6a-bb45-ae66c4b2cdf6
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

En mi ejemplo, yo ya disponía de un sistema ext4 en la sd. Decid a todo que sí, y finalizad el formato.

Ya tenemos nuestra sd formateada en ext4.

Montar el volúmen

Ahora que ya tenemos la sd formateada, es el momento de montar el nuevo volumen.

Para ello, lo que haremos será crear un nuevo directorio como punto de anclaje para el nuevo volumen, y montaremos el dispositivo lógico sobre el mismo:

root@Omega-ABCD:~# mkdir /mnt/mmcblk0p1
root@Omega-ABCD:~# mount /dev/mmcblk0p1 /mnt/mmcblk0p1

Tras lo cuál, ya tenemos disponible nuestra nueva unidad de almacenamiento. Podemos acceder a ella mediante /mnt/mmcblk0p1:

root@Omega-ABCD:~# ls /mnt/mmcblk0p1
lost+found

Si accedemos al mismo vemos que, efectivamente, es accesible y está vacío.

Duplicar la capa /overlay sobre el nuevo volumen

Ahora que ya tenemos el volumen montado y es accesible, es el momento de volcar todo nuestro /overlay sobre él, para que podamos posteriormente hacer uso del mismo de manera transparente:

root@Omega-ABCD:~# mount /dev/mmcblk0p1 /mnt/ ; tar -C /overlay -cvf - . | tar -C /mnt/ -xf - ; umount /mnt/

tras ejecutar este comando veremos cómo se procesa todo el directorio /overlay y lo asocia al nuevo volumen.

Ahora ya tenemos vinculado /overlay con /mnt/mmcblk0p1

Hacer persistente el vínculo y automontarlo en cada arranque

Ahora es el momento de hacer que el volumen sea montado en cada arranque.

Instalamos block-mount:

root@Omega-ABCD:~# opkg update
root@Omega-ABCD:~# opkg install block-mount

Persistimos los cambios en el fstab:

root@Omega-ABCD:~# block detect > /etc/config/fstab

Ahora ya lo tenemos en el fstab, y podremos arrancarlo automáticamente.

Debemos modificar algunos parámetros. Para ello editamos fstab:

root@Omega-3285:~# vi /etc/config/fstab

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  '/mnt/mmcblk0p1'
        option  uuid    '2611a4ff-6706-4a6a-bb45-ae66c4b2cdf6'
        option  enabled '0'

Y lo modificamos según este contenido:

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  '/overlay'
        option  uuid    '2611a4ff-6706-4a6a-bb45-ae66c4b2cdf6'
        option  enabled '1'

Hemos cambiado:

  • línea 10: cambiamos el punto de montaje del volumen, ahora apunta a /overlay
  • línea 12: hacemos que los cambios estén activos

Ya solo nos queda realizar un reboot al sistema:

root@Omega-ABCD:~# reboot

y cuando arranque el sistema, lo hará efectivamente desde la tarjeta de memoria…

Verificar el nuevo filesystem

Una ves reiniciado el Omega 2+, podemos volver a recuperar los datos del filesystem y comprobar que realmente estamos haciendo uso de nuestra nueva tarjeta sd como almacenamiento principal del sistema_

root@Omega-3285:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 5632      5632         0 100% /rom
tmpfs                    62872       216     62656   0% /tmp
/dev/mmcblk0p1         3812876     23708   3575768   1% /overlay
overlayfs:/overlay     3812876     23708   3575768   1% /
tmpfs                      512         0       512   0% /dev
/dev/mmcblk0p1         3812876     23708   3575768   1% /tmp/run/mountd/mmcblk0p1

Efectivamente, podemos comprobar que ahora nuestra /overlay está al 1%, del mismo modo que nuestra tarjeta sd montada en /dev/mmcblk0p1, que apunta a /overlay.

Y si, vemos esos casi 4Gb de espacio disponible!

 

Y hasta aquí este tutorial.

Si tenéis cualquier problema o duda, podéis dejarme un comentario e intentaré ayudaros.

 

Jordi

 


Apéndice: errores de instalación por versión del kernel

En el momento de escribir este artículo, mi Omega 2+ tenía el kernel 4.4.46.

Sin embargo, existen paquetes que ya están preparados para el 4.4.76 y por lo tanto, al intentar instalarlos mediante opkg nos devuelve un error.

A continuación os indico cómo proceder en ambos casos, porque no lo dice en su documentación actual…

Primero comprobamos nuestro kernel

root@Omega-ABCD:~# uname -r
4.4.46

Vemos que tenemos el 4.4.46, sin embargo parece ser que han empezado a lanzar paquetes que requieren el 4.4.76

Disponemos del repositorio de software en esta url, desde dónde podremos descargar las versiones de nuestro kernel: http://repo.onion.io/omega2/packages/core

El error que nos da el sistema “normal” de instalación es este:

Collected errors:
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-usb-storage-extras:
 *      kernel (= 4.4.74-1-97eec485b1ee24d5b1ca0357d1dd7304) *
 * opkg_install_cmd: Cannot install package kmod-usb-storage-extras.
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-fs-ext4:
 *      kernel (= 4.4.74-1-97eec485b1ee24d5b1ca0357d1dd7304) *
 * opkg_install_cmd: Cannot install package kmod-fs-ext4.

En caso de obtenerlo por pantalla, deberéis instalar los paquetes de manera manual…

Instalar manualmente kmod-fs-ext4:

root@Omega-3285:~# wget http://repo.onion.io/omega2/packages/core/kmod-fs-ext4_4.4.46-1_mipsel_24kc.ipk
root@Omega-3285:~# opkg install kmod-fs-ext4_4.4.46-1_mipsel_24kc.ipk --nodeps

Instalar manualmente kmod-usb-storage:

root@Omega-ABCD:~# opkg remove kmod-usb-storage
root@Omega-ABCD:~# http://repo.onion.io/omega2/packages/core/kmod-usb-storage-extras_4.4.46-1_mipsel_24kc.ipk
root@Omega-ABCD:~# opkg install kmod-usb-storage-extras_4.4.46-1_mipsel_24kc.ipk --nodeps

See this for more info: http://community.onion.io/topic/2472/can-not-instal-ext4-want-to-use-usb-as-root/8

Share Button

Related Images:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.