How to move a root from SD card to external drive on Raspberry Pi
Of course you want your SD card to last longer. We can move a root off to an external drive.
We'll do that using Linux.
We need to copy files from a SD card's root onto a disk's partition and modify a
cmdline.txt file in a
/boot directory of a SD card.
1. Moving / to external drive
So, you already have your drive partitioned.
Let's create temporary directories for SD card's boot, root partitions and for disk's partitions according to how you partitioned it. I'll stick to simple case when we have everything on root.
Let they be
/mnt/hdd. SD's boot partition is mounted to modify
cmdline.txt file stored there.
To move files and links with all their attributes run
cp -a /mnt/sdroot/* /mnt/hdd.
-a option stands for archive, it's the same as
cp -dR --preserve=all, where
-d is the same as
-R option tells
cp to recursively go through all the subdirectories.
When I firstly made this article back in 2018 I didn't made
root= option to work with PARTUUIDs. But it should work nowadays.
/dev/sdXY would work fine, but I faced situation when my external drive suddenly reconnected during runtime. It happened with my laptop many times and never with a Raspberry Pi, but mind that anyway. In this case it gets reconnected with another letter, e.g. was
/dev/sda and became
cmdline.txt has boot options written in a single line. You need
root=/dev/mmcblk0p2 rw part to change to your disk's partition, e.g.
root=/dev/sda1 rw. And I found an option
rootwait=5 to be needful, it waits for 5 seconds before booting so your drives gets connected for sure.
Raspberry Pi boots from a FAT partition on a SD card mounted to
/boot directory. Following line must be in
/dev/mmcblk0p1 /boot vfat defaults 0 0
It should be already there, but it is always good to be sure.