Comment sauvegarder mon Raspberry Pi?

296

J'écris des programmes pour mon Raspberry Pi (qui exécute Raspbian) depuis quelques semaines maintenant et j'aimerais m'assurer de protéger le travail que j'ai effectué.

Comment puis-je sauvegarder les fichiers que j'ai créés?

Puis-je simplement brancher la carte SD sur mon PC Windows (XP ou 7) et la copier sur le disque dur ou sur une autre carte SD?

Steve Robillard
la source
6
J'ai des ordinateurs fonctionnant sous Ubuntu et Windows (XP & 7), mais je m'attendrais à ce que la plupart des gens s'intéressent à la réponse de Windows. Je vais modifier la question pour que cela soit clair.
Steve Robillard
7
Rsync de Raspi à votre PC?
Alex L
41
Pour le code, vous pouvez également envisager d’utiliser un logiciel de contrôle de version distribué tel que gitou hg, de cette manière, vous aurez non seulement des copies de votre code à plusieurs endroits, mais vous aurez également l’historique complet de la façon dont ce code a changé.
Mark Booth le
4
@ MarkBooth Je ne vois pas pourquoi un DVCS est nécessaire sur un VCS si nous envisageons simplement de récupérer le code ultérieurement. Heck, c'est encore plus facile, car vous utilisez des numéros de révision et non des hachages pour identifier un état particulier. Apprendre un CVCS comme Subversion ne représente pas un investissement de temps considérable (si je me souviens bien… bien que ce fût très très ancien il y a très longtemps). Oui, le passage à Git était un peu énervant à l'époque, mais je n'ai jamais regardé en arrière.
Steven Lu
1
Les commentaires ne sont pas un bon endroit pour ce genre de discussion @StevenLu, nous devrions en parler à Raspberry Pi Chat .
Mark Booth

Réponses:

293

Si vous souhaitez conserver toutes les données, vous devrez probablement créer une image disque. En outre, Windows ne peut pas reconnaître les systèmes de fichiers Linux classiques. Par conséquent, vous ne pourrez probablement même pas voir vos fichiers lorsque vous connecterez votre carte SD.

Créer une image disque préservera non seulement les fichiers mais également la structure du système de fichiers. Lorsque vous déciderez de flasher votre nouvelle carte SD, vous pourrez simplement le brancher et cela fonctionnera.

Linux

Sous Linux, vous pouvez utiliser l' ddoutil standard :

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

/dev/sdxest votre carte SD.

Mac

Sur Mac, vous pouvez également utiliser l' ddoutil standard avec une syntaxe légèrement différente:

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

/dev/rdiskxest votre carte SD.

(Utiliser rdisk est préférable car c'est le périphérique brut - plus rapide)

Pour savoir sur quel disque votre périphérique est en train de taper diskutil listà l'invite de commande, vous devez également être root; pour faire ce type sudo -set entrez votre mot de passe lorsque vous y êtes invité.

les fenêtres

Option 1

Sous Windows, vous pouvez utiliser le processus inverse utilisé lors du flashage de la carte SD.

Vous pouvez utiliser Win32 Disk Imager , l’outil préféré pour flasher une carte SD de la Foundation. Entrez simplement le nom de fichier (l'emplacement et le nom du fichier image de sauvegarde à enregistrer), sélectionnez le périphérique (la carte SD) et appuyez sur read:

Win32 Disk Imager

Bien sûr, vous pouvez également utiliser RawWrite , ddpour Windows ou des outils similaires, le processus est assez similaire.

Option 2

Si vous ne souhaitez pas sauvegarder l'ensemble de votre système, mais uniquement des fichiers spécifiques, je vous suggère de vous connecter à votre Raspberry Pi via SFTP et de copier les fichiers sur votre ordinateur local (vous pouvez utiliser le client WinScp ). Si vous avez activé SSH, SFTP ne nécessite généralement aucune configuration spéciale du côté de Raspberry Pi.

Une autre option consiste à copier les fichiers sur un système distant à l'aide de rsync .

Vous pouvez également installer des pilotes spéciaux pour que Windows puisse lire les extsystèmes de fichiers (et ainsi lire l'intégralité de la carte SD), par exemple, ext2fsdmais cela ne vaut probablement pas la peine.


Étant donné que l’image aura la même taille que votre carte SD, vous voudrez peut-être la compresser. Ceci peut être réalisé simplement en utilisant votre outil de compression préféré, tel que gzip7zip, WinZip, WinRar ...

utilisateur13
la source
1
+1 en général, bien que rsyncvia sshserait probablement plus facile. En outre, pour le code source - comme Mark Booth l’a déjà indiqué -, vous devez absolument utiliser un DVCS
Tobias Kienzler
1
Si ma carte SD était corrompue, comment installer cette image sur une nouvelle carte SD?
Flipper
2
Votre lien vers Win32 Disk Imager ne présente aucun téléchargement disponible. Je suppose que c'est la même chose que sourceforge.net/projects/win32diskimager ?
Yamikuronue
2
oh mon, je ne peux pas distinguer si "lire" dans cette image signifie "lire le fichier image" ou "lire la partition et l'écrire dans le fichier image" ... idem pour "écrire" ... Ce dont vous avez besoin être assaini. Quelque chose comme "Image -> Device" et "Device -> Image" (ou une meilleure alternative)
Olivier Dulac
4
Win32DiskImager semble ne pouvoir traiter que les partitions reconnues par Windows. J'ai eu peu de chance avec le clonage de cartes SD Noobs / Raspbian. Vous avez trouvé ce programme gratuit: hddguru.com/software/HDD-Raw-Copy-Tool . Cela fonctionne comme un charme pour faire un clone octet par octet de la carte SD dans Windows (je l'ai utilisé avec Win7 64 bits), quel que soit le schéma de partitionnement et le contenu.
techie007
156

Si vous utilisez Linux, vous pouvez utiliser la ddcommande pour effectuer une sauvegarde complète de l'image:

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

ou pour la compression:

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

sdxest votre carte SD.

Pour restaurer la sauvegarde, vous inversez les commandes:

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

ou lorsque compressé:

gzip -dc /path/to/image.gz | dd of=/dev/sdx
Jivings
la source
3
Je recommande fortement d'utiliser gzip - j'ai sauvegardé des partitions de bureau aujourd'hui et une partition de 20 Go a été enregistrée dans 8,9 Go.
Alex Chamberlain
2
bzip2 devrait compresser encore mieux et est disponible sur tous les systèmes Linux. Sur les systèmes Linux plus récents, xz devrait encore mieux être compressé. Les décompresseurs correspondants sont respectivement bunzip2 et unxz.
Arne
4
@Arne Je ne m'attendrais pas à une telle différence! Pourtant, cela semble être bien en dessous de mes préoccupations. (Btw, c'est cool quand tu réponds à un commentaire de presque 1 an et que tu reçois une réponse en 2 minutes :))
yo '24
5
Ne commettez pas l'erreur (comme je viens de le faire) d'omettre le bs=1Mparamètre ou un paramètre similaire. La taille de bloc par défaut de 512 octets annulera les performances de copie.
Steven Lu
1
@Arne J'ai essayé d'utiliser bzip2 maintenant, et il serait peut-être approprié que je sauvegarde depuis ma carte SD de classe 4, mais sur cette carte SanDisk 8 Go de classe 10 UHS 1 (qui coûtait 12 $ la semaine dernière), il y a un pont Ivy Bridge Processus du processeur et limitation de la vitesse de lecture de la carte à 6 Mo / s (dd avec Ctrl + T indique 4,2 Mo / s). Ce n’est pas idéal car je peux utiliser gzip avec cette carte et la lire plus rapidement (jj signalant 18 Mo / s). Certes, si la majeure partie du disque est de l’espace libre, la lecture au cours de ces étendues vides s’accélérera. Mais je vais devoir voir quelle est la différence dans la taille du fichier résultant.
Steven Lu
31

Outre les sauvegardes au niveau des blocs, il existe deux approches courantes pour gérer les sources: archiver les données en continu (1) ou utiliser le système de contrôle des versions (2).

Nous allons utiliser la ligne de commande (tout terminal local ou connexion SSH à une machine Raspberry Pi), non?

1. Archive

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 par exemple)

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
la source
2
Il est également intéressant de noter que les utilisateurs peuvent configurer des pensions nues sur d’autres machines de leur réseau et y transférer leur Raspberry Pi, sans avoir à créer un compte github, des clés ssh, etc.
Mark Booth
2
C'est un bon début pour la vraie réponse. Le code doit être géré sous contrôle de version si l'on veut pouvoir le maintenir. Le contrôle de version permet de suivre les modifications, de comprendre l'historique des modifications, de gérer différentes branches (par exemple, stable vs dev) et de les fusionner. Mais ce n'est pas une sauvegarde en soi. Cependant, il suffit de sauvegarder le référentiel (par exemple, le dossier .git pour Git). Consultez les forums Linux / Unix, les wikis, les échanges de pile, etc. pour trouver des moyens de sauvegarder des dossiers sous Linux. Remarque: je ne considère pas github comme une sauvegarde. Et vous ne voulez pas tout publier sur github!
Huygens
29

Sur le Mac, vous ne voulez pas utiliser /dev/diskn. Vous devez utiliser à la /dev/rdisknplace, où n est le numéro utilisé par le système d'exploitation pour identifier votre carte SD. Cela réduit considérablement le temps nécessaire pour copier.

Donc, pour un processus de sauvegarde optimal sur un Mac, je vous recommande de procéder comme suit:

Exécutez diskutil listet trouvez le disque correspondant à la carte SD de votre 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

Clairement, /dev/disk1c'est ma carte SD de 8 Go, le nom de la partition Linux est également un indice.

Cependant, au lieu d’utiliser /dev/disk1avec dd, vous devriez utiliser /dev/rdisk1, comme suit:

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

Et pour le restaurer, il suffit d’échanger les paramètres if(fichier d’entrée) et of(fichier de sortie):

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

Ou, avec gzip, pour économiser beaucoup d’espace:

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

Et, pour copier l'image sur le SD:

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

Pour plus d'informations, voir cette page wiki .

Alex Coplan
la source
1
Je trouve que c'est la réponse la plus efficace et j'ai voté pour elle, merci @ Alex Coplan.
Bosch
Cependant, je cherchais un outil graphique infaillible pour MacOS (comme les utilisateurs de Windows) et sans les risques liés à la DD. J'ai trouvé "SD Clone" dans Two Canoes (en qui je suis sûr car je suis un utilisateur de WinClone). C'est assez nouveau -2016- et cher (100 $ avec un essai de 2 semaines) mais semble être orienté vers RasPi, donc je vais essayer maintenant et vous laisser savoir dans un nouveau commentaire.
Bosch
3
Lors de la récupération, démontez votre carte SD si le message suivant
apparaît
26

Vous pouvez exécuter cette commande à partir de votre PC Linux avec beaucoup d'espace:

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

Avant de commencer, vous devez avoir généré les clés .ssh et copié le id_XXX.pubtout /root/.ssh/authorized_keys.

Il est possible qu'il y ait des problèmes avec le système de fichiers puisqu'il s'agit d'une sauvegarde en direct, mais si votre Raspberry Pi n'est pas vraiment occupé, tout ira bien.

Il est probablement plus rapide de faire la compression sur le PC comme ceci:

ssh root@raspberrypi dd if=/dev/mmcblk0 | gzip -c > img.gz
John La Rooy
la source
1
ou avec sudo 'ssh pi @ raspberry sudo dd if = / dev / mmcblk0 | gzip -c> raspberry.img.gz '
cupakob
et comme référence pour la connexion sans mot de passe, raspberrypi.stackexchange.com/a/1687/22603
Paolo
2
J'ai aussi trouvé utile d'ajouter une taille de bloc et, comme c'était disponible, d'utiliser pv pour vérifier les progrès. ssh root@raspberry dd if=/dev/mmcblk0 bs=1M | pv | gzip -c > img.gz
Paolo
Ceci est une excellente réponse si vous ne voulez pas démonter votre carte SD, et fonctionne également pour macOS. Voici la ligne de commande que j'utilise: ssh pi @ raspberrypi sudo dd if = / dev / mmcblk0 | xz -9 -e --threads = 4> sd.img.xz. Ne nécessite pas de générer des clés SSH de cette façon. Ctrl-T peut être pressé pour voir la progression.
Apprenez OpenGL ES
Pourquoi est-ce que gzip est préférable à la commande dd ?
IgorGanapolsky
18

Si vous utilisez Windows:

  1. Téléchargez Win32 Disk Imager.

  2. Créez le chemin du fichier que vous souhaitez utiliser pour enregistrer votre image. (J'utilise C: \ RasPi_Bkp)

  3. Exécuter Win32 Disk Imager

  4. Accédez à votre emplacement de chemin de fichier de sauvegarde et tapez un nom de fichier.

  5. Cliquez sur Enregistrer

  6. Assurez-vous que le périphérique indiqué dans le menu déroulant situé à droite de votre chemin de fichier est celui que vous souhaitez sauvegarder.

Imageur de disque Win32 en action

  1. Cliquez sur "Lire"

  2. Attendez.

zenbike
la source
1
Merci - juste le travail. (Bizarrement, lorsque je connecte ma carte SD à mon ordinateur principal, Windows 7 passe en mode BSOD! Heureusement que tout va bien sur une autre machine.)
Jon Egerton
Pour tous ceux qui ont des problèmes avec Win32 Disk Imager comme moi, essayez Rufus.
DavidB
9

Si vos programmes sont tous dans le nom d'utilisateur pi, il n'y a vraiment aucune raison de sauvegarder le système de fichiers entier, comme cela est suggéré. ce que je fais est de simplement sauvegarder l'identifiant unique. Je lance la commande:

tar -czf pi.tgz *

depuis le répertoire personnel de pi, qui crée le fichier pi.tgz, contenant tous les fichiers et répertoires qu'il contient (à l’exclusion des fichiers cachés). Je scp ensuite ce fichier sur un autre ordinateur Linux, mais vous pouvez le transférer ou l'envoyer quelque part par courrier électronique afin de le conserver en sécurité ... tout ce qui le transfère sur un autre ordinateur.

Cela crée un fichier beaucoup plus petit pour votre sauvegarde.

Préoccupé par tous les paquets supplémentaires que vous avez installés en cours de route? Créez un script qui effectuera à nouveau ces installations si vous devez recréer votre carte SD et conservez-le quelque part dans le répertoire personnel de pi. (J'ai un répertoire ~ / bin pour de telles choses). Ayez toutes les commandes nécessaires pour effectuer les installations afin de vous ramener à la position dans laquelle vous souhaitez être. Il documente vos modifications et vous permet de créer rapidement une nouvelle carte SD. Il contiendrait des commandes sous la forme de:

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

Commencez avec

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

afin que votre système soit également mis au niveau actuel avant de commencer à ajouter vos packages.

Puisque cela sera dans votre fichier pi.tgz, vous en aurez quand vous en aurez besoin.

Robert Nix
la source
Notez que pour le spin-off Raspbmc, apt-get mise à niveau est apparemment connu pour causer des problèmes. Cela a fonctionné pour moi et apparemment, c'est un problème connu .
Cristi Diaconescu
Cela peut aussi être fait à distance, par exemple: ssh [email protected] "sudo tar -cvp ~ / *" | xz -9 -e --threads = 4> raspbian.home.tar.xz
Apprenez OpenGL ES
8

Je lance Raspbian et utilise dd et cron pour effectuer des sauvegardes automatiques de ma carte SD sur mon lecteur USB externe.

C'est une solution très simple. Il fonctionne une fois par semaine à 2 heures du matin le lundi matin et crée une image de la carte SD.

J'ai écrit un script qui ferme des services tels que lighttpd et cron afin de minimiser le risque d'écriture de la carte SD au milieu de la sauvegarde. Elle appelle ensuite dd avant de reprendre les services une fois la sauvegarde terminée.

J'ai mis le script et des instructions sur mon blog, http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

Martin O'Hanlon
la source
1
Cela pourrait être une solution raisonnable si vous ne pouvez pas débrancher la carte. Cependant, ddutiliser un sd?périphérique avec des partitions montées ne semble pas très sûr.
Yo '24
Vous avez probablement raison, mais je n'ai pas eu de problème.
Martin O'Hanlon
4

Pour Debian, vous pouvez utiliser dd et tar. Cela ferait une copie complète de votre carte SD et nécessiterait un stockage externe (sur une carte SD), probablement un lecteur USB ou réseau monté.

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

Avec / dev / sdd étant l'emplacement de votre carte SD et ofle nom du fichier de sortie.

Forkrul Assail
la source
Cela a toutefois pour limite de nécessiter un emplacement pour écrire l'image (qui est également assez volumineux pour prendre l'image (les images). Vraisemblablement, cela signifie également une grande quantité de données via le concentrateur USB - prendrait un peu de temps?
Jon Egerton
C'est vrai, mais c'est un peu nécessaire dans la question: "Je veux une image complète de la carte SD."
Forkrul Assail
1
Pourquoi faites-vous un .tar.gzfichier du fichier DD? Ne serait-il pas préférable de simplement exécuter gzipou bzip2sur le fichier DD directement?
Anders
Que signifie / dev / sdd ? J'ai /dev/mmcblk0p1et /dev/mmcblk0p2énuméré ...
IgorGanapolsky
4

Heureusement, le Raspberry Pi peut créer une sauvegarde de lui-même, indépendante du système d'exploitation principal utilisé pour accéder à Raspberry (Windows, Linux, Mac). dd, tar et rsync sont des outils différents pour créer des sauvegardes sous Linux. Tous ces types de sauvegardes peuvent être créés par le Pi en cours d’exécution, à condition d’arrêter toutes les tâches occupées telles que mysql, smb, dlna, owncloud, seafile, apache, etc. avant de créer la sauvegarde. Il y a une question différente où l'approche est expliquée plus en détail et une solution possible est expliquée ici

foutaise
la source
3

Si votre Raspberry Pi est connecté à un réseau et que vous souhaitez des sauvegardes automatiques à la volée, le moyen le plus simple est probablement Bittorent Sync - une installation très simple et une exécution en douceur et stable sur le Pi et sur de nombreuses autres plates-formes.

ir11
la source
Je voudrais juste dire que la synchronisation et la sauvegarde sont deux choses différentes
Pitto
3

Pas plus effrayant dd, sync, tar, ..., copieur de carte SD convivial pour les débutants

La nouvelle version de Raspbian appelée stretch comprend une application très conviviale pour les débutants appelée SD Card Copier. Vous n'avez pas besoin d'utiliser les outils Linux tels que dd, etc. Il peut même copier de grandes cartes sur de petites cartes.

Comment faire

Vous commencez par l'icône du menu de l'application GUI RPi dans le coin supérieur gauche, accédez à Accessoires, puis cliquez sur Copieur de carte SD.

Il vous suffit de quelques clics dans l’interface graphique!

Après avoir créé la carte SD de sauvegarde, vous pouvez utiliser le Gestionnaire de disque Windows pour lire l’image de la carte dans un fichier Windows et la stocker dans n’importe quel répertoire Windows. De cette façon, vous n’avez besoin que d’une carte SD physique et stockez de nombreuses versions des images sur le PC Windows.

Bien sûr, vous pouvez simplement utiliser la carte de sauvegarde comme copie de travail pour remplacer votre carte d'origine, qui devient désormais votre carte maître, et la verrouiller dans un endroit sûr.

tlfong01
la source
1

En cherchant à créer une image de ma carte SD personnalisée, j'ai trouvé ce message. La meilleure réponse ici concerne la création d'image sur la carte SD, mais ce que je cherchais nécessitait une réduction du système de fichiers pour rendre l'image aussi petite que possible. J'ai fini par créer mon propre outil pour faire cela et décrire le processus à l' adresse : https://raspberrypi.stackexchange.com/a/37899/32585

berto
la source
1

Voici 3 options:

  1. Dans la dernière version de Raspbian, il existe un outil qui convertit votre système d'exploitation et vos fichiers en un fichier .img que vous pouvez ensuite placer sur une clé USB ou sur votre PC.

  2. Branchez votre carte SD sur un PC Windows et démarrez Win32 Disk Imager (installez-le ici si ce n'est déjà fait.)

    Dans (1), tapez un nom de fichier et un emplacement pour le fichier image. Dans (2), sélectionnez la lettre de lecteur de votre carte SD. Ensuite, appuyez sur 3. C’est la même chose que l’option 1.

  3. Branchez une clé USB sur votre Pi et copiez tous les fichiers importants.

Oliver
la source
0

J'ai créé un utilitaire pour sauvegarder votre Raspberry Pi si vous êtes Linux. Cela réduira également l’image de votre raspberry pi, vous pourrez donc mettre le .iso sur une carte SD plus petite: RaspberryPiShrink

Cela exécutera un script python qui vous guidera tout au long du processus. Connectez simplement votre carte microSD à votre ordinateur Ubuntu, Linux Mint ou Debain et suivez les instructions du terminal.

Audstanley
la source
-2

J'utilise usbit pour Windows. C'est le seul outil que je puisse trouver qui vous permette de passer d'une carte SD plus grande à une plus petite. Je n'ai fait que cocher ce qui suit sur la page des options; Ignorer les vérifications de taille et tronquer les images surdimensionnées .

Cela m'a permis de permuter mes images OpenELEC et Xbian d'une carte SD de classe 4 de 16 Go à une carte de classe 10 de 8 Go.

C'est BEAUCOUP plus facile que de redimensionner des tables de partition, etc.

Craig
la source
2
Avez-vous déjà vérifié les fichiers? Je veux dire avec find -type f -exec md5sum {} \; > filelist.txt?
Avio
2
Cela n’est pas garanti, car les données stockées dans la seconde moitié du disque sont supprimées. De plus, la table de partition est corrompue.
Alex Chamberlain