Noob Question: Can't wrap my head about children allocation

Hi, people.

For context: I wanted a basic setup, so I built a pool with 4 disks (4 TB each), in RAIDZ1, 1 mirror and 3 striped. A theoretical size of 10.92 TiB, but I get only 10.444 TiB due to ZFS. All good there and expected.

However, because I didn’t understand permissions at first, I destroyed and made my datasets a few times before I understood it (I hadn’t put any data on it yet). However, I started to notice that the MiB of storage allocated to children datasets kept continuously increasing from a few KiB to MiB, to the point it got to this:

Total Allocation: 18.77 MiB
Data Written 139.5 KiB (1%)
Children 18.64 MiB (99%)

I even destroyed the pool wiped the disks and started over, but that number doesn’t reset or go down, and I can’t get an exact explanation of what it means. I even created a trueNAS virtual machine on my computer to experiment with 4 small disks to check if that constantly increasing number was real or if it was like that from the start, but I see the same behaviour. I have searched around and the only thing I see is that “maybe there’s an orphaned snapshot from one of the destroyed datasets”, but when I try to look for it on the trueNAS shell:

zfs list -t snapshot -r tank

I get “No datasets available”

If I run:

sudo zfs list -t snapshot

The only snapshots I have are the ones from the boot-pool (a 128 GB nvme disk)

So, maybe it’s just ZFS allocating space and doesn’t mean everything and it isn’t bad? But why doesn’t it reset even after a wipe? and what does it mean?
I get it maybe it takes effect when setting up quotas, but I didn’t set any (for my use case, I don’t need it).

Thanks in advance.

What does that mean?


What is the actual problem here?

For all we know, you could be seeing the System Dataset[1] writing data, which it does constantly.

Is your System Dataset on the boot-pool or your storage pool?

zfs list -t fs -o name,used | grep "\.system"

  1. The System Dataset is a TrueNAS thing. It’s not a feature of ZFS. ↩︎

Hello. First of all, thanks for answering.

What does that mean?

Apologies if I didn’t explain myself clearly enough. Again, noob question. What I was trying to say is that I built a pool with 4 disks (4TB each), configured as a single RAIDZ1 vdev. Again, simple first time setup, no multiple vdevs, nothing exotic. Apart from the 4 drives ( of 4 TB each) there’s a 128 GB system drive where I installed trueNAS.

Is your System Dataset on the boot-pool or your storage pool?

I would expect my System Dataset to be on the boot-pool. Running your command it gave me this:

tank/.system 21.4M
tank/.system/configs-ae32c386e13840b2bf9c0083275e7941 244K
tank/.system/cores 140K
tank/.system/netdata-ae32c386e13840b2bf9c0083275e7941 20.4M
tank/.system/nfs 163K
tank/.system/samba4 337K

Basically, what I am asking is why the allocation number for the children datasets always increases even when no data has been written. As I said, I played around a little bit creating and destroying datasets until I understood permissions well enough, and that number has continuously increased.

The number I am referring to is, when seeing my parent dataset “tank”, under the Dataset Space Management square on the right, it says:

Total Allocation: 23.82 MiB

Data Written 139.5 KiB (1%)
Children 23.68 MiB (99%) <---- Why has this number continously been increasing?

And also, my tank dataset says that the under Used/Available column:
23.82 MiB / 10.44 TiB

The disks are empty. I have not written any data into it.

It might be a simple question with an obvious answer but I have not gotten an answer on what Children Allocation means.

I would post an image of what I mean, but after uploading it or writing an imgur link and pressing “Reply” it is telling me I can’t include links nor embed media. Ok???

Your System Dataset is on your storage pool “tank”.

I answered that above:

If you prefer, you can move the System Dataset back to your boot-pool.

Huh. I would expect trueNAS to keep the system dataset… on the system pool by default.

What is the recommended action? Is it on the storage pool by default to not wear and tear excessively the system drive?

If it can be moved without many future repercussions, the next question is obvious. How do I do it?

Thank again, I think I understand more now.

This[1] and because it assumes the boot-pool is not redundant like your storage pools.

To reduce noise, people select their boot-pool (SSD) for the System Dataset. You can also choose an SSD-only pool for this purpose too.

In SCALE (CE), I think it’s under:
System → Advanced → select pool for System Dataset


  1. The days of USB sticks as boot-pools are mostly gone by now. ↩︎

OK, I did as you said and the children allocation went down to 1.75 MiB (93%), and there are only 1.89 MiB used, which seems much more reasonable. I’ll monitor what goes one with the boot-pool and the boot drive, but and in case I see a need for it I’ll move the System Dataset to a dedicated hard drive.

Thank you. I can consider this as solved, unless you have some last second recommendation.

1 Like

In 24.10.2.2 and in 25.04.1
System → Advanced Settings → Click the Configure button in the Storage section → Select Pool* (dropdown) make the desired choice -->save

1 Like

If you mark your own post as the solution, I’m going to delete my account.

2 Likes