[TrueNAS CE 25.10] Apple Time Machine Shares: One Multi-User Share, or Separate Shares for Each Mac Using Time Machine?

Reference: Adding a Basic Time Machine SMB Share | TrueNAS Documentation Hub

In the above tutorial:

The latest maintained Mac OS versions allow setting the maximum Time Machine backup size from the Mac OS UI. Setting this from the client side is generally recommended for better share flexibility and macOS coordination.

This is new compared to the last time I poked at using Time Machine over SMB, so that’s nice to see.

Previously, I would have set up separate datasets for each Mac’s Time Machine, and given each of them their own ZFS quota via TrueNAS itself. Left unchecked, Time Machine backups grow forever until they consume all available space, so a ZFS quota would be an effective way to make Time Machine think the share had a fixed size (e.g., 2 TB).

But, that problem is solved if I can cap the size of the Time Machine sparse bundle via Mac OS itself.

So, with that problem solved, using a single multi-Mac dataset and letting the Macs control the quotas seems like a good idea. The TrueNAS documentation seems to be telling us that it’s unnecessary to use ZFS quotas, not that it’s a good idea to mix Macs’ sparsebundles in the same dataset.

In any case, I’d be using TrueNAS’ feature that automatically takes a snapshot after every successful Time Machine backup, so the only downside I could think of with using a single, multi-client dataset is that the dataset’s snapshots would reflect a potentially confusing mixture of backups of different Macs. Except, that sounds like a considerably powerful downside.

Luckily, I haven’t had to find out yet, but that sounds like it could be confusing if you ever needed to roll back to a previous snapshot in a dataset/share containing Mac A and Mac B because a Time Machine sparsebundle for Mac A got corrupted.

Am I overcomplicating this, or am I indeed better off using one dataset per Time Machine share per Mac?

One dataset per share. Your instincts about rollback conflict issues are correct.

Separate means separate encryption, and different possible settings for sending off-site snapshots.

Removing one machine would free space right away.

And trusting client a to not steal space from client b is not a good idea either.

I’d keep them separate.

I’ve added this thread to a master list of ZFS/TrueNAS and Time Machine threads I’ve created, here: My Adventures with TrueNAS, ZFS, and Time Machine: A Master Post

I also ended up creating a single parent dataset to house all my child Time Machine datasets (one per client Mac). That way, I can set global options like compression, encryption, record size, etc. on a single dataset, and when I create a new child for a new Mac, it’s pretty much ready to go aside from setting up the ACL.

Because I wanted to test the officially supported method, I actually ended up using the built-in Time Machine Purpose preset to create an SMB share with all the presets that TrueNAS wants a Time Machine SMB share to have. I had it create the parent dataset, and enabled the option to have it automatically create a child dataset for each new Mac that connected, which gets me the one database per share arrangement discussed above for snapshots.

If you go this route, you’ll add the ACL for the new Mac to the parent dataset (I use the group associated with the new Mac’s Time Machine user, and give the group Modify permissions on the parent).

As soon as the new Mac connects to the Time Machine share for the first time when you’re setting up Time Machine on the new Mac, TrueNAS will create the child and auto-populate the ACL with, honestly, a bunch of really odd looking stuff that, according to the TrueNAS devs, is the platonic ideal of how the Samba devs want the ACL to look in this situation.

Behold. (Yes, I asked on the TrueNAS forum and the dev that manages this part of the system said this is how it’s supposed to look.)