Faça backup do Raspberry Pi automaticamente, com backups incrementais

15

Existem algumas perguntas e respostas diferentes sobre esse assunto. No entanto, ao pesquisar, não consegui encontrar uma resposta que pudesse ser considerada "canônica" ou que reunisse as várias opções em um só lugar.

Gostaria de fazer backup do conteúdo do meu Raspberry Pi para permitir uma restauração completa, se necessário, fácil e confiável.

Esses recursos seriam ideais:

  • Backups mantidos em local externo (pen drive, DAS, NAS, computador em rede, etc.)
  • Automatização, incremental ou via agendamento
  • Numeração de versão dos backups

A clonagem do cartão SD parece ser uma solução popular, mas de acordo com este post da Goldilocks, isso não é aconselhável porque um clone contém arquivos que são carregados apenas em tempo de execução, etc.

Portanto, estou assumindo que uma boa solução usa algo como rsyncou talvez com mais robustez, um utilitário que pode lidar com o critério acima.

Minha situação particular: Eu tenho um Raspberry Pi em uma LAN onde posso fazer backup em um computador Mac OS X, um Synology DiskStation NAS ou em um cartão de memória USB conectado ao Raspberry. Eu preferiria não usar o último.

Winterflags
fonte
Há uma longa lista de opções de backup no site do Ubuntu (principalmente não específicas do Ubuntu) askubuntu.com/questions/2596/comparison-of-backup-tools/2903
pidge

Respostas:

10

O Rsnapshot atende a esses critérios: 1

  • Pode ser usado local ou remotamente.

  • Pode ser automatizado / agendado.

  • Usa backups incrementais numerados.

Eu não tenho muita experiência pessoal com isso, além do fato de ser usado em servidores nos quais trabalho, onde ocasionalmente salvou o dia, mas parece haver uma boa introdução aqui , o wiki do Arch linux, que tende a ter ótimos resultados. documentação, tem uma página (tenho certeza de que a maior parte disso se aplica igualmente a outras distros), e a página inicial se refere a um HOWTO que não consigo encontrar on-line, mas a pesquisa por ele exibiu vários tutoriais, discussões etc. além desses links (as instruções reais podem ser mantidas offline, para que as pessoas não se confundam usando o errado com a versão errada).


  1. Embora aparentemente agora (2018) possa não ser mantido a favor do BorgBackup .
Cachinhos Dourados
fonte
Obrigado! Vou testá-lo neste fim de semana e confirmar sua resposta, se der certo.
Winterflags 11/11/2015
1
O Rsnapshot não é mais mantido. O autor original ligada ao uso de BorgBackup
lightswitch05
@ lightswitch05 É bom saber!
goldilocks
2

Eu tentei várias técnicas de backup. Eu uso 2 em uma base regular.

Clono o cartão SD no meu Mac e comprimo a imagem. Eu uso isso como um backup de segurança ou para fazer cartões duplicados. Eu concordo que isso não é um ideal. Meu script está abaixo.

Mais frequentemente, uso rsyncpara copiar para um HD conectado ao Pi. Consulte /raspberrypi//a/28087/8697 para obter detalhes.

Na verdade, tenho versões ligeiramente diferentes para fazer backup de imagens Wheezy, Jessie e MATE (em diretórios diferentes).

Eu tentei sincronizar novamente no meu Mac, mas isso só funcionou parcialmente. O problema fundamental é que os usuários no Mac e Pi não coincidem, sem mencionar as diferenças entre rsyncas diferentes plataformas. Com as alterações de segurança no OS X mais recente, provavelmente haveria ainda mais problemas.

Utilizei com êxito um Pi para fazer backup de outro através de uma rede.

Não sei como isso funcionaria para um NAS, mas suspeito que possa haver problemas com links físicos e permissões.

#!/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
fonte
Sua solução DAS deve ser facilmente adaptável a um dispositivo USB conectado ao Pi, certo? Em vez de me preocupar em configurar um backup em rede, estou pensando em simplesmente fazer o rsync no USB.
23915 Winterflags
2

Se você considerar esses dois fatos, ele abrirá outras opções:

  1. Você pode montar o mesmo dispositivo em vários diretórios simultaneamente.
  2. Você pode criar tmpfsmontagens em qualquer lugar que desejar mascarar um diretório.

Portanto, sim, existem muitos caminhos que você não deseja fazer backup. Você evita a maioria deles montando sua partição primária em um segundo diretório. Outros ainda terão dados dos quais você não deseja fazer backup /tmp, como /dev, e /var/log.

Meu processo foi assim ...

  1. SSH no Raspberry Pi
  2. Monte exatamente o que eu queria fazer backup

    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. Sair da máquina
  4. Copie os dados via 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. Remova as montagens temporárias

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

Quando estiver satisfeito com os resultados, você poderá colocar tudo em um único arquivo, 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

E chamar é assim ...

$ 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

DICA: Enquanto estiver experimentando, mude tar cf - *para tar cf - etcpara poupar muito tempo em cada execução de teste.

Bruno Bronosky
fonte
2

Eu tive o mesmo problema com o meu Raspis @ home. Foi por isso que escrevi raspiBackup, que permite criar backups de dd, tar e rsync regularmente, sem a invenção do usuário. Apenas tente.

framp
fonte