It’s a good practice to back your Raspberries up regularly, especially if you’re using cheapo cards. However, I also don’t want to stop the box (it’s running my home DNS).
I could solve that on Raspbian with something like this (
doom is the hostname):
ssh doom "sudo dd if=/dev/mmcblk0 bs=16M | pigz -" | dd of=doom-$(date +%Y-%m-%d-%H%M).iso.gz
This produces a compressed image of the card, e.g.
doom-2022-01-08-1845.iso.gz. I opted for
pigz for compression, to parallelize things a little bit (packing the image requires a lot of CPU and is usually a bottleneck).
To verify the backup is correct, we can mount the image locally (e.g. extract & run
hdiutil mount doom-2022-01-08-1845.iso on macOS). Restoring it to a new SD card is possible with
dd again, just as described in the usual Raspberry Pi preparation guides.
Make sure to set the correct block device. In my case, I dump the whole card (i.e. the
mmcblk0 device), but copying a partition (e.g.
/dev/mmcblk0p2) is also an option. However, the latter could complicate things for you if you want to restore the image with a plain
dd, so I recommend dumping the whole device.
Also, keep in mind this image is unencrypted. Don’t forget to encrypt your backups!