Copia de Seguridad de una tarjeta SD con Raspbian en Raspberry Pi

La idea es hacer una imagen completa de las tarjetas de las Raspberry Pi y guardarlas en el pc por si alguna tarjeta se estropea, algo que puede pasar en cualquier momento.

En este caso la copia de seguridad se guarda en una memoria externa de 32GB conectada a la Raspberry Pi que se ha montado automáticamente en /media/pi/TRANSCEND32.

Antes de ejecutar el comando tenemos que saber exactamente cual es la ruta de la tarjeta SD que arranca la Raspberry Pi. Para ello ejecutamos:

lsblk -fm

Compruebo que en este caso es /dev/mmcblk0

Y acto seguido ejecuto el comando:

sudo dd bs=4M if=/dev/mmcblk0 of=/media/pi/TRANSCEND32/raspbian8GB.img

El comando dio el siguiente error:

dd: error al escribir en ‘/media/pi/TRANSCEND32/raspbian8GB.img’: Fichero demasiado grande
1024+0 registros leídos
1023+0 registros escritos
4294967295 bytes (4,3 GB, 4,0 GiB) copied, 322,109 s, 13,3 MB/s

Esto se debe a que el pen drive tiene formato FAT32 y no admite ficheros de más de 4GB. Por tanto habrá que darle otro formato a la partición como NTFS (para que monte con permisos de edición un pen ntfs hay que instalar el paquete ntfs-3g) o Ext4.

Creo nueva tabla de particiones GPT y creo una partición con formato ext4 que admite hasta 16TB y se ubica en la siguiente ruta:

/media/pi/f4863ad6-4904-4588-a96d-82bf10502080

Por tanto el comando queda así:

sudo dd bs=4M if=/dev/mmcblk0 of=/media/pi/f4863ad6-4904-4588-a96d-82bf10502080/raspbian8GB.img

Funciona correctamente generando un fichero de 7,4GB.

Si tenemos problemas de espacio en disco y queremos comprimirlo:

sudo dd bs=4M if=/dev/mmcblk0 of=/media/pi/f4863ad6-4904-4588-a96d-82bf10502080/raspbian8GB.img | gzip > raspbian8GB.img.gz

Este comando (dd) tiene el inconveniente de que no muestra información sobre la progresión de lo que está haciendo y a veces puede tardar bastante y dar la sensación de que se ha colgado. Esto se puede solucionar añadiendo el comando pv a la sintaxis del comando dd , de forma que ahora la sintaxis seria:

dd bs=4M if=origen | pv | dd of=destino

Como resultado obtendríamos en el terminal una especie de barra de progreso, la información sobre bytes transferidos, el tiempo que lleva ejecutándose y la tasa de transferencia, todo esto en tiempo real.

También podemos usarlo a la hora de comprimir, por ejemplo:

pv raspbian8GB.img | gzip -9 > raspbian8GB.img.gz

De esta forma pv actúa como cat y permite ver el ETA para la descompresión del archivo.

Lo ideal sería automatizar una copia de estas diariamente con CRON.

 


ACLARACIÓN:

Este sistema también nos sirve para hacer una imagen en Linux (snapshot) de cualquier distribución.

Mas información sobre el comando dd: https://blog.desdelinux.net/uso-del-comando-dd/

 

Jorge Valverde Ortiz