This is more interesting than my wireless problem. Because I no longer needed a / partition on my HDD, I wanted to extend my home partition. It isn't as dead-simple as back a decade ago. Back then, I would use fdisk to delete and recreate partitions and resize2fs to resize the file system.
Now I have layers upon layers of useful abstraction. I'm calling each something potentially inaccurate, and the tool I needed in brackets. (Those with wildcards match multiple tools with the same beginning.)
- ext4 file system (resize2fs)
- Logical volume (lv*)
- Volume group (vg*)
- Physical volume (pv*)
- partitions (fdisk)
At first I was almost a little annoyed at the apparent complexity, but it's actually straight forward. My drive is still divided into multiple partitions in a partition table. (/dev/sda1, /dev/sda2, /dev/sda3, etc; I have 8 for various reasons).
Physical volumes seem to correspond to those partitions, but mostly just the useful storage ones (e.g. I don't have them for EFI or swap partitions). pvcreate lets me define them.
The physical volumes are collected into volume groups. For example, /dev/sdb1 (my intended root) might be a part of "pantaloons-fedora-ssd" (if I named my machine pantaloons), and /dev/sda2 and /dev/sda4 might both be part of "pantaloons-fedora-hdd" (two large areas for my /home that I'd like to combine later, but which are currently separated by some other, annoying partition).
The volume group kind of looks like a single contiguous (!) entity (despite being a collection of disparate physical partitions). Then, I can define logical volumes atop the volume groups.
I can have both / and swap as separate logical volumes atop "pantaloons-fedora-ssd" (talk about cramped - maybe I don't want to hibernate after all), and have a single logical volume for /home atop the "pantaloons-fedora-hdd" volume group.
This is where things get a little trippy though. Where does the encryption happen?
For my root file system, it looks like it happens like:
partition /dev/sdb1 > LUKS > physical volume > EXT4 file system
For my home file system, it looks like this:
partitions /dev/sda2,/dev/sda4 > two physical volumes > 1 volume group > 1 logical volume > LUKS > EXT4 file system
|disks||/dev/sdb (SSD)||/dev/sda (HDD)|
The home partition and its LUKS (using cryptsetup/dm-crypt) was originally configured through whichever tool Fedora provided years ago (preupgrade? fedup? anaconda?), while the configuration on my SSD was what was recommended in F22.
Basically, I had to (with steps that actually increase space emboldened):
- define a new partition in the partition table,
- define a new Physical Volume (PV) over top it,
- extend my Volume Group (VG) to include the new Physical Volume
- unmount the file system I was going to extend,
- close its LUKS setup
- extend the file system's Logical Volume (LV) overtop the new space in the Volume Group
- reopen the LUKS setup
- resize the LUKS setup (are these two out of order? hope not!), and
- resize the Ext4 partition
- # cfdisk, to delete the old root on the /dev/sda4 partition and recreate it
- # pvcreate /dev/sda4 (creates a physical volume)
- # vgextend pantaloons-fedora-hdd /dev/sda4 (add the PV into the VG increasing its overall size)
- make sure /home isn't mounted
- # fsck.ext4 -C 0 -f /dev/mapper/luks-BAR (let's make sure the inodes are fine on our file system before messing with it)
- # cryptsetup luksClose luks-BAR (close LUKS while we change the underlying LV)
- # lvextend -L +61G /dev/pantaloons-fedora-hdd/home (increase the size of our LV within the VG)
- # lvextend -L +242M /dev/pantaloons-fedora-hdd/home (catch a little more space)
- there is probably a way to just extend it to the full space available, maybe read the man page
- # cryptsetup luksOpen /dev/pantaloons-fedora-home luks-BAR
- # cryptsetup resize luks-BAR (resizing the LUKS setup)
- # fsck.ext4 -C 0 -f /dev/mapper/luks-BAR (for paranoia maybe)
- # resize2fs /dev/mapper/luks-BAR (finally, let's resize our Ext4 file system)