RPi & USB Root
Introduction
The idea here is to move most of the raspbian operating system to a USB stick/thumb drive/whatever you want to call it. This essentially moves all files except for /boot/ to that drive; i.e. the main OS is on the USB drive.
This is helpful in that many USB drives have better life then SD cards considering that there will be lots of read/writes. It also "feels" like Raspbian is more performant this way. Oh, and I've only tested with Raspbian and last did it March, 2019; other OSs may work, but no guarantee.
Table Of Contents
Slow Down
Before the steps though, sometimes one (me) goes off and does things without doing enough research. :-( It is not like I did anything bad to my Raspberry Pis; nor would anyone else if they looked through the information below. But one thing that might get folks where they want to be without as much headache is to permanently alter their Raspberry Pi 3B or 3B+ to boot directly from USB. This page is not for discussing the ramifications of that choice. There are lots of opinions as well as information out there; practice your research skills! :-)
About That OTP Bit
In the end, the steps below are really only needed for Raspberry RPi 2s or older, or with RPi 3s if you don't want to mess with the OTP bit. I successfully used the steps below on my RPi 2B and one of my RPi 3Bs. With the method below, I could not use the UUID on one of the RPi 3Bs. I converted to /dev/sdX# and using a USB drive for "root" was fine. I did not try it in RPi 3B+ as the OTP bit was set and I put the raspbian image on a USB drive. Also I could have investigated why the RPi 3B wasn't consistent with device path vs UUID, but I went the OTP path instead.
Oh, also, in March, I got a new kit with touchscreen & Raspberry Pi 3B+. That RPi 3B+ was already set with the OTP bit to allow for USB booting.
The Steps, Finally
Now onto the steps:
Install Raspbian as normal to the SD Card; make sure everything is up to date (see this page).
Shutdown & hook up the USB drive as the drive needs to be (power, etc.; this helps with older Pi's and older drives).
Power up, partition (fdisk) and format (mkfs.ext4) the USB drive. You might need to reboot after partitioning, pay attention to messages about what the kernel is using. BTW, if you are re-purposing a drive, you might run into issues if it was GPT. I've had the most success with drives that were GPT by removing partitions, writing the changes, and then changing the partition table to MBR. Don't forget to format after changing partition tables and/or creating partitions.
The next few steps are best done on another computer. So, on another computer, use fdisk to check which drive is which. Mount each one and make note of the everything. For instance, my sd-card is /dev/sdc, and the USB drive is /dev/sdd. I mounted partitions to /mnt/sdc1, /mnt/sdc2, /mnt/sdd1.
Rsync the sd-card's root to the USB drive. The command might be like sudo rsync -axv /mnt/sdc2/ /mnt/sdd1. Note the backslashes are very meaningful.
On the sd-card (probably on /dev/sdc1), backup /boot/cmdline.txt to something like /boot/cmdline.txt.sd.orig.
Look inside /boot/cmdline.txt for something like root=/dev/mmcblk0p2 or root=UUID=a1b2c3d4-bbbb-cccc-dddd-e5f6a1b2c3d4.
If you have the UUID part, use ls -hl /dev/disk/by-uuid/ to see the UUID for the USB drive.
Now change the root filesystem in the cmdline.txt file to new USB Drive. You might change something like root=/dev/mmcblk0p2 to something like root=/dev/sda1. Or something like root=UUID=a1b2c3d4-bbbb-cccc-dddd-e5f6a1b2c3d4 to root=UUID=<whatever was in by-uuid above>. You could change from /dev/sdX# to UUID=###, but that could result in a non-bootable pi (see above and below). Though I don't suggest it to be tried first, I had to change it from PARTUUID to /dev/ on a Raspberry Pi 2.
Last step is to edit fstab on the USB drive (probably /mnt/sdd1/etc/fstab). The same change of /dev/mmcblk0p2 or UUID=a1b2c3d4-bbbb-cccc-dddd-e5f6a1b2c3d4 to what you used above (without the root= part though).
Wrap-up
If you want to get fancy or just cleanup, the old root partition (probably /dev/mmcblk0p2) could be removed and the boot partition (probably /dev/mmcblk0p1) could be expanded.
Another BIG warning, if your setup uses /dev/mmcblk0p2, etc. then you may run into issues with using other USB drives. You should really consider switching to UUID to make sure the correcrt drive is used. But be comfortable moving the sd card and USB drive between systems. At some point you will probably have a un-bootable system. ;-) That is part of the fun though, right?
If you run into troubles, don't forget that the boot partition is usually FAT32, so Linux, Mac or Windows could be used. The USB drive is going to be ext4, so using Linux to edit its contents is the safest choice. I like Kubuntu and elementary OS.