Knowledge base

min-free-space

<spool>set by the Hub

The free space threshold below which the directory stops accepting messages
in the configuration this is a linemin-free-space 0inside the block <spool>
The same name 1:<signals><spool>— some of them are other settings, some are the same one
A safety fuse, not a setting

The default is 0, that is, there is no fuse.

The line stops accepting messages into this directory when free space on its file system drops below the threshold. As soon as space comes back, receiving resumes by itself — no intervention is needed.

On Unix the count is based on the space available to unprivileged users: the part of the file system reserved for the administrator is not included in this count.

The syntax requires a size multiplier: B, K, M, G or T.

Together with priority the line forms a layout of several directories: the priority decides which one is used first, and this threshold decides when it is time to move on to the next.

There is also an obsolete form of the same at the node level — spool-min-free-space.

The main trap is the 0 default. There is no fuse, and the directory accepts messages as long as there is a single byte left on the disk. After that, running out of space stops not receiving but the whole node: neither the spool, nor accounting, nor the log has anywhere to write.

The difference is significant. With a threshold the node answers the submitting side with a temporary refusal and keeps delivering what it has already accepted. Without a threshold it stops working entirely, and recovery has to be done by hand.

What the Hub does. It writes it — since August 29, 2026, with a value it calculates from the node’s disk: five percent, but no less than a gigabyte and no more than ten. On the fleet’s nodes this comes to 2 GB and 1 GB.

Why five percent. The threshold kicks in at about the same point where node monitoring already reports “bad” (95% used), while a human got a warning at 90%. The lower bound is needed for small nodes, the upper one so that a large disk does not reserve tens of gigabytes for nothing.

What this gives. The only node mechanism that heals itself: receiving stops, delivery continues, the queue shrinks, space is freed, receiving turns back on. Monitoring will warn during working hours — the threshold will trigger at night. Accounting records are protected too: with suppressed reports it is the only channel of information about delivery outcomes, and it lives on the same partition.

Recommended values

What to set. The threshold is calculated from what still has to work once receiving stops:

Value When
0 (default) never the right choice on a production node
1G–5G a shared partition: there must be enough space for accounting, the log and delivery of what has already been accepted
less the spool is on a separate partition with nothing else on it

As a guide, the remainder must be enough to deliver everything already in the queue and record it in accounting.

The 0 default, the mandatory multiplier, automatic resumption of receiving and the caveat about space for unprivileged users come from the manual, § 3.3.2.4. The breakdown of values is ours.
Example configuration
# fuse: receiving stops before the whole node runs out of space
<spool /var/spool/pmta>
    min-free-space 2G</spool>
Below the threshold the directory stops accepting messages, while delivery of those already accepted continues. When space comes back, receiving resumes by itself.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
▲

Common mistakes and problems

what people get wrong and how it ends3 mistakes▶

Leaving the vendor's zero on a production node

our experience

What it costsRunning out of space stops not receiving but the whole node: neither the spool, nor accounting, nor the log has anywhere to write. Recovery has to be done by hand, and some accounting records are lost forever.
How to spot itThe node has stopped working entirely, and the partition has zero free space.
How to do it rightSet a threshold with headroom for delivering what has already been accepted and for the accounting records about it.

Calculating the threshold from the partition size rather than from what else lives on it

§ 3.3.2.4

What it costsThe spool, accounting and the log often share one partition. A threshold calculated only for the spool will leave accounting without space — and information about outcomes will disappear exactly when it is needed most.
How to spot itReceiving has stopped, and accounting records are no longer being written.
How to do it rightCalculate the remainder for everything that writes to this partition, not only for the queue.

Writing a number without a multiplier

§ 3.3.2.4

What it costsThe multiplier is mandatory. The whole configuration is not applied, and the node stays on the previous one.
How to spot itThe configuration check reports an error in this line.
How to do it rightWrite 2G, not 2.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
Reference data
Syntax
min-free-space <size>
Values
a number with a mandatory multiplier B, K, M, G or T, or 0
Default
0 § 3.3.2.4
Applying
reload, no restart needed
Queue
also affects what is already in the queue
Where to write it
<spool>
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
The directive lives in <spool> and applies to one directory — more precisely, to its file system. There is no inheritance between directories; the obsolete node-level form set the same thing for all of them at once.
How to check on the node
The threshold is visible in the configuration, the actual space on the disk:
grep -n -A4 '^<spool' /etc/pmta/config
df -h /var/spool/pmta /var/log/pmta
Look at both partitions: if the spool and the log are on the same one, the threshold must leave space for both. A missing line means the vendor’s zero — there is no fuse.
In the Hub
Value
The Hub picks it itself — pace, warm-up stage, metrics
Cost of a mistake
reversible: harms only while it is set
Scenarios
Capacity planning · Prepare a node for sending