A while back, my installation of HomeAssistant broke down and that caused some minor inconveniences, like lamp switches no longer working. Nevertheless, I only this week looked into what happened and whether I could recover the setup. The pairing of the lamps and switches is not something that one wants to repeat unnecessarily.
The most likely cause turned out to be it: The microSD-card in the RaspberryPi4 broke. They are known to do that, unfortunately. So I bought a new one, pulled an image from the old card and after a bit of fiddling, I was able to restore a snapshot that I had taken not long ago. All good.
I bought an additional microSD out of concern for the same thing happening to the other RasPi, the one that runs this very website.
ssh berr "dd if=/dev/mmcblk0" > berry.img losetup --find --show -P berry.img
I had not known about the option -P before and it is exactly what I needed in this case: additional device files for the partitions within the disk image, not just a loop device for the iamge itself. So I could go on and check the filesystems' integrity:
fsck.vfat /dev/loop25p1 e2fsck -f /dev/loop25p2
Not surprisingly, there were several errors to be fixed in the main partition. After all, I was pulling the image from a running system that was continuously writing logs and stuff to the disk.
Then I tried to write the image to the new microSD-card.
dd if=berry.img of=/dev/mmcblk0 bs=2048
But this did not work because the new card was slightly smaller than the old one. Apparently 32GB are not what they used to be. Annoying!
So I had to figure out the number of sectors that remained on the new card for the Ext4-filesystem.
cfdisk /dev/loop25 cfdisk /dev/mmcblk0 # compare numbers in cfdisk resize2fs /dev/loop25p2 61083647s losetup --detach /dev/loop25 dd if=berry.img of=/dev/mmcblk0 bs=2048
Take out the card and re-insert.
fsck.ext4 /dev/mmcblk0p2 # passes the test now! cfdisk /dev/mmcblk0 # mark first partition as bootable
And that's it. I did not test whether the card actually boots up because it would cause unnecessary downtime. I am reasonably confident it will work, should the need arise.
I quite enjoyed this whole small exercise. It had been a while and one always learns something new in the process.