Como faço backup do meu Raspberry Pi?

296

Estou escrevendo programas para o meu Raspberry Pi (executando o Raspbian) há algumas semanas e gostaria de garantir a proteção do trabalho que fiz.

Como posso fazer backup dos arquivos que criei?

Posso simplesmente conectar o cartão SD ao meu PC com Windows (XP ou 7) e copiá-lo para o disco rígido ou outro cartão SD?

Steve Robillard
fonte
6
Eu tenho PCs rodando Ubuntu e Windows (XP e 7), mas espero que a maioria das pessoas se interesse pela resposta do Windows. Vou editar a pergunta para deixar isso claro.
9788 Steve Rogillard
7
rsync do Raspi para o seu pc?
Alex L
41
Para o código, você também pode considerar o uso de software de controle de versão distribuído como gitou hg, dessa forma, você não apenas tem cópias do seu código em vários locais, mas também possui o histórico completo de como esse código foi alterado.
Mark Booth
4
@ MarkBooth Não vejo por que um DVCS é necessário em um VCS se estamos apenas pensando em recuperar o código mais tarde. Caramba, é ainda mais fácil, pois você usa números de revisão e não confirma hashes para identificar um estado específico. Aprender um CVCS como o Subversion não é um investimento de tempo (se bem me lembro ... embora tenha sido há muito, muito tempo). Sim, mudar para o Git era um pouco irritante na época, mas nunca olhei para trás.
9189 Steven
1
Os comentários não são um bom lugar para esse tipo de discussão @StevenLu, devemos levá-lo ao Raspberry Pi Chat .
Mark Booth

Respostas:

293

Se você deseja preservar todos os dados, provavelmente precisará criar uma imagem de disco. Além disso, o Windows não consegue reconhecer os sistemas de arquivos típicos do Linux, então você provavelmente nem poderá ver seus arquivos quando conectar o cartão SD.

A criação de uma imagem de disco preservará não apenas os arquivos, mas também a estrutura do sistema de arquivos e, quando você decidir atualizar seu novo cartão SD, poderá conectá-lo e ele funcionará.

Linux

No Linux, você pode usar a ddferramenta padrão :

dd if=/dev/sdx of=/path/to/image bs=1M

Onde /dev/sdxestá o seu cartão SD?

Mac

No Mac, você também pode usar a ddferramenta padrão com uma sintaxe um pouco diferente:

dd if=/dev/rdiskx of=/path/to/image bs=1m

Onde /dev/rdiskxestá o seu cartão SD?

(é preferível usar o rdisk, pois é o dispositivo bruto - mais rápido)

Para descobrir qual disco o seu dispositivo digita diskutil listem um prompt de comando - também, você pode precisar ser root; para fazer esse tipo sudo -se digite sua senha quando solicitado.

janelas

Opção 1

No Windows, você pode usar o processo inverso usado ao piscar o cartão SD.

Você pode usar o Win32 Disk Imager , que é a ferramenta preferida para exibir um cartão SD da Foundation. Basta digitar o nome do arquivo (o local e o nome do arquivo de imagem de backup a ser salvo), selecionar o dispositivo (o cartão SD) e pressionar ler:

Win32 Disk Imager

Claro, você também pode usar o RawWrite , ddpara Windows ou ferramentas semelhantes, o processo é bastante semelhante.

opção 2

Se você não deseja fazer backup de todo o seu sistema, mas apenas de arquivos específicos, sugiro que você se conecte ao seu Raspberry Pi via SFTP e copie os arquivos para o computador local (você pode usar o cliente WinScp ). Se você tiver o SSH ativado, o SFTP normalmente não exige nenhuma configuração especial no lado do Raspberry Pi.

Outra opção é copiar os arquivos para um sistema remoto usando o rsync .

Você também pode instalar drivers especiais para que o Windows possa ler extsistemas de arquivos (e, portanto, poderá ler todo o cartão SD), como, ext2fsdmas provavelmente não vale a pena.


Como a imagem terá o mesmo tamanho do seu cartão SD, você poderá compactá-la. Isso pode ser conseguido simplesmente usando sua ferramenta de compactação favorita, como gzip7zip, WinZip, WinRar ...

usuário13
fonte
1
+1 em geral, embora rsyncvia sshprovavelmente fosse mais fácil. Além disso, para o código-fonte - como Mark Booth já foi dito - você deve absolutamente usar um DVCS
Tobias KIENZLER
1
Se meu cartão SD for corrompido, como instalaria esta imagem em um novo cartão SD?
Flipper
2
Seu link para o Win32 Disk Imager é disponibilizado sem downloads. Presumo que seja o mesmo que sourceforge.net/projects/win32diskimager ?
Yamikuronue 14/02
2
oh meu Deus, não consigo distinguir se "ler" nessa imagem significa "ler o arquivo de imagem" ou "ler a PARTIÇÃO E ESCREVER NO arquivo de imagem" .... o mesmo para "escrever" ... Esse gui precisa ser higienizado. Algo como "Image -> Device" e "Device -> Image" (ou uma alternativa melhor)
Olivier Dulac
4
Win32DiskImager parece ser capaz de lidar apenas com partições que o Windows reconhece. Eu tive pouca ou nenhuma sorte ao clonar cartões SD Noobs / Raspbian. Encontre este programa de freeware: hddguru.com/software/HDD-Raw-Copy-Tool . Ele funciona como um encanto para fazer um clone de byte a byte do cartão SD no Windows (eu o usei com o Win7 de 64 bits), independentemente do esquema e do conteúdo de particionamento.
techie007
156

Se você estiver executando o Linux, poderá usar o ddcomando para fazer um backup completo da imagem:

dd if=/dev/sdx of=/path/to/image

ou para compressão:

dd if=/dev/sdx | gzip > /path/to/image.gz

Onde sdxestá o seu cartão SD?

Para restaurar o backup, você reverte os comandos:

dd if=/path/to/image of=/dev/sdx

ou quando compactado:

gzip -dc /path/to/image.gz | dd of=/dev/sdx
Jivings
fonte
3
Eu recomendo o uso do gzip - fiz backup de algumas partições da área de trabalho hoje e uma partição de 20Gb foi salva em 8,9Gb.
AlexCalllain4
2
O bzip2 deve compactar ainda melhor e está disponível em todos os sistemas Linux. Nos sistemas Linux mais recentes, o xz deve compactar ainda melhor. Os descompactadores são bunzip2 e unxz, respectivamente.
Arne
4
@ Arne Eu não esperaria tanta diferença! Ainda assim, isso parece estar muito abaixo das minhas preocupações. (Btw, é legal quando você responde a um comentário com quase 1 ano de idade e recebe uma resposta em 2 minutos :))
yo '24 /
5
Não cometa o erro (como acabei de fazer) de deixar de fora o bs=1Mparâmetro ou algum parâmetro semelhante. O tamanho do bloco padrão de 512 bytes diminui o desempenho da cópia.
9189 Steven
1
@Arne Tentei usar o bzip2 agora e talvez seja apropriado fazer backup do meu cartão SD de classe 4, mas neste cartão SanDisk de classe 10 UHS 1 SanDisk de 8 GB (que foi de US $ 12 na semana passada), está chegando ao máximo uma Ivy Bridge Encadeamento da CPU e limitação da velocidade de leitura do cartão para 6 MB / s (o dd com Ctrl + T informa 4,2 MB / s). Isso não é ideal, porque eu posso usar o gzip com esta placa e lê-la em um ritmo muito mais rápido (dd reportando 18 MB / s). Concedido, se a maior parte do disco tiver espaço livre, a leitura durante esses trechos vazios será acelerada. Mas vou ter que ver qual é a diferença no tamanho do arquivo resultante.
Steven Lu
31

Além desses backups em nível de bloco, existem duas abordagens comuns para lidar com as fontes: arquivá-lo continuamente (1) ou usar o sistema de controle de revisão (2).

Vamos usar a linha de comando (qualquer terminal local ou conexão SSH com uma máquina Raspberry Pi), certo?

1. Arquivo

cd ~/projects
tar czvf your-raspberry-project-top-level-dir-v1.0.tgz \
         ./your-raspberry-project-top-level-dir 
scp your-raspberry-project-top-level-dir-v1.0.tgz \
         user@backup-host:/home/user/backups/

2. RCS (Git por exemplo)

cd ~/projects/your-raspberry-project-top-level-dir
make clean                          # Or clean it manually using rm (rm ./*.o ./*.pyc)
git init                            # Create new repo here
git add .                           # Add source files to the staging index
git status                          # Verify if it's OK
git commit -a -m "Initial import"   # Fix application's source changes
git add remote https://github.com/user/your-raspberry-project.git
git push -u origin master           # Sends the sources to your github repo
git pull && git push && git status  # Now origin/master is your tracking branch
okertanov
fonte
2
Também pode ser interessante notar que as pessoas podem configurar repositórios nus em outras máquinas da rede e enviar do Raspberry Pi para lá, em vez de precisar configurar uma conta no github, chaves ssh etc. e enviar para lá.
Mark Booth
2
Esse é um bom começo para a resposta real. O código precisa ser gerenciado sob controle de versão, se alguém quiser mantê-lo. O controle de versão permite rastrear alterações, entender o histórico de alterações, gerenciar diferentes ramificações (por exemplo, stable vs dev) e mesclar entre elas. Mas não é um backup em si. No entanto, basta fazer backup do repositório (por exemplo, a pasta .git do Git). Verifique fóruns, wikis, intercâmbios de pilha, etc. do Linux / Unix, para obter maneiras de fazer backup de pastas no Linux. Nota: Não considero o github como backup. E você não deseja publicar tudo no github!
Huygens
29

No Mac, você não deseja usar /dev/diskn. Em /dev/rdisknvez disso, você deve usar , onde n é o número que o sistema operacional usa para identificar seu cartão SD. Isso diminui o tempo necessário para copiar em uma quantidade enorme.

Portanto, para o processo ideal de backup em um Mac, recomendo fazer o seguinte:

Execute diskutil liste encontre o disco correspondente ao cartão SD do seu Raspberry Pi:

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            499.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk1
   1:             Windows_FAT_32                         58.7 MB    disk1s1
   2:                      Linux                         7.9 GB     disk1s2

Claramente /dev/disk1é o meu cartão SD de 8GB, o nome da partição Linux também é um pouco de pista.

No entanto, em vez de usar /dev/disk1com dd, você deve usar /dev/rdisk1o seguinte:

sudo dd if=/dev/rdisk1 of=/path/to/backup.img bs=1m

E para restaurá-lo, basta trocar os parâmetros if(arquivo de entrada) e of(arquivo de saída):

sudo dd if=/path/to/backup.img of=/dev/rdisk1 bs=1m

Ou, com gzip, para economizar uma quantidade substancial de espaço:

sudo dd if=/dev/rdisk1 bs=1m | gzip > /path/to/backup.gz

E, para copiar a imagem novamente no SD:

gzip -dc /path/to/backup.gz | sudo dd of=/dev/rdisk1 bs=1m

Para mais informações, consulte esta página wiki .

Alex Coplan
fonte
1
Acho que essa é a resposta mais eficiente e votei nela, obrigado @Alex Coplan.
bosch
No entanto, eu estava procurando por uma ferramenta GUI à prova de idiotas para o MacOS (como os usuários do Windows) e sem os riscos do dd, e encontrei o "SD Clone" da Two Canoes (no qual confio como usuário do WinClone). É bastante novo -2016- e caro (100 $ com um teste de duas semanas), mas parece ser voltado para o RasPi, então vou tentar agora e informá-lo em um novo comentário.
bosch
3
Ao lidar costas, dissocia o seu cartão SD se você receber a seguinte mensagem: "recurso ocupado"
Spipau
26

Você pode executar este comando no seu PC Linux com muito espaço:

ssh root@raspberrypi gzip -c /dev/mmcblk0 > img.gz

Como pré-requisito, você precisará ter gerado chaves .ssh e copiado a chave id_XXX.pubpara /root/.ssh/authorized_keys.

É possível ter problemas com o sistema de arquivos, pois é um backup ao vivo, mas se o seu Raspberry Pi não estiver muito ocupado, normalmente estará OK.

Provavelmente é mais rápido fazer a compactação no PC assim:

ssh root@raspberrypi dd if=/dev/mmcblk0 | gzip -c > img.gz
John La Rooy
fonte
1
ou com sudo 'ssh pi @ raspberry sudo dd se = / dev / mmcblk0 | gzip -c> raspberry.img.gz '
cupakob
e como referência para login sem senha, raspberrypi.stackexchange.com/a/1687/22603
Paolo
2
Também achei útil adicionar tamanho de bloco e, como estava disponível, usar o pv para verificar o progresso. ssh root@raspberry dd if=/dev/mmcblk0 bs=1M | pv | gzip -c > img.gz
Paolo
Esta é uma ótima resposta se você não deseja desmontar seu cartão SD e também funciona para o macOS. Aqui está a linha de comando que estou usando: ssh pi @ raspberrypi sudo dd if = / dev / mmcblk0 | xz -9 -e --threads = 4> sd.img.xz. Não requer a geração de chaves SSH dessa maneira. Ctrl-T pode ser pressionado para ver o progresso.
Aprenda OpenGL ES
Por que o gzip é preferível ao comando dd ?
IgorGanapolsky
18

Se você estiver usando o Windows:

  1. Faça o download do Win32 Disk Imager.

  2. Crie o caminho do arquivo que você deseja usar para salvar sua imagem. (Eu uso C: \ RasPi_Bkp)

  3. Execute o Win32 Disk Imager

  4. Navegue até o local do caminho do arquivo de backup e digite um nome de arquivo.

  5. Clique em salvar

  6. Verifique se o dispositivo mostrado na lista suspensa à direita do caminho do arquivo é o que você deseja fazer backup.

Imager de disco Win32 em ação

  1. Clique em "Ler"

  2. Esperar.

zenbike
fonte
1
Obrigado - apenas o trabalho. (Estranhamente, quando eu ligar o meu cartão SD no meu PC principal, o Windows 7 vai para BSOD Felizmente sua multa em outra máquina!).
Jon Egerton
Para qualquer um que tenha problemas com o Win32 Disk Imager como eu, tente o Rufus.
DavidB
9

Se seus programas estão todos no pi userid, não há realmente nenhuma razão para fazer backup de todo o sistema de arquivos, como está sendo sugerido. o que faço é apenas fazer backup do id único. Eu executo o comando:

tar -czf pi.tgz *

do diretório inicial do pi, que cria o arquivo pi.tgz, contendo todos os arquivos e diretórios contidos nele (excluindo arquivos ocultos). Em seguida, eu scp esse arquivo para outro computador linux, mas você pode enviá-lo por e-mail ou enviar para um local seguro, qualquer coisa que o coloque em outro computador.

Isso cria um arquivo muito menor para o seu backup.

Preocupado com todos os pacotes adicionais que você instalou ao longo do caminho? Crie um script que execute essas instalações novamente, caso seja necessário recriar seu cartão SD e mantenha-o no diretório inicial do pi em algum lugar. (Eu tenho um diretório ~ / bin para essas coisas). Tenha todos os comandos necessários para fazer a instalação para retornar à posição em que você deseja estar. Ele documenta suas alterações e permite que você crie rapidamente um novo cartão SD. Ele conteria comandos na forma de:

apt-get --assume-yes install apache2 mysqld mysql php5 php-pear

Comece com

apt-get update
apt-get --assume-yes upgrade

para que seu sistema também seja trazido para o nível atual antes de começar a adicionar seus pacotes.

Como isso estará no seu arquivo pi.tgz, você o terá quando precisar.

Robert Nix
fonte
Observe que, para o spin-off do Raspbmc, a atualização do apt-get aparentemente causa problemas. Foi o que aconteceu comigo e, aparentemente , é um problema conhecido .
Cristi Diaconescu
Isso também pode ser feito remotamente, ou seja: ssh [email protected] "sudo tar -cvp ~ / *" | xz -9 -e --threads = 4> raspbian.home.tar.xz
Aprenda OpenGL ES
8

Executo o Raspbian e uso o dd e o cron para fazer backups automáticos do meu cartão SD na minha unidade USB externa.

É uma solução realmente simples. Ele é executado uma vez por semana às 2 horas da manhã de uma segunda-feira e cria uma imagem do cartão SD.

Eu escrevi um script que encerra serviços como lighttpd e cron, para minimizar o risco de o cartão SD ser gravado no meio do backup, depois ele chama dd, antes de iniciar os serviços novamente quando o backup terminar.

Coloquei o script e algumas instruções no meu blog, http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

Martin O'Hanlon
fonte
1
Essa pode ser uma solução razoável se você não conseguir desconectar o cartão. No entanto, ddum sd?dispositivo com partições montadas não parece muito seguro.
yo
Você provavelmente está certo, mas eu não tive um problema.
Martin O'Hanlon 24/03
4

Para o Debian você pode usar dd e tar. Isso faria uma cópia completa do seu cartão SD e exigiria armazenamento externo (para o cartão SD), provavelmente USB ou unidade de rede montada.

dd if=/dev/sdd of=yourbackupfilenamehere.dd
tar zcvf yourbackupfilenamehere.dd.tar.gz

Com / dev / sdd sendo o local do seu cartão SD e ofo nome do arquivo de saída.

Forkrul Assail
fonte
Isto tem a limitação de necessitar de um lugar para gravar a imagem embora (que também é grande o suficiente para levar a imagem (s) Presumivelmente, isso também significa uma grande dados io através do hub usb -. Levaria um tempo?
Jon Egerton
É verdade, mas é meio que necessário na pergunta: "Quero uma imagem completa do cartão SD".
Forkrul Assail
1
Por que você cria um .tar.gzarquivo com o arquivo dd? Não seria melhor simplesmente executar gzipou bzip2no arquivo dd diretamente?
Anders
O que significa / dev / sdd ? Eu tenho /dev/mmcblk0p1e /dev/mmcblk0p2listei ...
IgorGanapolsky
4

Felizmente, o Raspberry Pi pode criar um backup independente do sistema operacional principal usado para acessar o Raspberry (Windows, Linux, Mac). dd, tar e rsync são ferramentas diferentes para criar backups no Linux. Todos esses tipos de backups podem ser criados pelo Pi em execução, desde que ele pare todas as tarefas ocupadas como mysql, smb, dlna, owncloud, seafile, apache e outros antes de criar o backup. Há uma pergunta diferente em que a abordagem é explicada em mais detalhes e uma possível solução é explicada aqui

framp
fonte
3

Se o seu Raspberry Pi estiver conectado a uma rede e você desejar fazer backups on-the-fly automáticos, provavelmente a maneira mais fácil é o Bittorent Sync - instalação muito fácil e execução sem problemas e estável no Pi e em muitas outras plataformas.

ir11
fonte
Eu só gostaria de anúncio que sincronização e backup são duas coisas diferentes
Pitto
3

Não há mais dd, sincronização, alcatrão, ..., copiadora de cartões SD amigável para iniciantes

A nova versão do Raspbian, chamada stretch, possui um aplicativo amigável para iniciantes, chamado SD Card Copier. Você não precisa usar as ferramentas do Linux, como dd, etc. Ele pode até copiar cartões grandes para cartões pequenos.

Como fazer isso

Você começa com o ícone do menu do aplicativo GUI RPi no canto superior esquerdo, vá para Acessórios e clique em SD Card Copier.

Tudo que você precisa fazer é alguns cliques dentro da GUI!

Depois de fazer o cartão SD de backup, você pode usar o Windows Disk Manager para ler a imagem do cartão em um arquivo do Windows e armazená-lo em qualquer diretório do Windows. Dessa forma, você precisa apenas de um cartão SD físico e armazena muitas versões de imagens no PC com Windows.

Obviamente, você pode simplesmente usar o cartão de backup como cópia de trabalho, para substituir o cartão original, que agora se torna seu cartão principal, e bloqueá-lo em um local seguro.

tlfong01
fonte
1

Ao pesquisar para criar uma imagem do meu cartão SD personalizado, encontrei este post. A melhor resposta aqui discute a criação de imagens do cartão SD, mas o que eu procurava exigia diminuir o sistema de arquivos para tornar a imagem a menor possível. Acabei criando minha própria ferramenta para fazer isso e descrevendo o processo em: https://raspberrypi.stackexchange.com/a/37899/32585

berto
fonte
1

Aqui estão três opções:

  1. Na versão mais recente do Raspbian, existe uma ferramenta que converte seu sistema operacional e arquivos em um arquivo .img que você pode colocar em um USB ou PC.

  2. Conecte seu cartão SD em um PC com Windows e inicie o Win32 Disk Imager (instale aqui se ainda não o tiver).

    Em (1), digite um nome de arquivo e um local para o arquivo de imagem. Em (2), selecione a letra da unidade do seu cartão SD. Em seguida, pressione 3. Isso faz o mesmo que a opção 1.

  3. Conecte um dispositivo USB ao seu Pi e copie todos os arquivos importantes.

Oliver
fonte
0

Eu criei um utilitário para fazer backup do seu raspberry pi se você é Linux. Isso também reduzirá a imagem do seu raspberry pi, para que você possa colocar o .iso em um cartão SD menor: RaspberryPiShrink

Isso executará um script python que o guiará pelo processo. Basta conectar seu cartão microSD ao seu computador Ubuntu, Linux Mint ou Debain e seguir as instruções do terminal.

Audstanley
fonte
-2

Estou usando o usbit para Windows. É a única ferramenta que posso encontrar que permitirá que você troque de um cartão SD maior para um menor. Tudo o que fiz foi marcar o seguinte na página de opções; Ignore verificações de tamanho e Trunque imagens de tamanho grande .

Isso me permitiu trocar minhas imagens OpenELEC e Xbian de um cartão SD classe 4 de 16 GB para um cartão classe 10 de 8 GB.

É MUITO mais fácil do que redimensionar tabelas de partição, etc.

Craig
fonte
2
Você já verificou os arquivos? Quero dizer com find -type f -exec md5sum {} \; > filelist.txt?
Avio
2
Não é garantido que funcione, pois os dados armazenados na segunda metade do disco são descartados. Além disso, a tabela de partição está corrompida.
Alex Chamberlain