3 pasos para migrar de una tarjeta SD a un disco USB en Raspberry Pi

Captura

Los dispositivos Raspberry Pi vienen por defecto con una tarjeta SD con dos particiones en donde se almacenan los ficheros de inicio del sistema (/boot) y los datos del propio sistema operativo, de usuario y swap (/). Sin embargo, uno de los principales problemas en este almacenamiento es la cantidad de operaciones de I/O de disco que lleva a cabo el sistema operativo que a la larga afectan la integridad de los ficheros almacenados en una tarjeta SD que inicialmente no está diseñada para ello y por ello es muy común que después de un tiempo el filesystem se corrompa.

Para ello, en este artículo se explicará el proceso de migración de almacenamiento de una tarjeta SD a un disco duro externo USB, lo cual optimizará el desempeño, el espacio de almacenamiento y la integridad de los datos almacenados. Se dejará en la tarjeta SD el filesystem /boot y el filesystem / se migrará al disco duro.

Requerimientos

Paso 1: Montar y formatear el disco duro externo

Tal como se indica arriba, se requiere un disco duro externo con alimentación independiente. En mi caso, tengo un disco duro Western Digital Elements de 1TB que va muy bien para este caso.

Siendo así, lo primero es mirar el almacenamiento actual en la tarjeta SD (en mi caso es una tarjeta de 8GB):

Después, conectar el disco duro al puerto USB y mirar que el sistema operativo lo haya detectado:

En este caso no hay problema, por lo que se procede a revisar las particiones que están definidas en ese disco duro externo:

Como se ve, se tiene únicamente una partición. Para crear una nueva partición se utilizará gdisk, la versión evolucionada de fdisk, que se instala mediante el gestor de paquetes apt:

Instalado gdisk, proceder con la creación de una nueva partición sobre el disco /dev/sda:

Con el comando “p” se listan las particiones existentes y con “d” se eliminan:

Ahora, se crearán dos particiones (comando “n“): Una de 50GB para el sistema operativo (esta es la más importante en este artículo) y el resto (+/- 880GB) para almacenamiento general:

Guardar los cambios con “w“:

Finalmente, formatear las particiones creadas como EXT4:

Paso 2: Montar la nueva partición y migrar los datos

Creadas y formateadas las particiones, se procede con la copia de los datos de la tarjeta SD a la partición creada en el disco duro externo. En este caso, se usará la primera partición (/dev/sda1), dejando la segunda para almacenamiento general (/dev/sda2). La idea es montarla bajo /mnt como en este caso:

Ahora, se debe realizar una copia de ficheros bajo / que mantenga los permisos y características de los ficheros igual a los originales. Para ello se usará “rsync” aunque también se puede usar “cp” (#cp -ax / /mnt) o “dd” (#dd bs=4M conv=noerror if=/dev/mmcblk0p2 of=/dev/sda1):

Este paso suele tardarse unos 10-15 minutos.

Paso 3: Modificar los ficheros de arranque (boot) y reiniciar el sistema

Cuando los pasos anteriores estén listos, se procede con la modificación del fichero /boot/cmdline, en el que se le indica al dispositivo en dónde se encuentra la partición con el sistema operativo. Como siempre, antes de hacer cualquier cambio se debe hacer una copia de seguridad:

Luego, modificar el contenido del fichero para que refleje el nombre de la nueva partición que se ha creado y que reside en el disco USB externo, quedando de la siguiente manera:

En este caso, se ha cambiado el parámetro “root” con el nombre de la partición del disco externo (/dev/sda1) y se ha agregado el parámetro “rootdelay“, que adiciona un periodo de espera para garantizar que los drivers del disco USB se carguen de forma correcta antes de proceder con el inicio del sistema operativo.

Hay que tener en cuenta que el sistema operativo de Raspberry Pi (en este caso Raspbian) no soporta nombres de particiones con UUID o labels, por lo que se usan las referencias tradicionales a /dev.

Para finalizar, se edita el fichero “fstab” ubicado en la nueva partición para que monte los nuevos filesystems. Se deshabilita la línea correspondiente a /dev/mmcblk0p2 y se remplaza por /dev/sda1:

Hecho esto, se reinicia el sistema (“reboot“) y se valida que los filesystems se hayan montado correctamente y que el sistema esté ubicado en /dev/sda1. Más adelante, se puede montar la partición /dev/sda2 en un punto de montaje deseado para almacenar datos de usuario.

EXTRA: Ampliar el tamaño del área de Swap de la Raspberry Pi

Como ya se tiene bastante almacenamiento disponible en el disco externo, se puede realizar una ampliación del fichero de swap (paginación) del sistema operativo. Para ello, se edita el fichero /etc/dphys-swapfile (que por lo general tiene un valor de 100MB) y se remplaza por 512, que es el valor en MB de la RAM del dispositivo:

Luego, se ejecuta el comando “dphys-swapfile” que re-genera un nuevo fichero con el tamaño indicado:

Para que los cambios se apliquen, se reinicia el servicio “dphys-swapfile“:

Con todo esto, se logrará tener un mejor almacenamiento y desempeño de la Raspberry Pi y evitar problemas de corrupción de datos.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.