If you’re running one of the macOS High Sierra betas and have tried to resize your APFS container without success, I’ve got the answer for you. You can’t currently do this from Disk Utility, so it requires some Terminal geekery. Of course, if you haven’t already migrated over to APFS, you might want to look into that first, with the help of John Martellaro.
Finding Where Your APFS Partition Lives
I’m confident that by the time High Sierra ships in the fall, this will be possible within the graphical Disk Utility. It’s a pretty common requirement, so Cupertino is bound to incorporate it more easily into the final version of macOS 10.13 High Sierra. For now, though, the Terminal is our friend.
To do this, you’ll need to open Terminal from Applications -> Utilities. Once there, issue this command to find out where your APFS container lives:
My output looks like the image below. Note that my APFS container is named /dev/disk1, and resides at /dev/disk0s2.
Resizd Your APFS Container (the Hard Way)
Let’s talk about shrinking the APFS partition, or container, first. You use the same command for both processes, but you might be likely to want to reduce the size of your APFS partition first, perhaps to install another operating system on your Mac. To shrink my 1TB APFS container to 750GB, I’d issue the following command in Terminal:
sudo diskutil apfs resizeContainer disk0s2 750g jhfs+ Extra 250g
That command would resize the APFS container from 1TB to 750GB, also creating a 250GB journaled HFS+ partition with the freed space. We need to use sudo here, to take administrative privileges over the Terminal session.
I could have also issued the command like this, and diskutil would automatically determine the size for my new partition:
sudo diskutil apfs resizeContainer disk0s2 750g jhfs+ Media 0b
The output of the command will look something like this:
I could also create multiple partitions, using a command like this:
sudo diskutil apfs resizeContainer disk0s2 750g jhfs+ Media 200g FAT32 Windows 50g
Note that in my case, I could replace disk0s2 with disk1 for either command, since my APFS container is located at disk1. The diskutil command automatically locates the physical store for my APFS container, and resizes things accordingly.
Shrinking Your APFS Partition to Reclaim Space
If you decide you want to reclaim that space into your APFS container, you can do that using diskutil as well. First, though, you have to delete the JHFS+ or other partition and set it as free space on your hard drive. This command will do the trick, assuming your volume is named disk0s3.
sudo diskutil eraseVolume "Free Space" %noformat% /dev/disk0s3
Next, resize your APFS container:
diskutil apfs resizeContainer disk0s2 0
In this case, diskutil automatically claims all available free space on the physical storage device, but you can also replace 0 with a size value.
Yes, You Can Resize Your APFS Container on a Live Filesystem
Before you ask, yes, I’ve verified this process works even when you’re booted into High Sierra on that APFS volume. You will notice that your Mac becomes unresponsive for a time, as it verifies the filesystem, checks everything out, and then carries out the resize operation. For the best file integrity, though, I’d probably recommend doing this from Recovery Mode. I live on the bleeding edge, though, and did this from the live filesystem without any data corruption.