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
- Memoria: 128MB 580MHz DDR2
- Almacenamiento: 32 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:
- Actualizar el repositorio de paquetes (podéis ver un ejemplo en mi anterior entrada)
- Actualizar a la última versión nuestro firmware (ídem que el punto anterior)
- Formatear la sd desde el Omega 2+
- Preparar la sd para montar el sistema de ficheros con permiso de lectura
- 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