Copia de seguridad de Raspberry Pi automáticamente, con copias de seguridad incrementales

15

Hay algunas preguntas y respuestas diferentes sobre este tema. Sin embargo, al buscar no he podido encontrar una respuesta que pueda considerarse "canónica" o que reúna las diversas opciones en un solo lugar.

Me gustaría hacer una copia de seguridad del contenido de mi Raspberry Pi para permitir una restauración completa si es necesario, de manera fácil y confiable.

Estas características serían ideales:

  • Las copias de seguridad se guardan en una ubicación externa (memoria USB, DAS, NAS, computadora de red, etc.)
  • Automatización, ya sea incremental o mediante programación.
  • Numeración de versiones de copias de seguridad

Clonar la tarjeta SD parece ser una solución popular, pero según esta publicación de Goldilocks, esto no es aconsejable porque un clon contiene archivos que se cargan solo en tiempo de ejecución, etc.

Por lo tanto, supongo que una buena solución utiliza algo como, rsynco quizás de manera más robusta, una utilidad que puede manejar los criterios anteriores.

Mi situación particular: tengo una Raspberry Pi en una LAN donde puedo hacer una copia de seguridad en una computadora Mac OS X, un Synology DiskStation NAS o una memoria USB conectada a la Raspberry. Preferiría no usar este último.

Banderas de invierno
fuente
Hay una larga lista de opciones de respaldo en el sitio de Ubuntu (en su mayoría no específicas de Ubuntu) askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Respuestas:

10

Rsnapshot cumple esos criterios: 1

  • Se puede usar de forma local o remota.

  • Puede ser automatizado / programado.

  • Utiliza copias de seguridad incrementales numeradas.

No tengo mucha experiencia personal con él más allá del hecho de que se usa en servidores en los que trabajo, donde ha salvado el día ocasionalmente, pero parece haber una buena introducción aquí , el wiki de Arch Linux, que tiende a tener excelentes documentación, tiene una página (estoy seguro de que la mayoría de esto se aplica igualmente a otras distribuciones), y la página de inicio se refiere a un CÓMO que no puedo encontrar en línea, pero al buscarlo aparecieron numerosos tutoriales, debates, etc. además de estos enlaces (el procedimiento real puede mantenerse fuera de línea para que las personas no se confundan al usar el incorrecto con la versión incorrecta).


  1. Aunque aparentemente ahora (2018) puede estar sin mantenimiento a favor de BorgBackup .
Ricitos de oro
fuente
¡Gracias! Lo probaré este fin de semana y confirmaré tu respuesta si funciona.
Winterflags
1
Rsnapshot ya no se mantiene. El autor original cambió a usar BorgBackup
lightswitch05
@ lightswitch05 ¡Es bueno saberlo!
Ricitos de oro
2

He intentado varias técnicas de respaldo. Yo uso 2 de forma regular.

Clono la tarjeta SD en mi Mac y comprimo la imagen. Lo uso como respaldo de seguridad o para hacer tarjetas duplicadas. Estoy de acuerdo en que esto no es un ideal. Mi guión está abajo.

Con mayor frecuencia, uso rsyncpara copiar en un HD conectado a la Pi. Consulte /raspberrypi//a/28087/8697 para más detalles.

De hecho, tengo versiones ligeramente diferentes para hacer copias de seguridad de las imágenes de Wheezy, Jessie y MATE (en diferentes directorios).

Intenté sincronizar con mi Mac, pero esto solo funcionó parcialmente. El problema fundamental es que los usuarios de Mac y Pi no coinciden, sin mencionar las diferencias entre rsynclas diferentes plataformas. Con los cambios en la seguridad en el último OS X, probablemente tendría aún más problemas.

He utilizado con éxito una Pi para hacer una copia de seguridad de otra a través de una red.

No sé cómo funcionaría esto para un NAS, pero sospecho que puede haber problemas con los enlaces duros y los permisos.

#!/bin/bash
# script to backup Pi SD card
# 2017-06-05
# DSK='disk4'   # manual set disk
OUTDIR=~/temp/Pi
# Find disk with Linux partition (works for Raspbian)
# Modified for PINN/NOOBS
export DSK=`diskutil list | grep "Linux" | sed 's/.*\(disk[0-9]\).*/\1/' | uniq`
if [ $DSK ]; then
    echo $DSK
    echo $OUTDIR
else
    echo "Disk not found"
    exit
fi

diskutil unmountDisk /dev/$DSK
echo please wait - This takes some time
echo Ctl+T to show progress!
time sudo dd if=/dev/r$DSK bs=4m | gzip -9 > $OUTDIR/Piback.img.gz

#rename to current date
echo compressing completed - now renaming
mv -n $OUTDIR/Piback.img.gz $OUTDIR/Piback`date +%Y%m%d`.img.gz
Milliways
fuente
Su solución DAS debe ser fácilmente adaptable a una memoria USB conectada a la Pi, ¿verdad? En lugar de preocuparme por configurar una copia de seguridad en red, estoy pensando en simplemente hacer rsync al USB.
Winterflags
2

Si considera estos 2 hechos, lo abrirá a otras opciones:

  1. Puede montar el mismo dispositivo en múltiples directorios simultáneamente.
  2. Puede crear tmpfsmontajes en cualquier lugar que desee enmascarar un directorio.

Entonces, sí, hay muchas rutas que no desea respaldar. Evita la mayoría de ellos montando su partición primaria en un segundo directorio. Otros seguirán teniendo datos que no desea respaldar /tmp, como /dev, y /var/log.

Mi proceso fue así ...

  1. SSH en la Raspberry Pi
  2. Montar exactamente querer que quería hacer una copia de seguridad

    sudo mount                     /dev/mmcblk0p2    /tmp/root/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/var/log/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             /tmp/root/tmp/
    sudo mount                     /dev/mmcblk0p1    /tmp/root/boot/
    
  3. Salir de la máquina
  4. Copie los datos a través de ssh + tar

    ssh [email protected] 'cd /tmp/root; sudo tar cf - * | gzip;' | pv > rpi.tgz
    # NOTE: The `pv` command gives you a progress meter but can be left out.
    
  5. Retire las monturas temporales

    for m in /var/log/ /dev/ /boot/ /; do sudo umount /tmp/root${m}; done
    

Una vez que esté satisfecho con los resultados, puede ponerlo todo en un solo archivo como ~/backup.sh

#!/bin/bash -eu

dir=$(mktemp -d)

cleanup(){
    cd /tmp/ # You can't umount or rm a directory while you are in it.
    for m in /dev/ /tmp/ /var/log/ /boot/ /; do
        sudo umount ${dir}${m}
    done
    rm -rf ${dir}
}

do_mounts(){
    sudo mount                     /dev/mmcblk0p2    ${dir}/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/dev/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/tmp/
    sudo mount -t tmpfs -o size=1m tmpfs             ${dir}/var/log/
    sudo mount                     /dev/mmcblk0p1    ${dir}/boot/
}

send_data(){
    cd ${dir}; sudo tar cf - * | gzip | tee >(md5sum > /tmp/backup.md5);
}

give_feedback(){
    awk '{print "MD5:", $1}' < /tmp/backup.md5 >&2
}

trap cleanup EXIT INT TERM
do_mounts
send_data
give_feedback

Y las llamadas son así ...

$ ssh [email protected] ./backup.sh | pv | tee rpi.tgz | md5sum | awk '{print "MD5:", $1}'
MD5: d3d9181374f3ec8e4e721c786eca9f71
 348MB 0:04:50 [ 1.2MB/s] [                 <=>                                ]
MD5: d3d9181374f3ec8e4e721c786eca9f71

SUGERENCIA: Mientras está experimentando, cambie tar cf - *a tar cf - etcpara ahorrar un montón de tiempo en cada ejecución de prueba.

Bruno Bronosky
fuente
2

Tuve el mismo problema con mi Raspis @ home. Es por eso que escribí raspiBackup que permite crear copias de seguridad dd, tar y rsync de forma regular sin la invención del usuario. Solo inténtalo.

framp
fuente