Raspberry Pi

Mover partición de sistema de la Raspberry Pi a un disco USB

USB VS SD
USB VS SD

motivación

Aparentemente, las tarjetas SD no están orientadas a el uso masivo de operaciones de entrada / salida y,  al menos en mi caso, cada cierto tiempo empiezan a producirse errores que corrompen la información almacenada. Cansado de estos problemas he empezado a realizar cambios en la configuración de almacenamiento de las Raspberry Pi.

En una instalación al uso de Raspberry Pi, se configuran dos particiones en la tarjeta SD. La primera, en formato FAT almacena los archivos necesarios para el arranque y en una segunda partición se encuentra el sistema propiamente dicho.

A continuación se puede observar la salida de un fdisk de una tarjeta instalada con Raspbian.

# fdisk -l /dev/mmcblk0 

Disk /dev/mmcblk0: 3,8 GiB, 4012900352 bytes, 7837696 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6f92008e

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      131072 7837695 7706624  3,7G 83 Linux

# df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/root        3,6G   1,4G  2,1G  40% /
...
/dev/mmcblk0p1    60M    21M   40M  35% /boot

No es posible prescindir de la tarjeta SD ya que es necesaria en el proceso de arranque, en concreto de la primera partición montada en /boot. Sí que se puede instalar el sistema en una memoria flash o en un disco extraíble USB, en lugar de la segunda partición de la SD.

 

preparación del nuevo destino

Primero es necesario preparar el nuevo destino del sistema. Por ejemplo, una memoria usb de 16 Gb. Primero con fdisk limpiamos la tabla de particiones y creamos una partición nueva del tipo linux.

# fdisk /dev/sda

Command (m for help): d
Selected partition 1

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-15669247, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15669247, default 15669247):
Using default value 15669247

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Ahora es necesario crear el sistema de archivos y montarlo.

# mke2fs -t ext4 -L rootfs /dev/sda1
# mount /dev/sda1 /mnt

 

cambio del sistema raíz desde la tarjeta SD a una memoria flash

Ahora es el momento del copiado de información. Yo prefiero usar rsync, aunque se podría hacer con otros mecanismos más a bajo nivel como dd.

# rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /mnt

Usando el conjunto de opciones -aAX, los ficheros son transferidos en modo archivo, asegurándose que los enlaces simbólicos, dispositivos, permisos y atributos de propiedad,tiempos de modificación, ACLs y atributos extendidos son preservados.
La opción –exclude hará que aquellos ficheros que coincidan con los patrones dados sean excluidos. Los contenidos de /dev, /proc, /sys, /tmp y /run se excluyen porque son inicializados al cargar el sistema, /lost+found es específico del sistema de archivos.

Es necesario tener paciencia ya que dependiendo del sistema copiado puede tardar bastante el traspaso de información.

 

modificaciones en el arranque

Al haber cambio el dispositivo donde se encuentra el sistema, es necesario indicarselo al proceso de arranque de la Raspberry Pi. Para ello, basta con modificar un archivo almacenado en la partición boot de la tarjeta SD.

# vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 
                                                              rootfstype=ext4 elevator=deadline rootwait rootdelay=5

Se ha modificado el parámetro root=/dev/sda1 para que apunte al nuevo destino y se ha añadido una opción rootdelay=5 para asegurarnos que el dispositivo USB está listo. Es posible que otras instalaciones cambien los valores.

También es necesario modificar el archivo /etc/fstab para que contenta el destino de la partición root correctamente.

# vi /mnt/etc/fstab

añade:
/dev/sda1    /   ext4    defaults,noatime  0       1

y comenta:
#/dev/mmcblk0p2  /               ext4    defaults,noatime       0       1

 

conclusiones

Ahora ya tenemos el sistema en un dispositivo USB con lo que el almacenamiento será más robusto. Con el cambio además de los comentado también se incrementa la velocidad, ya que el acceso de lectura / escritura a las tarjetas SD es muy lento en comparación con los USB.

Deja una respuesta