RaspBerry en USB

Vamos a comentar en esta entrada una muy interesante opción a configurar en nuestra RaspBerry: la posibilidad de utilizar un dispositivo USB como contenedor del sistema operativo Linux. ¿Y qué razones hay para llevar a cabo esta operativa?, pues nada más – y nada menos – que un salto cuantitativo en la velocidad de trabajo de nuestra RasPi.

Existen otras opciones – además de la aquí comentada – para lograr trabajar de una manera más rápida, por ejemplo el “overclocking”…. pero es otro tema ya tratado en nuestro blog.

Conviene saber que la tarjeta Raspberry está diseñada para arrancar imperativamente desde el lector de  tarjeta SD que incorpora. Hacer que Linux corra desde un dispositivo USB precisa una serie de configuraciones y/o modificaciones. De un modo esquemático podemos decir que lo que debemos hacer es cambiar la partición /root de nuestro sistema (normalmente en la partición 2 de la tarjeta SD) para que resida en un dispositivo USB externo.

Existen ya algunos procedimientos para realizar este proceso, pero como quiera que implican la utilización de algún conocimiento más avanzado de Linux, así como la preparación de particiones, etc. desde dicho sistema, nosotros hemos optado por la forma más sencilla de llevar a cabo el proceso. ¿Y cual es la desventaja de usar nuestro método? … pues sencillamente que se utiliza la tarjeta SD que actualmente ya usamos en nuestra RasPi pero de una forma infrautilizada, esto es, se usa solo la partición /boot de la misma.

Cualquier conocedor de Linux aconsejaría preparar una tarjeta nueva que contenga solo dicha partición (/boot) y así poder usar una SD de tamaño mucho menor que los 2 GB típicos. Pero nosotros hemos decidido optar por la solución más rápida y sencilla para el usuario.

Lo que necesitamos para realizar el proceso:

– Tarjeta Raspberry Pi.

– Tarjeta SD con el Linux ya instalado.

– La imagen del S.O. Linux para volcar al USB.

– Un dispositivo USB (de al menos 2 GB de capacidad).

– Un PC para editar el fichero de texto implicado.

De modo resumido, los pasos que vamos a seguir son:

1. Efectuamos una “medición” de velocidad de nuestro sistema tal y como está, esto es, corriendo desde la tarjeta SD estándar.

2. Instalamos desde una imagen el S.O. Linux en el dispositivo USB.

3. Averiguamos el nombre del dispositivo USB que vamos a utilizar.

4. Cambiamos la info sobre la partición /root en la tarjeta SD.

5. Reiniciamos el sistema con la tarjeta SD modificada y el dispositivo USB conectados a la RasPi.

6. Verificamos que el arranque desde USB es correcto y efectuamos una nueva “medición” de velocidad de nuestro sistema, ahora corriendo desde el USB.

(Paso 1)   – Midiendo la velocidad en nuestro sistema.

Una vez arrancada nuestra RasPi, la forma sencilla de “medir” la velocidad a la cual opera la tarjeta SD que utiliza nuestra RasPi se basa en el uso del comando Linux dd. Este comando realiza operaciones de lectura/escritura en el disco de nuestra elección de forma repetitiva.

Mediante la ejecución del mismo y ciertos parámetros podemos evaluar cuán rápida es nuestra tarjeta SD.

Para efectuar la prueba, ejecutamos

dd if=/dev/zero of=/tmp/out bs=1M count=300

Vemos que en el caso de la tarjeta SD utilizada el proceso arroja una velocidad de 3,2 MB/s. (Esto puede variar algo en nuestra SD según sea la “clase” de la misma).

(Paso 2)   – Instalar Linux en el dispositivo USB.

Para instalar la imagen del sistema en el USB de nuestra elección usaremos la aplicación habitual, esto es, el programa Win32 Disk Imager ( o cualquier otro al cual estemos habituados). La operativa es la misma que la utilizada para crear la SD – descrita con detalle en la página relacionada del proyecto RaspBerry – pero con la salvedad de que usaremos como “destino” el dispositivo USB de nuestra elección.

Nota: hemos de asegurarnos de elegir la unidad USB correcta, ya que en caso de error borraremos los datos de otro dispositivo.

(Paso 3)   – Averiguar el nombre del dispositivo USB.

Una vez que nuestro dispositivo (pendrive o disco) USB tenga la imagen grabada conviene que nos aseguremos del nombre de dispositivo que nuestra RasPi le asigna. Para ello, lo “pinchamos” en la RasPi y ejecutamos:

dmesg | tail

Este comando (dmesg) nos muestra los mensajes del sistema, y gracias a la ejecución mediante el “pipe” (|) hacia la función “tail” hace que se nos muestren solo los últimos mensajes generados.

Como quiera que acabamos de insertar el USB preparado anteriormente, podemos ver entre los últimos mensajes generados por el sistema que para Linux el USB insertado se denomina “sda” , existiendo 2 particiones en el mismo, sda1 y sda2.

Nota: la signación de nombres a dispositivos de almacenamiento USB en Linux puede variar si estos se insertan en el sistema en diferente orden. Razón por la cual es muy importante recordar que si queremos arrancar la RasPi con el USB que estamos preparando convendrá que siempre se arranque con solo este dispositivo de almacenamiento USB conectado, y si queremos conectar alguno más hacerlo tras el arranque. (Esto no afecta a otro tipo de dispositivos como ratones, teclados, etc.)

(Paso 4)   – Cambiamos la info sobre la partición /root en la tarjeta SD.

Tal y como hemos visto existe un fichero en la tarjeta SD que indica en el arranque donde está la partición /root. Lo que vamos a hacer ahora es modificar este fichero (cmdline.txt) de la siguiente manera:

localizamos la cadena :  /dev/mmcblk0p2

y la cambiamos por :      /dev/sda2

Para ello podemos usar un editor de texto plano de nuestra preferencia, ya que este fichero es accesible en la tarjeta SD desde cualquier sistema operativo, o bien editarlo desde la propia Raspberry antes de apagar el sistema. Tanto si decidimos editarlo desde la propia RasPi como desde otro ordenador, aconsejamos realizar un backup del fichero antes de su edición. El proceso detallado sería:

Realizamos el backup del fichero con

sudo cp /boot/cmdline.txt /boot/cmdline.bak

Editamos el fichero con

sudo nano /boot/cmdline.txt

Ahora, listos los dispositivos USB y la tarjeta SD, apagamos el sistema con

sudo halt

(Paso 5)   – Reiniciamos el sistema con USB conectado a la RasPi.

Nos aseguramos de tener el dispositivo de almacenamiento USB conectado a la RasPi y la tarjeta SD modificada también conectada. Arrancamos el sistema y – si todo se ha efectuado de forma correcta – se lanzará el arranque desde la SD y se “informará” al sistema de que la partición /root está ahora en el dispositivo USB.

Nota: en caso de que hubiera algún problema en el arranque siempre podemos revertir el proceso editando el fichero cmdline.txt que existe en el directorio raiz de la tarjeta SD.
La mayor parte de los problemas que suelen presentarse al conectar nuevos dispositivos suelen deberse a la escasez de alimentación para la Raspberry y los dispositivos:  en tal caso conviene ¡ revisar la alimentación o usar dispositivos auto-alimentados !

(Paso 6)   – Verificaciones y mediciones.

Nos aseguramos de que estamos operando con /root montado en nuestro dispositivo USB mediante el comando  ls -la /dev/root

Para efectuar de nuevo la prueba de velocidad , ejecutamos

dd if=/dev/zero of=/tmp/out bs=1M count = 300

Vemos que ahora el sistema trabaja a una velocidad de 9,1 MB/s.  El cambio a dispositivo USB ha merecido la pena.

Y para que todo quede aún más claro, podemos además – aunque no es preciso – cambiar la info existente en el fichero /etc/fstab

Para ello crearemos un backup y editaremos:

Realizamos el backup del fichero con

sudo cp /etc/fstab /etc/fstab.bak

Y editamos el fichero cambiando

/dev/mmcnlk0p2 /

por

/dev/sda2 /

Algo más de información:

Los interesados en usar un dispositivo USB para la RasPi conviene que sepan que diferentes dispositivos pueden arrojar velocidades diferentes. En Diverteka hemos probado varios tipos y, a modo de ejemplo, estos son los resultados medidos:

/root en SD……….  velocidad (aprox.): 3 MB/s.

/root en USB (1) … velocidad (aprox.): 4 MB/s.

/root en USB (2)  velocidad (aprox.): 9 MB/s.

/root en SSD ……..  velocidad (aprox.): 30 MB/s.

  Bitcoin Currency Converter
Amount of BTC to convert
To currency:
1BTC =