Hacer una copia de seguridad es siempre una buena práctica que deberíamos realizar a menudo en todos nuestros dispositivos, no solo en la Raspberry. En este articulo veremos como hacer una copia de seguridad de la tarjeta de manera local, remota y restaurarla en caso de desastre.
Copia de seguridad local
Para realizar una imagen de la tarjeta microSD de manera local, hay que apagar la Raspberry. Nos conectamos mediante ssh y ejecutamos
sudo shutdown -h now
Introducimos la tarjeta en el equipo que debe realizar la copia y averiguamos donde se ha montado:
sudo fdisk -l
Hay que desmontar las dos particiones para poder hacer la copia de seguridad:
sudo umount /dev/sdX1 /dev/sdX2
Y ejecutamos:
sudo dd bs=4M status=progress if=/dev/sdd of=/media/datos1/backups/rpi/webserver/backup_`date +%yyyy%mm%dd`.dd
Para comprobar que la copia de seguridad es correcta ejecutaremos el siguiente comando:
sha1sum /media/datos1/backups/rpi/webserver/backup_`date +%yyyy%mm%dd`.dd
El resultado, en este caso, es:
b9275fcaeba732f99788654a4d80d8636dcfce9f /media/datos1/backups/rpi/webserver/backup_250817.dd
Hacemos la misma operación pero para la tarjeta microSD:
sudo sha1sum /dev/sdd
Con el resultado:
b9275fcaeba732f99788654a4d80d8636dcfce9f /dev/sdd
Si los dos resultados no son iguales, significa que tenemos algún error y hay que repetir la copia. Si ambas cadenas son idénticas, ¡felicidades! Solo nos quedaría comprimir el fichero resultante del backup:
tar -czvf backup_`date +%yyyy%mm%dd`.tar.gz /media/datos1/backups/rpi/webserver/backup_`date +%yyyy%mm%dd`.dd
Expulsamos la tarjeta:
sudo eject /dev/sdd
Y la introducimos de nuevo en la Raspberry.
RESTAURAR LA COPIA DE SEGURIDAD
Una vez introducida la tarjeta en el equipo que se encargara de restaurarla, introduciendo un único comando, descomprimiremos y restauraremos la tarjeta:
tar xzOf /media/datos1/backups/rpi/webserver/backup_20170825.tar.gz | sudo dd of=/dev/sdc bs=1M status=progress; sync
REALIZAR UNA COPIA DE SEGURIDAD REMOTA
Para evitar tener que parar la Raspberry y llevarse la tarjeta a otro ordenador, podemos hacer lo mismo pero en remoto:
ssh@192.168.1.70 -p 6814 "sudo dd if=/dev/mmcblk0 bs=1M | gzip -" | dd of=/media/backups/rpi/webserver/backup_remoto_20170825.gz
En el caso de obtener un mensaje de error del tipo:
sudo: no tty present and no askpass program specified
Debemos conectarnos al equipo remoto y editar el fichero visudo mediante:
sudo EDITOR=nano visudo
y permitir al usuario ejecutar unicamente el comando dd sin password añadiendo al final del fichero:
ALL = NOPASSWD: /usr/bin/dd if=/dev/mmcblk0 *
Si relanzamos el comando de copia, ahora no debería haber ningún problema.
Es un proceso lento, alrededor de 2 horas con una tarjeta de 32GB y con una RPI3.
Para restaurar, ahora si desde un ordenado en local, ejecutaremos la siguiente orden
gzip -dc /media/datos1/backups/rpi/webserver/backup_remoto_20170825.gz | sudo dd of=/dev/sdc bs=1M status=progress; sync
Alrededor de 40 minutos para restaurar una tarjeta de 8GB con una RPI3.