Ça y est, votre projet est arrivé à son terme, tout tourne parfaitement. Vous souhaitez préserver votre réalisation ou vous devez équiper plusieurs Raspberry Pi ? Il est temps de réaliser une copie de sauvegarde de la carte SD. La méthode classique consiste à réaliser une image de la carte SD, puis de la recopier sur une carte de même taille. Et c’est là que ça se corse…
Actualisation d’un article sur rpi-clone paru en 2014. rpi-clone a continué d’évoluer et l’article méritait une mise à jour.
Au sommaire :
Cloner la carte SD du Raspberry Pi
Plusieurs possibilités en fonction de la taille de la carte SD de destination
- La carte SD sur laquelle vous souhaitez copier l’image a une taille largement supérieure à celle de la carte d’origine. Par exemple, la carte d’origine est une carte de 8 GB – 8 Giga Octets – et la carte de destination est une carte de 16 GB. Pas de souci dans ce cas, l’image tiendra largement sur la carte. Il suffira de choisir l’option expand-filesystem dans raspi-config pour que le système de fichiers s’étende à la totalité de la place disponible (voir configuration de Raspbian).
La carte SD sur laquelle vous souhaitez copier l’image a une taille égale à celle de la carte d’origine. Enfin… c’est ce qui est écrit dessus. Mais… tiens, ce n’est pas la même marque ! Alors là, vous avez une chance sur deux. Si vous avez tiré le bon numéro, la carte destinataire de l’image aura la même taille que l’image, ou mieux sera un tout petit peu plus grande. Pas de souci, l’image sera copiée sur la carte.
- Vous avez tiré le mauvais numéro ! La carte sur laquelle vous voulez transférer l’image de votre carte SD d’origine est bien marquée comme faisant la même taille mais….
Eh oui, il en manque… Et pourtant la carte Lexar et la Transcend utilisées sont deux HDSC de 4 Gb :-(. Essayez dans un premier temps de reformater la carte avec l’outil SD Formatter 4.0 du consortium Carte SD. Si ça ne suffit pas, continuez de lire cet article, la solution est proche !
- La carte SD de destination est volontairement choisie de taille plus petite. Vous avez mis au point votre projet sur une carte 16 GB et vous décidez de finaliser en produisant des cartes 8 GB qui seront largement suffisantes. Là encore soyez patient(e), la solution arrive !
rpi-clone
C’est en cherchant une solution à ce problème de transfert de carte SD quand une carte est trop petite pour recevoir l’image que j’ai abouti sur le script de Bill WILSON, déposé sur GitHub. La dernière version à ce jour est la version : 2.0.22
Objectif du script
La version 2 est une réécriture complète avec des capacités améliorées par rapport à l’original.
rpi-clone est un script shell qui permet de cloner un disque source Raspberry Pi (carte SD ou disque USB) en cours d’exécution vers un disque de destination qui sera amorçable. Les disques de destination sont des cartes SD dans un lecteur de carte USB, des clés USB ou des disques durs USB. Si vous avez booté sur une clé USB, il sera possible de cloner la clé sur une carte SD insérée dans le connecteur SD du Raspberry Pi.
Clonage par initialisation
Un clone par initialisation commence par copier l’image de la table de partition du disque source vers le disque de destination. C’est une commodité qui permet de partitionner le disque de destination afin d’éviter le partitionnement manuel. Les partitions sont ensuite clonées en faisant correspondre les systèmes de fichiers de destination aux types de systèmes de fichiers sources, puis en synchronisant les systèmes de fichiers avec les destinations. Les clones par initialisation sont utilisés lorsque les types de système de fichiers ou le nombre de partitions du disque source ne correspondent pas avec ceux de la destination. Un clone par initialisation peut également être forcé en ligne de commande. Une alternative à la copie de la table de partition source consiste à créer manuellement les partitions sur le disque de destination avec des systèmes de fichiers identiques à ceux des partitions sources.
Clonage par synchronisation
Si les types de systèmes de fichiers des partitions du disque source et du disque de destination correspondent, le clone ne démarre pas en recopiant l’image de la table de partition et en créant les systèmes de fichiers, mais monte simplement les partitions de destination correspondant à la source et synchronise les systèmes de fichiers. Après un premier clonage de disque, cette opération est une synchronisation incrémentielle qui ne copie que les fichiers qui ont changé dans le disque source. L’opération est beaucoup plus rapide qu’un clonage par initialisation.
Installation de rpi-clone

rpi-clone est disponible sur github et est téléchargé par clonage du dépôt. Il s’agit d’un script autonome et l’installation consiste simplement à copier le fichier dans un répertoire. Lorsqu’il est lancé, il vérifie les dépendances (les programmes nécessaires à son exécution) et propose d’installer les paquets nécessaires s’ils sont absents. Actuellement, rpi-clone ne sait installer que des paquets Debian avec apt-get.
Ouvrez un terminal et tapez les commandes suivantes :
1 2 3 |
git clone https://github.com/billw2/rpi-clone.git cd rpi-clone sudo cp rpi-clone rpi-clone-setup /usr/local/sbin |
Assurez-vous que /usr/local/sbin est dans votre $PATH en tapant la commande :
1 |
echo $PATH |
Dans la réponse il doit y avoir /usr/local/sbin comme ci dessous
1 |
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games |
Vous pouvez maintenant lancer rpi-clone sans argument pour vérifier que le logiciel est bien installé et qu’il vous affiche le mode d’emploi.
1 |
sudo rpi-clone |
et vous obtenez le mode d’emploi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
pi@raspberrypi:~/rpi-clone $ sudo rpi-clone No destination disk given. usage: rpi-clone sdN {-v|--verbose} {-f|--force-initialize} {-f2} {-p|--p1-size size} {-u|--unattended} {-U|--Unattended} {-q|--quiet} {-s|--setup host} {-e|--edit-fstab sdX } {-m|--mountdir dir } {-L|--label-partitions label} {-l|--leave-sd-usb-boot} {-a|--all-sync} {-F|--Force-sync} {-x} {-V|--version} {--convert-fstab-to-partuuid} {--exclude=PATTERN} {--exclude-from=FILE} -v - verbose rsync, list all files as they are copied. -f - force initialize the destination disk by imaging the booted disk partition structure. File systems are then synced or imaged. -f2 - force initialize only the first 2 partitions to the destination. So a multi partition USB boot can initialize clone back to a 2 partition SD card. -p size - resize destination partition 1 to 'size' bytes. For two partition initialize (when first clone to blank disk or using -f2 or -f). Use 'sizeM' for MiB size units. eg -p 256M equals -p 268435456 -u - unattended clone if not initializing. No confirmations asked, but abort if disk needs initializing or on error. -U - unattended even if initializing. No confirmations asked, but abort only on errors. -q - quiet mode, no output unless errors or initializing. Implies -u. -s host - add 'host' to args passed to script rpi-clone-setup and run it after cloning but before unmounting partitions. For setting clone disk hostname, but args can be what the script expects. You can give multiple '-s arg' options. -e sdX - edit destination fstab to change booted device names to new device 'sdX'. This is Only for fstabs that use device names. Used for setting up a USB bootable disk. -m dir - Add dir to a custom list of mounted directories to sync. Then the custom list will be synced instead of the default of all mounted directories. The root directory is always synced. Not for when initializing. -L lbl - label for ext type partitions. If 'lbl' ends with '#', replace '#' with a partition number and label all ext partitions. Otherwise, apply label to root partition only. -l - leave SD card to USB boot alone when cloning to SD card mmcblk0 from a USB boot. This preserves a SD card to USB boot setup by leaving the SD card cmdline.txt using the USB root. When cloning to USB from SD card this option sets up the SD card cmdline.txt to boot to the USB disk. -a - Sync all partitions if types compatible, not just mounted ones. -F - force file system sync or image for some errors. eg: If source used > destination space error, do the sync anyway. If a source partition mount error, skip it and do other syncs. -x - use set -x for very verbose bash shell script debugging -V - print rpi-clone version. Clone a booted file system to a destination disk which is bootable. The destination disk is a SD card (USB card reader) or USB disk 'sdN' plugged into a USB port. The 'sdN' name should be a full disk name like sda and not a partition name like sda1. rpi-clone works on a Raspberry Pi and can work on other systems. For a destination disk that shows up as sda, run: $ sudo rpi-clone sda Clones can be from a booted SD card or USB disk. For a description, example clone runs and example usage of above options, see the README.md at: https://github.com/billw2/rpi-clone A line logging a rpi-clone run is written to /var/log/rpi-clone.log. Download: git clone https://github.com/billw2/rpi-clone |
Utilisation de rpi-clone
Je vous propose ici la manipulation de base : Un système tourne sur la carte SD du Raspberry Pi et je souhaite le cloner sur une autre carte SD.
Lancez rpi-clone en super user (utilisez sudo) et passe en paramètre le nom de la carte SD tel qu’il apparait dans /dev. Normalement il s’agit de /sda ou /sdb ou /sdc. Si vous avez une clé USB ou autre chose branché en USB sur le Raspberry Pi, je vous conseille de tout enlever pour éviter les catastrophes !
pi@raspberrypi:~ $ ls /dev/sd*
/dev/sda /dev/sdb /dev/sdb1 /dev/sdc
ici la commande ls /dev/sd* renvoie la liste des disques/cartes connectés. Mon lecteur de carte SD a 3 connecteurs et ma carte micro SD est vue comme sdb car c’est le seul disque où il y a une partition sdb1. Il faudra vous adapter en fonction de votre configuration.
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdc1 /dev/sdd
où sda est mon disque SSD avec ses partitions sda1 et sda2 et ma carte SD dans le lecteur USB est en sdc avec sa partition sdc1. Si vous ne maitrisez pas cela il vaut mieux ne pas vous lancer dans l’aventure !
ATTENTION : Soyez bien certain(e) du nom de votre carte SD car l’opération de clonage va écraser sans espoir de retour toutes les données présentes sur la carte SD de destination… le blog framboise314 ne pourra pas être tenu pour respnsable des conséquences.
Les instructions à entrer sont
ligne 1 : sudo rpi-clone sdb (ou sda si votre disque est en sda)
ligne 4 : yes
ligne 19 : yes
ligne 40 : et à la fin la touche ENTREE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
pi@raspberrypi:~ $ sudo rpi-clone sdb Destination disk partition /dev/sdb1 is mounted on /media/pi/07D5-57FD. The clone cannot proceed unless it is unmounted. Do you want to unmount /media/pi/07D5-57FD? (yes/no): yes Booted disk: mmcblk0 16.0GB Destination disk: sdb 15.5GB --------------------------------------------------------------------------- Part Size FS Label Part Size FS Label 1 /boot 256.0M fat32 -- 1 14.4G fat32 -- 2 root 14.7G ext4 rootfs --------------------------------------------------------------------------- == Initialize: IMAGE partition table - partition number mismatch: 2 -> 1 == 1 /boot (51.0M used) : MKFS SYNC to sdb1 2 root (6.7G used) : RESIZE MKFS SYNC to sdb2 --------------------------------------------------------------------------- Run setup script : no. Verbose mode : no. -----------------------: ** WARNING ** : All destination disk sdb data will be overwritten! -----------------------: Initialize and clone to the destination disk sdb? (yes/no): yes Optional destination ext type file system label (16 chars max): Initializing Imaging past partition 1 start. => dd if=/dev/mmcblk0 of=/dev/sdb bs=1M count=8 ... Resizing destination disk last partition ... Resize success. Changing destination Disk ID ... => mkfs -t vfat -F 32 /dev/sdb1 ... => mkfs -t ext4 /dev/sdb2 ... Syncing file systems (can take a long time) Syncing mounted partitions: Mounting /dev/sdb2 on /mnt/clone => rsync // /mnt/clone with-root-excludes ... Mounting /dev/sdb1 on /mnt/clone/boot => rsync /boot/ /mnt/clone/boot ... Editing /mnt/clone/boot/cmdline.txt PARTUUID to use 79528d00 Editing /mnt/clone/etc/fstab PARTUUID to use 79528d00 =============================== Done with clone to /dev/sdb Start - 11:44:30 End - 12:52:36 Elapsed Time - 68:06 Cloned partitions are mounted on /mnt/clone for inspection or customizing. Hit Enter when ready to unmount the /dev/sdb partitions ... unmounting /mnt/clone/boot unmounting /mnt/clone |
Après une bonne heure (sur un Pi3 B+) le clone est disponible. Il faut juste appuyer sur la touche [ENTER] pour démonter sdb.
Eteignez proprement le Raspberry Pi (shutdown) enlevez la carte du connecteur de carte micro SD sur le Raspberry Pi et mettez la carte clonée à la place.
Redémarrez.
Si tout s’est bien passé, la carte SD que vous venez de créer est un clone parfait de la carte d’origine.
Conclusion
Depuis que je vous l’avais présenté, rpi-clone a bien évolué et est toujours d’actualité pour réaliser simplement un clone de sa carte SD vers une autre carte ou vers une clé USB. Il y a d’autres possibilités que vous pourrez explorer en lisant l’aide du script. Reportez-vous également à la page du script dans les sources ci-dessous.
Sources
Merci. Jusqu’à présent je faisais une image avec dd. Quelle est la différence avec Raspibackup : https://github.com/framps/raspiBackup ?
bonjour
je ne connais pas raspiBackup mais au vu du descriptif ça semble proche
cdt francois
Bonjour,
Je reviens sur ma réflexion qui a disparue, parce qu’il semble qu’un script attende 8 minutes pour qu’on remplisse le “formulaire” (?)
A la base il est nécessaire de copier l’image de la table de partition du disque source. Mais – détail d’importance – il existe une option permettant d’indiquer le nombre de partitions concernées et laisser de côté la (ou les) partition(s) dont on ne veut pas de copie.
Il aurait été intéressant de permettre l’inverse, c à d de pouvoir copier sur un support non vierge de partitions en intégrant la table de partition du disque de destination, en partie, avec des options, je ne sais comment en pratique.
Concrètement on peut imaginer une source SD de 8 Go et un disque dur de destination de 300 Go ou plus. Il faudrait pouvoir n’affecter qu’une partie du disque dur à la copie, surtout si des partitions existantes contiennent des données.
Bonjour
effectivement il y a un time out mais je n’ai jamais pu trouver où je pouvais modifier ce paramètre dans WordPress 🙁 désolé
Si vous avez des demandes de modifs vous pouvez ouvrir une issue sur le github du projet bill est assez réactif et la prendra peut etre en compte.
cdt
françois
je viens de le lancer pour copier ma sd sur un disque 5To, l’outil graphique du bureau plante lors du clone car le disque très gros doit être en GPT.
lors du début des opérations il mentionne bien ce problème au moins.
“Changing destination Disk ID …The size of this disk is 4,6 TiB (5000981077504 bytes). DOS partition table format cannot be used on drives for volumes larger than 4294966784 bytes for 512-byte sectors. Use GUID partition table format (GPT)”
je vous tiens au courant pour faire un lien avec l’article précédent de boot sur usb
bon ca ne marche pas par défaut mais on arrive à s’en sortir.
j’ai copier avec rpi-clone 16Go vers 5To (la copie par l’interface graphique plantait direct)
mais il crée une partition de 2To qu’on ne peut pas agrandir car MBR bloque à 2To
il faut GPT pour plus de 2To mais … GPT ne peut pas booter…
donc il faut une partition hybride.
https://wiki.gentoo.org/wiki/Hybrid_partition_table
une fois en hybride j’ai réduis la taille de la partition à 16Go pour creer avec gparted une partition secondaire du reste (en fait un disque de 5To c’est 4.5To…)
il a fallu modifier le cmdline.txt de la partition boot pour le partuuid car elles ont été modifiées dans l’opération.
ainsi que les partuuid dans etc/fstab de la partition contenant linux
partuuid récupérer avec la commande blkid
j’ai du coup un nextcloud qui tourne sur le pi4 avec de la place.
j’ai encore des choses à régler, nextcloud a encore du mal à accepter des upload de plus de 2Go (notamment mes images *.img de carte SD)
Bonjour Sylvain
Votre réponse intéressera les utilisateurs avertis
Vous êtes déjà dans la partie “avancée” de l’utilisation de rpi-clone 😀
Un débutant ne connait ni MBR ni GPT ni gparted, il n’ira pas chercher d’infos sur un forum tout ce qu’il veut c’est faire une copie de sauvegarde de sa carte SD
Cet article n’a que le but de lui permettre de faire sa copie et à ceux qui ne connaissent pas rpi-clone de le découvrir et d’explorer toutes ses possibilités
Après comme tous les programmes informatiques, rpi-clone ne fait pas tout et l’auteur doit faire des choix et des compromis…
cdt
françois
Bonjour à tous ,
Existe t il un moyen de faire une image disque de la carte sd sur un raspi en fonction ?
Bonjour
c’est justement le but de rpi-clone
Je n’ai pas vu l’option pour enregistrer sous un format image sans passer par un support physique.
Hello,
Moi j’ai le soucis suivant :
Lorsque je fait :
pi@raspberrypi-184:~ $ ls /dev/sd*
j’obtiens :
ls: impossible d’accéder à ‘/dev/sd*’: Aucun fichier ou dossier de ce type
bonjour Doudy
si c’est une Raspbian ça devrait fonctionner
essayez
cd /dev
ls
qu’est ce que ça donne ?
si ça donne une liste tapez ensuite
ls sd*
Hello !
Meme soucis que le post plus haut. Aucun sda ou sdb dans le /dev
en faisant un df j’ai le /dev/root qui est ma carte SD
avec un fdisk -l elle apparait comme suit :Disk /dev/mmcblk0
root@raspi:/# ls /dev/sd*
ls: impossible d’accéder à ‘/dev/sd*’: Aucun fichier ou dossier de ce type
root@raspi:/dev# ls sd*
ls: impossible d’accéder à ‘sd*’: Aucun fichier ou dossier de ce type
J’ai en projet de passer de la SD vers un disque rotatif (en usb 3) mais suis un peu bloquer du coup 😀
Distrib : Raspian lite 5.10.2-v7l+ #1385 SMP Wed Dec 23 11:56:36 GMT 2020 armv7l GNU/Linux
Rien d’autre..
Lorsque je clique sur le lien pour la confirmation de la demande, j’ai le message suivant :
Erreur 404 – Error : File Not Found – fichier introuvable
Lien : : https://www.framboise314.fr/comment-subscriptions?srek=47d0aad573a6a737b099f6559a864af0&srk=6ede6dccde3d7cdb7fe2b6c054cfc250&srp=35168&sra=c&srsrc=e&confirmation_email=y&post_permalink=https://www.framboise314.fr/dupliquez-la-carte-sd-de-votre-raspberry-pi-avec-rpi-clone/
Bonjour Doudy
j’utilise le plugin Subscribe to Comments Reloaded
pour la gestion des abonnements aux messages. Il est à jour, j’ai essayé de le supprimer et de le réinstaller, de le désactiver et de le réactiver mais le problème subsiste
il pourrait y avoir un conflit avec un autre plugin mais je n’ai vraiment pas le temps de tout réinstaller un à un pour trouver le souci
je n’ai pas de solution à ce problème pour le moment (https://wordpress.org/support/topic/confirmation-link-for-subscription-ends-in-404-page/)
j’ai alerté l’auteur du plugin
désolé
cdt
françois
Bonjour,
J’ai toujours utilisé SD Card Copier du Raspi
Encore dernièrement, petit script python pour lire des BME280 sur le réseau (filaire et WiFi)
Développement sur un PI4 sous Buster
3 copies sur des SD (uniquement des ScanDisk de 16 Go)
Une SD dans RPI2B en filaire
2 SD dans des PI Zero W en WiFi
Et c’a tourne sans problèmes en SSH
bonjour
oui mais piclone (SD Card Copier) fonctionne en mode graphique uniquement
rpi-clone est en mode ligne de commande
cdt
françois
Bonjour à tous,
Très intéressant ce rpi-clone pour la ligne de commande.
Pour ma part recherche un programme ou script équivalent mais qui créerait un clone de la carte SD vers un emplacement réseau (partage Windows SMB ou unix NAS) et au format win32diskimager (.img).
Toujours en ligne de commande bien évidement… mes projets tournent sous raspbian lite.
Si vous avez des infos je suis preneur.
Cdt
Fred
Bonjour à tous, je cherche de mon côté à faire une clonage en mode copie incrementielle d’un ssd d’un Pi4 en cours d’exécution sur un ssd d’un autre pi3b+ situé sur le même réseau. Savez-vous comment faire ce type de manip avec Rpi-clone ? Merci pour votre aide 🙏
Bonjour,
Existe t’il une solution de clonage a chaud qui ferrait la copie sur un emplacement réseau, supprimerai les dossiers de cache et zipperai le tout :D.
Oui je sais j’en demande beaucoup 😀
Bonjour,
Merci pour ce tuto très utile qui m’a permis de résoudre un problème… et immédiatement généré une nouvelle question…
Je m’explique j’ai un pi4 qui tourne sur SSD connecté en USB ; pas d’écran donc toutes les manips se font en ssh. J’ai programmé une mise à jour complète du pi4 toutes les semaines
1. Je fais ma sauvegarde initiale sur une clef USB. tout se passe très bien.
2. je débranche la sauvegarde
3. je rebranche la sauvegarde le pi4 plante je suis obligé de faire hard reboot.
je suppose que le problème vient de l’automount du pi4 et qu’au branchement du support de sauvegarde le pi4 ne fait plus la différence entre le ssd et le support de sauvegarde… mais alors comment désactiver l’automount ? ou quel est la bonne manière pour procéder ? peut-être aussi que mon diagnostique est complètement faux et qu’il faut chercher ailleurs…
Pour l’instant mes recherches sont complètement infructueuses alors si vous avez une piste et/ou une solution… je prends
Bonne continuation à vous,
et encore merci pour vos tutos.
Bonjour
merci pour votre retour
effectivement le Pi4 (le Pi400 aussi) plantent souvent quand on connecte de l’USB à chaud 🙁
Pour le mount c’est le système qui décide et je ne sais pas non plus comment fixer cela
cdt
françois
ok merci 😉 je me sens moins seul
Samuel