The Background
On my recent Arch install, I decided to create separate partitions for my root and home directories. Unfortunately, I'm a dummy and only allocated 20 GB for the root partition. As it turns out, that's not enough for a proper workstation setup so now I have to fix my mistake.
The Fix
My particular install involves two usb drives, one with the Arch boot partition and the other with a cryptographic key to unlock the hard drive in my laptop. So to get started, I remove the usb drive with the boot partition and replace it with another usb that holds the Arch live environment I originally used for the installation. This way, I can boot into the live environment, unlock my drive, and resize the partitions while they're not in use.
Decrypting the Drive
I used dm-crypt plain mode to encrypt the drive so the first step is to unlock it so I can see the partitions. That looks like this:
cryptsetup --cipher=aes-xts-plain64 --offset=0 --key-file=/dev/sdc --key-size=512 open --type plain /dev/sda cryptlvm
In the above code snippet, /dev/sdc is the usb drive containing nothing but my cryptographic key and /dev/sda is the drive I'm decrypting.
At this point, I can see my logical volume group which look something like this:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 400G 0 disk
└─cryptlvm 254:0 0 400G 0 crypt
├─MyVolGroup-swap 254:1 0 8G 0 lvm [SWAP]
├─MyVolGroup-root 254:2 0 20G 0 lvm /mnt
└─MyVolGroup-home 254:3 0 372G 0 lvm /mnt/home
At this point, I can hopefully use lvresize to reduce the size of my home partition and add that extra space to my root partition. So let's give that a go:
lvresize -L -20G --resizefs MyVolGroup/home
lvresize -l +100%FREE --resizefs MyVolGroup/root
It worked!
Surprisingly painless. And now my root partition is twice the size it used to be so I can install more packages without fear of running out of space.