Clone the Raspberry boot disk
Updated 2024-02-20 !
A very nice way to fix a backup is to make a copy, bootable, of the actual SD card You are using on the Raspberry Pi(RPi). This will be done even when the RPi is up and running !
This application can also be used to make a bootable SSD or USB drive !!
You clone from the command line so You don't need the standard GUI, Pixel, and the "SD card copier" function.
It is also possible to set up a a scheduled job, cronjob explained later, which for example makes a clone every night at 1 o'clock.
Check SD
Install
Run the script
Manual clone
Execute the clone script with
sudo rpi-clone sda -f
(The USB could be assigned another name than "sda", so use the name You got earlier) and something like this will appear
Answer with yes and type a label for the destination SD card
Automated clone
To add an automated setup, from a command line, type
crontab -e
If it's the first cronjob You are adding, something like this will appear
where You select the editor You want to use.
On the last line add
0 1 * * * sudo bash rpi-clone sda -q
and exit. This means that a new clone will be made every night at 1 o'clock
Clone alternative
With GUI installed use the standard
"Accessories => CD Card Copier" found in the RPi meny. (If you
don't use RPi OS lite)
Failed to open device: ’sdcard’ (cmd 371a0010 status 1fff0001)
A very nice way to fix a backup is to make a copy, bootable, of the actual SD card You are using on the Raspberry Pi(RPi). This will be done even when the RPi is up and running !
This application can also be used to make a bootable SSD or USB drive !!
You clone from the command line so You don't need the standard GUI, Pixel, and the "SD card copier" function.
It is also possible to set up a a scheduled job, cronjob explained later, which for example makes a clone every night at 1 o'clock.
Check SD
You just need a USB SD card reader, with a SD Card, and then You plug the SD Card reader into a free USB port on the RPi.
Log on to the RPi and at a command line type
lsblk
Which checks if the SD Card is "accepted" and also which name it's assigned to. Could be "sda", "sdb" ......
On Github You can find additional info about the application. For example it handles that You are cloning from/to SD Cards with different sizes.
Log on to the RPi and at a command line type
lsblk
Which checks if the SD Card is "accepted" and also which name it's assigned to. Could be "sda", "sdb" ......
On Github You can find additional info about the application. For example it handles that You are cloning from/to SD Cards with different sizes.
Install
Run the script
curl https://raw.githubusercontent.com/geerlingguy/rpi-clone/master/install | sudo bash
If you would like to run installation manually check here.
Manual clone
Execute the clone script with
sudo rpi-clone sda -f
(The USB could be assigned another name than "sda", so use the name You got earlier) and something like this will appear
Booted disk: mmcblk0 15.9GB
Destination disk: sda 15.9GB
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot 43.5MB fat32 -- 1 43.5MB fat32 --
2 root 15.9GB ext4 cpy_stretch 2 15.9GB ext4 --
---------------------------------------------------------------------------
== Initialize: IMAGE mmcblk0 partition table to sda - forced by option ==
1 /boot (21.5MB used) : IMAGE to sda1 FSCK
2 root (2.0GB used) : RESIZE(15.9GB) MKFS SYNC to sda2
---------------------------------------------------------------------------
Run setup script : no
Verbose mode : no
-----------------------:
** WARNING ** : All destination disk sda data will be overwritten!
: The partition structure will be imaged from mmcblk0.
-----------------------:
Initialize and clone to the destination disk sda? (yes/no):
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot 43.5MB fat32 -- 1 43.5MB fat32 --
2 root 15.9GB ext4 cpy_stretch 2 15.9GB ext4 --
---------------------------------------------------------------------------
== Initialize: IMAGE mmcblk0 partition table to sda - forced by option ==
1 /boot (21.5MB used) : IMAGE to sda1 FSCK
2 root (2.0GB used) : RESIZE(15.9GB) MKFS SYNC to sda2
---------------------------------------------------------------------------
Run setup script : no
Verbose mode : no
-----------------------:
** WARNING ** : All destination disk sda data will be overwritten!
: The partition structure will be imaged from mmcblk0.
-----------------------:
Initialize and clone to the destination disk sda? (yes/no):
Answer with yes and type a label for the destination SD card
Optional destination ext type file system label (16 chars max):
XX
Initializing
Imaging past the start of /boot partition 2.
=> dd if=/dev/mmcblk0 of=/dev/sda bs=1M count=50 ...
Resizing last partition to end of disk ...
Resize success.
Changing destination Disk ID ...
Delaying so partprobe can update /dev entries ...
=> fsck -p /dev/sda1 ...
=> mkfs -t ext4 -L XX /dev/sda2 ...
Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sda2 on /mnt/clone
=> rsync // /mnt/clone with-root-excludes ...
Mounting /dev/sda1 on /mnt/clone/boot
=> rsync /boot/ /mnt/clone/boot ...
Editing /mnt/clone/boot/cmdline.txt PARTUUID to use dee316b8
Editing /mnt/clone/etc/fstab PARTUUID to use dee316b8
===============================
Done with clone to /dev/sda
Start - 12:06:06 End - 12:12:36 Elapsed Time - 6:30
Cloned partitions are mounted on /mnt/clone for inspection or customizing.
Hit Enter when ready to unmount the /dev/sda partitions ...
unmounting /mnt/clone/boot
unmounting /mnt/clone
===============================
Initializing
Imaging past the start of /boot partition 2.
=> dd if=/dev/mmcblk0 of=/dev/sda bs=1M count=50 ...
Resizing last partition to end of disk ...
Resize success.
Changing destination Disk ID ...
Delaying so partprobe can update /dev entries ...
=> fsck -p /dev/sda1 ...
=> mkfs -t ext4 -L XX /dev/sda2 ...
Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sda2 on /mnt/clone
=> rsync // /mnt/clone with-root-excludes ...
Mounting /dev/sda1 on /mnt/clone/boot
=> rsync /boot/ /mnt/clone/boot ...
Editing /mnt/clone/boot/cmdline.txt PARTUUID to use dee316b8
Editing /mnt/clone/etc/fstab PARTUUID to use dee316b8
===============================
Done with clone to /dev/sda
Start - 12:06:06 End - 12:12:36 Elapsed Time - 6:30
Cloned partitions are mounted on /mnt/clone for inspection or customizing.
Hit Enter when ready to unmount the /dev/sda partitions ...
unmounting /mnt/clone/boot
unmounting /mnt/clone
===============================
In this case I cloned from/to 16 Gb SD Card with approx 2 Gb of
data.
Before you hit "Enter", to unmount, the destination can be checked, in another terminal window, with
Before you hit "Enter", to unmount, the destination can be checked, in another terminal window, with
ls -la /mnt/clone
Automated clone
To add an automated setup, from a command line, type
crontab -e
If it's the first cronjob You are adding, something like this will appear
no crontab for pi - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.tiny
Choose 1-3 [2]:
crontab: installing new crontab
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.tiny
Choose 1-3 [2]:
crontab: installing new crontab
where You select the editor You want to use.
On the last line add
0 1 * * * sudo bash rpi-clone sda -q
and exit. This means that a new clone will be made every night at 1 o'clock
Clone alternative
With GUI installed use the standard
"Accessories => CD Card Copier" found in the RPi meny. (If you
don't use RPi OS lite)
If not installed ? sudo apt install piclone
Remark
On one of my RPi 4 I suddenly couldn't boot from SD-card and got the message, on the monitor,
Failed to open device: ’sdcard’ (cmd 371a0010 status 1fff0001)
Googled a little and found that this could happen when the SD card slot broken. So how to fix it ?
I could do some soldering and exchange the broken slot but bought a fast USB 3 flash drive, cloned the SD card to the flash drive, inserted it in one of USB 3 ports and booted from that instead.

Comments
I am doing a copy of the SD card before I do changes and I am always using
SD Card Copier in Raspian. Never failed so far :-)
I have a question, my RPi4 boot with part boot on sdcard and after, the rootfs part is on a SSD.I'm waiting for native boot on RPi4 ;)
So today may it possible to use RPI Clone to clone my rootfs to a sdcard.
My rootfs is about 15Gb on my SSD and my SDcard is a 64Gb.
Thanx for this info!
When I make the cronjob, it will be saved with an not easy readable name.
It is saved in the "tmp" directory, which is not accessable.
Edit with crontab-e
Can I save it with an more readable name?
• Rpi3B+ regular running on a 16Gb stick => call it: “operation stick A”
• Back up SSD (yes indeed the same Kingspec) => call it: SSD KS.
• Back up method: Pyssel.
• First manual Back-up: January 26.
• Cronjob back up: every night at 3 o’clock.
• Test: January 29.
• Remove: Rpi “operation stick A “
• Start up with only SSD KS => OK, including actual data past 24 houre.
• Start up with only “operation stick A “ => OK, BUT NO actual data past 24 houre.
• This means the Rpi is not running on the “operation stick A” but is running on the Back up SSD KS???
Any idea how/what?
Thnx, Thomas
Found myself the solution due to my numeration in my post herefore ;-)
I have set the wrong sd* usb port.
Useful command to asure you select the right usb ports:
sudo lsblk -o UUID,NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL,MODEL
(thanks for your patience)
I used this to copy an image from microsdcard to M.2 Sata, as I was unable to simply burn to the M.2... Wouldn't complete boot, hung after the message random: crng initdone...
Using this most Excellent guide, I was able to make an exact copy of a bootable sd card to my preferred usb booting method using the M.2.
Just a note if someone has issues... it's easy to overlook.
Thx, just wonder what change you did?
First when booted with sdcard and the SSD connected I found out the PARTUUID with: ls -l /dev/disk/by-partuuid
Then I put that ID in place of what was already there in the fstab file.
Then shutdown pi and reboot. Now it boots from the SSD correctly :)
Before adding the line to the cron, I'm just wondering: if at a certain point I remove the destination USBadapted+SDcard (or for some reason it's not recognized by the OS), will sdb (in my case) point to a different physical disk? is there a risk to overwrite by xTB disks then?
eine IDEE ???
(sofern das geht???)
Post a Comment
Feel free to leave a comment ! ... but due to a lot of spam comments I have to moderate them. Will reply ASAP !