this is sysadmin 101 - if you have a mountpoint that is at risk of running full by accident, either set a quota or have some way to allocate more storage from the underlying layer when needed. how you do that is filesystem/storage dependent, and PBS doesn't care about that part.
GC can only free things if it can run (it sounds like it couldn't in your case?) - the pending part is pending because it was not possible to determine for sure whether it's safe to remove, and re-checking that requires another GC run. runnig it does require a little bit of space - this is the case for almost any piece of software - allocating things like locks or tmpfiles is very very common (and for basic system operations, this is why the default settings will reserve some headspace for root-only usage when formatting a file system..).
if you are using ZFS, there are two ways to solve this:
- set quotas on all your dataset(s) in a way that ensures the pool can never run out of space (i.e., distribute all the available space up front)
- create a "reserve" dataset and set a reservation on it, but never write to it (you can then reduce the reservation to get "free" space for the rest of the pool)
you can combine both (e.g., set quotas on certain datasets that are prone to get out of hand, and also have a reserve dataset in case of an accident).