¿Cómo hago una copia de seguridad de mi Raspberry Pi?

296

Llevo unas semanas escribiendo programas para mi Raspberry Pi (ejecutando Raspbian) y me gustaría asegurarme de proteger el trabajo que he realizado.

¿Cómo puedo hacer una copia de seguridad de los archivos que he creado?

¿Puedo simplemente conectar la tarjeta SD a mi PC con Windows (XP o 7) y copiarla en el disco duro u otra tarjeta SD?

Steve Robillard
fuente
66
Tengo PC con Ubuntu y Windows (XP y 7), pero espero que la mayoría de las personas estén interesadas en la respuesta de Windows. Editaré la pregunta para que quede claro.
Steve Robillard
77
rsync de Raspi a tu pc?
Alex L
41
Para el código, también puede considerar el uso de un software de control de versiones distribuido como gito hg, de esa manera, no solo tiene copias de su código en varios lugares, sino que también tiene el historial completo de cómo ha cambiado ese código.
Mark Booth
44
@ MarkBooth No veo por qué se necesita un DVCS sobre un VCS si solo estamos considerando poder recuperar el código más adelante. Diablos, es aún más fácil ya que usa números de revisión y no confirma hashes para identificar un estado en particular. Aprender un CVCS como Subversion no es una gran inversión de tiempo (como recuerdo ... aunque fue hace mucho, mucho tiempo). Sí, cambiar a Git fue un poco desconcertante en ese momento, pero nunca he mirado hacia atrás.
Steven Lu
1
Los comentarios no son un buen lugar para este tipo de discusión @StevenLu, deberíamos llevar esto a Raspberry Pi Chat .
Mark Booth

Respuestas:

293

Si desea preservar todos los datos, probablemente tendrá que crear una imagen de disco. Además, Windows no puede reconocer los sistemas de archivos típicos de Linux, por lo que probablemente ni siquiera podrá ver sus archivos cuando conecte su tarjeta SD.

La creación de una imagen de disco preservará no solo los archivos sino también la estructura del sistema de archivos y cuando decida actualizar su nueva tarjeta SD, podrá conectarla y funcionará.

Linux

En Linux, puede usar la ddherramienta estándar :

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

¿Dónde /dev/sdxestá tu tarjeta SD?

Mac

En Mac, también puede usar la ddherramienta estándar con una sintaxis ligeramente diferente:

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

¿Dónde /dev/rdiskxestá tu tarjeta SD?

(usar rdisk es preferible ya que es el dispositivo sin formato, más rápido)

Para saber qué disco es su dispositivo, escriba diskutil listen el símbolo del sistema; también, es posible que deba ser root; para hacer este tipo sudo -se ingrese su contraseña cuando se le solicite.

Ventanas

Opción 1

En Windows, puede usar el proceso inverso que usó al flashear la tarjeta SD.

Puede usar Win32 Disk Imager , que es la herramienta preferida para flashear una tarjeta SD de Foundation. Simplemente ingrese el nombre del archivo (la ubicación y el nombre del archivo de imagen de respaldo que se guardará), seleccione el dispositivo (la tarjeta SD) y presione leer:

Win32 Disk Imager

Por supuesto, también puede usar RawWrite , ddpara Windows o herramientas similares, el proceso es bastante similar.

opcion 2

Si no desea hacer una copia de seguridad de todo su sistema, sino solo archivos específicos, le sugiero que se conecte a su Raspberry Pi a través de SFTP y copie los archivos a su computadora local (puede usar el cliente WinScp ). Si tiene SSH habilitado, SFTP generalmente no requiere una configuración especial en el lado de Raspberry Pi.

Otra opción es copiar los archivos a un sistema remoto usando rsync .

También puede instalar controladores especiales para que su Windows pueda leer los extsistemas de archivos (y así podrá leer toda la tarjeta SD), por ejemplo, ext2fsdpero probablemente no valga la pena el esfuerzo.


Dado que la imagen tendrá el mismo tamaño que su tarjeta SD, es posible que desee comprimirla. Esto se puede lograr simplemente usando su herramienta de compresión favorita, como gzip7zip, WinZip, WinRar ...

usuario13
fuente
1
+1 en general, aunque rsyncvia sshprobablemente sería más fácil. Además, para el código fuente, como ya dijo Mark Booth , absolutamente debe usar un DVCS
Tobias Kienzler
1
Si mi tarjeta SD se corrompiera, ¿cómo instalaría esta imagen en una nueva tarjeta SD?
Flipper
2
Su enlace a Win32 Disk Imager aparece sin descargas disponibles. Supongo que es lo mismo que sourceforge.net/projects/win32diskimager ?
Yamikuronue
2
oh, no puedo distinguir si "leer" en esa imagen significa "leer el archivo de imagen" o "leer la PARTICIÓN Y ESCRIBIRLO en el archivo de imagen" ... lo mismo para "escribir" ... Esa interfaz gráfica de usuario necesita para ser desinfectado Algo así como "Imagen -> Dispositivo" y "Dispositivo -> Imagen" (o una mejor alternativa)
Olivier Dulac
44
Win32DiskImager parece que solo puede manejar particiones que Windows reconoce. He tenido poca o ninguna suerte con la clonación de tarjetas SD Noobs / Raspbian. Encontré este programa gratuito: hddguru.com/software/HDD-Raw-Copy-Tool . Funciona de maravilla hacer un clon byte por byte de la tarjeta SD en Windows (lo usé con Win7 de 64 bits), independientemente del esquema de partición y el contenido.
techie007
156

Si está ejecutando Linux, puede usar el ddcomando para hacer una copia de seguridad completa de la imagen:

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

o para la compresión:

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

¿Dónde sdxestá tu tarjeta SD?

Para restaurar la copia de seguridad, invierte los comandos:

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

o cuando está comprimido:

gzip -dc /path/to/image.gz | dd of=/dev/sdx
Jivings
fuente
3
Recomiendo encarecidamente el uso de gzip: hoy hice una copia de seguridad de algunas particiones de escritorio y una partición de 20 Gb se guardó en 8.9 Gb.
Alex Chamberlain
2
bzip2 debería comprimir aún mejor, y está disponible en todos los sistemas Linux. En los sistemas Linux más nuevos, xz debería comprimir aún mejor. Los descompresores para estos son bunzip2 y unxz respectivamente.
Arne
44
@Arne, ¡no esperaría tanta diferencia! Aún así, eso parece estar muy por debajo de mis preocupaciones. (Por cierto, es genial cuando respondes a un comentario hace casi 1 año y obtienes una respuesta en 2 minutos :))
yo '
55
No cometa el error (como acabo de hacer) de bs=1Momitir el o algún parámetro similar. El tamaño de bloque predeterminado de 512 bytes eliminará el rendimiento de la copia.
Steven Lu
1
@Arne Intenté usar bzip2 ahora, y tal vez sería apropiado si retrocediera desde mi tarjeta SD Clase 4, pero en esta tarjeta SanDisk 8GB Clase 10 UHS 1 (que fue de $ 12 la semana pasada) está maximizando un Ivy Bridge Hilo de CPU y limitación de la velocidad de lectura de la tarjeta a 6MB / s (dd con Ctrl + T reporta 4.2MB / s). Esto no es ideal porque puedo usar gzip con esta tarjeta y leerla a un ritmo mucho más rápido (dd reportando 18MB / s). De acuerdo, si la mayor parte del disco es espacio libre, la lectura durante esos tramos vacíos se acelerará. Pero tendré que ver cuál es la diferencia en el tamaño del archivo resultante.
Steven Lu
31

Además de esas copias de seguridad a nivel de bloque, existen dos enfoques comunes para tratar con las fuentes: archivarlo continuamente (1) o utilizar el sistema de control de revisión (2).

Vamos a utilizar la línea de comandos (cualquier terminal local o conexión SSH a una máquina Raspberry Pi), ¿verdad?

1. Archivo

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 ejemplo)

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
fuente
2
También vale la pena señalar que las personas pueden configurar repositorios desnudos en otras máquinas en su red y presionar desde su Raspberry Pi hasta allí, en lugar de tener que configurar una cuenta de github, claves ssh, etc. y presionar allí.
Mark Booth
2
Ese es un buen comienzo para la respuesta real. El código debe ser administrado bajo control de versiones si se quiere poder mantenerlo. El control de versiones permite realizar un seguimiento de los cambios, comprender el historial de cambios, administrar diferentes ramas (por ejemplo, estable frente a desarrollo) y fusionarse entre ellas. Pero no es una copia de seguridad per se. Sin embargo, uno simplemente necesita hacer una copia de seguridad del repositorio (por ejemplo, la carpeta .git para Git). Consulte los foros de Linux / Unix, wikis, stackexchanges, etc. para obtener formas de hacer copias de seguridad de carpetas en Linux. Nota: No considero github como copia de seguridad. ¡Y no quieres publicar todo en github!
Huygens
29

En Mac no quieres usar /dev/diskn. En su /dev/rdisknlugar, debe usar , donde n es el número que usa el sistema operativo para identificar su tarjeta SD. Esto disminuye el tiempo requerido para copiar en una gran cantidad.

Entonces, para el proceso de copia de seguridad óptimo en una Mac, recomendaría hacer lo siguiente:

Ejecute diskutil listy encuentre el disco correspondiente a la tarjeta SD de su 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/disk1es mi tarjeta SD de 8GB, el nombre de la partición de Linux también es una pista.

Sin embargo, en lugar de usar /dev/disk1con dd, debe usar /dev/rdisk1, así:

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

Y para restaurarlo, simplemente cambie los parámetros if(archivo de entrada) y of(archivo de salida):

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

O, con gzip, para ahorrar una cantidad sustancial de espacio:

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

Y, para copiar la imagen nuevamente en la SD:

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

Para obtener más información, consulte esta página wiki .

Alex Coplan
fuente
1
Creo que esta es la respuesta más eficiente y voté por ella, gracias @Alex Coplan.
bosch
Sin embargo, estaba buscando una herramienta GUI infalible para MacOS (como lo han hecho los usuarios de Windows) y sin los riesgos de dd y encontré "SD Clone" de Two Canoes (en el que confío ya que soy un usuario de WinClone). Es bastante nuevo -2016- y costoso ($ 100 con una prueba de 2 semanas) pero parece estar orientado hacia RasPi, así que lo intentaré en este momento y te lo haré saber en un nuevo comentario.
bosch
3
Al
responder
26

Puede ejecutar este comando desde su PC con Linux con mucho espacio:

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

Como requisito previo que tendrá que tener las claves generadas .ssh y el copiado id_XXX.puba /root/.ssh/authorized_keys.

Es posible tener problemas con el sistema de archivos ya que es una copia de seguridad en vivo, pero si su Raspberry Pi no está realmente ocupada, generalmente estará bien.

Probablemente sea más rápido hacer la compresión en la PC de esta manera:

ssh root@raspberrypi dd if=/dev/mmcblk0 | gzip -c > img.gz
John La Rooy
fuente
1
o con sudo 'ssh pi @ raspberry sudo dd if = / dev / mmcblk0 | gzip -c> raspberry.img.gz '
cupakob
y como referencia para el inicio de sesión sin contraseña, raspberrypi.stackexchange.com/a/1687/22603
Paolo
2
También encontré útil agregar tamaño de bloque y, como estaba disponible, usar pv para verificar el progreso. ssh root@raspberry dd if=/dev/mmcblk0 bs=1M | pv | gzip -c > img.gz
Paolo
Esta es una gran respuesta si no desea desmontar su tarjeta SD, y también funciona para macOS. Aquí está la línea de comandos que estoy usando: ssh pi @ raspberrypi sudo dd if = / dev / mmcblk0 | xz -9 -e --threads = 4> sd.img.xz. No requiere generar claves SSH haciéndolo de esta manera. Se puede presionar Ctrl-T para ver el progreso.
Aprenda OpenGL ES
¿Por qué es preferible gzip sobre el comando dd ?
IgorGanapolsky
18

Si está utilizando Windows:

  1. Descargar Win32 Disk Imager.

  2. Cree la ruta del archivo que desea usar para guardar su imagen. (Yo uso C: \ RasPi_Bkp)

  3. Ejecute Win32 Disk Imager

  4. Busque el punto de ruta del archivo de respaldo y escriba un nombre de archivo.

  5. Clic en Guardar

  6. Asegúrese de que el dispositivo que se muestra en el menú desplegable a la derecha de la ruta del archivo sea el que desea respaldar.

Win32 Disk imager en acción

  1. Haga clic en "Leer"

  2. Espere.

zenbike
fuente
1
Gracias, solo el trabajo. (Curiosamente, cuando conecto mi tarjeta SD en mi PC principal, ¡Windows 7 pasa a BSOD! Afortunadamente está bien en otra máquina.)
Jon Egerton
Para cualquiera que tenga problemas con Win32 Disk Imager como yo, pruebe con Rufus.
DavidB
9

Si todos sus programas están en el ID de usuario pi, realmente no hay razón para hacer una copia de seguridad de todo el sistema de archivos, como se sugiere. lo que hago es hacer una copia de seguridad de la identificación única. Ejecuto el comando:

tar -czf pi.tgz *

desde el directorio de inicio de pi, que crea el archivo pi.tgz, que contiene todos los archivos y directorios contenidos allí (excepto los archivos ocultos). Luego transfiero este archivo a otra computadora Linux, pero puedes enviarlo por correo electrónico o enviarlo por correo electrónico a algún lugar para guardarlo ... cualquier cosa que lo tenga en otra computadora.

Esto crea un archivo mucho más pequeño para su copia de seguridad.

¿Preocupado por todos los paquetes adicionales que ha instalado en el camino? Cree una secuencia de comandos que realice esas instalaciones nuevamente si necesita volver a crear su tarjeta SD y guárdela en el directorio de inicio de pi en alguna parte. (Tengo un directorio ~ / bin para tales cosas). Tenga todos los comandos que necesita para realizar las instalaciones para regresarlo a la posición en la que desea estar. Documenta sus cambios y le permite construir rápidamente una nueva tarjeta SD. Contendría comandos en forma de:

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

Comience con

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

para que su sistema también se actualice al nivel actual antes de comenzar a agregar sus paquetes.

Dado que esto estará en su archivo pi.tgz, lo tendrá cuando lo necesite.

Robert Nix
fuente
Tenga en cuenta que para la escisión de Raspbmc, aparentemente se sabe que la actualización de apt-get causa problemas. Lo hizo por mí, y aparentemente es un problema conocido .
Cristi Diaconescu
Esto también se puede hacer de forma remota, es decir: ssh [email protected] "sudo tar -cvp ~ / *" | xz -9 -e --threads = 4> raspbian.home.tar.xz
Aprende OpenGL ES
8

Ejecuto Raspbian y uso dd y cron para hacer copias de seguridad automáticas de mi tarjeta SD en mi unidad USB externa.

Es una solución realmente simple. Funciona una vez a la semana a las 2 am los lunes por la mañana y crea una imagen de la tarjeta SD.

Escribí un script que apaga servicios como lighttpd y cron, para minimizar el riesgo de que la tarjeta SD se escriba en el medio de la copia de seguridad, luego llama a dd, antes de comenzar los servicios nuevamente cuando la copia de seguridad ha finalizado.

Puse el script y algunas instrucciones en mi blog, http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

Martin O'Hanlon
fuente
1
Esta podría ser una solución razonable si no puede desconectar la tarjeta. Sin embargo, ddcrear un sd?dispositivo con particiones montadas no parece seguro.
yo '
Probablemente tengas razón, pero no he tenido ningún problema.
Martin O'Hanlon
4

Para Debian puedes usar dd y tar. Esto haría una copia completa de su tarjeta SD y requeriría un almacenamiento externo (a la tarjeta SD), probablemente una unidad de red o USB montada.

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

Con / dev / sdd es la ubicación de su tarjeta SD y ofel nombre del archivo de salida.

Forkrul Assail
fuente
Sin embargo, esto tiene la limitación de necesitar un lugar para escribir la imagen (eso también es lo suficientemente grande como para tomar la (s) imagen (es). Presumiblemente también significa que una gran cantidad de datos a través del concentrador usb, ¿tomaría un tiempo?
Jon Egerton,
Es cierto, pero es un poco obligatorio en la pregunta: "Quiero una imagen completa de la tarjeta SD".
Forkrul Assail
1
¿Por qué haces un .tar.gzarchivo del archivo dd? ¿No sería mejor simplemente ejecutar gzipo bzip2en el archivo dd directamente?
Anders
¿Qué significa / dev / sdd ? Tengo /dev/mmcblk0p1y /dev/mmcblk0p2la lista ...
IgorGanapolsky
4

Afortunadamente, Raspberry Pi puede crear una copia de seguridad de sí mismo que es independiente del sistema operativo principal utilizado para acceder a Raspberry (Windows, Linux, Mac). dd, tar y rsync son herramientas diferentes para crear copias de seguridad en Linux. El Pi en ejecución puede crear todos estos tipos de copias de seguridad siempre que detenga todas las tareas ocupadas como mysql, smb, dlna, owncloud, seafile, apache y otros antes de crear la copia de seguridad. Hay una pregunta diferente donde el enfoque se explica con más detalle y una posible solución se explica aquí.

framp
fuente
3

Si su Raspberry Pi está conectado a una red y desea copias de seguridad automáticas sobre la marcha, probablemente la forma más fácil es Bittorent Sync: instalación muy fácil y funcionamiento sin problemas y estable en Pi y muchas otras plataformas.

ir11
fuente
Solo me gustaría anunciar que la sincronización y la copia de seguridad son dos cosas diferentes
Pitto
3

No más dd, sync, tar, ..., copiadora de tarjetas SD amigable para principiantes

La nueva versión de Raspbian llamada stretch tiene una aplicación amigable para principiantes llamada SD Card Copier. No necesita usar las herramientas de Linux como dd, etc. Incluso puede copiar tarjetas grandes en tarjetas pequeñas.

Cómo hacerlo

Comienza con el ícono del menú de la aplicación GUI RPi en la esquina superior izquierda, vaya a Accesorios y luego haga clic en Copiadora de tarjeta SD.

¡Todo lo que necesita hacer es un par de clics dentro de la GUI!

Después de hacer la tarjeta SD de respaldo, puede usar el Administrador de disco de Windows para leer la imagen de la tarjeta en un archivo de Windows y almacenarla en cualquier directorio de Windows. De esta manera, solo necesita una tarjeta SD física y almacenar muchas versiones de imágenes en la PC con Windows.

Por supuesto, puede usar la tarjeta de respaldo como copia de trabajo para reemplazar su tarjeta original, que ahora se convierte en su tarjeta maestra, y guardarla en un lugar seguro.

tlfong01
fuente
1

Mientras buscaba crear una imagen de mi tarjeta SD personalizada, encontré esta publicación. La mejor respuesta aquí discute la obtención de imágenes de la tarjeta SD, pero lo que estaba buscando requería reducir el sistema de archivos para que la imagen fuera lo más pequeña posible. Terminé creando mi propia herramienta para hacer esto y resumir el proceso en: https://raspberrypi.stackexchange.com/a/37899/32585

berto
fuente
1

Aquí hay 3 opciones:

  1. En la última versión de Raspbian, hay una herramienta que convierte su sistema operativo y sus archivos en un archivo .img que luego puede colocar en un USB o en su PC.

  2. Conecte su tarjeta SD a una PC con Windows e inicie Win32 Disk Imager (instale aquí si aún no lo ha hecho).

    En (1) escriba un nombre de archivo y ubicación para el archivo de imagen. En (2), seleccione la letra de unidad de su tarjeta SD. Luego presione 3. Esto hace lo mismo que la opción 1.

  3. Conecte una memoria USB a su Pi y copie todos los archivos importantes.

Oliver
fuente
0

Creé una utilidad para hacer una copia de seguridad de tu raspberry pi si eres Linux. Esto también reducirá la imagen de su raspberry pi, por lo que puede colocar el .iso en una tarjeta SD más pequeña: RaspberryPiShrink

Esto ejecutará un script de Python que lo guiará a través del proceso. Simplemente conecte su tarjeta microSD en su computadora Ubuntu, Linux Mint o Debain, y siga las instrucciones de la terminal.

Audstanley
fuente
-2

He estado usando usbit para Windows. Es la única herramienta que puedo encontrar que te permitirá cambiar de una tarjeta SD más grande a una más pequeña. Todo lo que hice fue marcar lo siguiente en la página de opciones; Ignorar las comprobaciones de tamaño y truncar las imágenes de gran tamaño .

Esto me permitió cambiar mis imágenes OpenELEC y Xbian de una tarjeta SD de clase 4 de 16 GB a una tarjeta de clase 10 de 8 GB.

Es MUCHO más fácil que cambiar el tamaño de las tablas de particiones, etc.

Craig
fuente
2
¿Alguna vez has verificado los archivos? Quiero decir con find -type f -exec md5sum {} \; > filelist.txt?
Avio
2
No se garantiza que esto funcione, ya que los datos almacenados en la segunda mitad del disco se descartan. Además, la tabla de particiones está dañada.
Alex Chamberlain