How to estimate the required size for an "apps" pool?

Hello

I have three official apps running at the moment (and as yet no self-grown Docker stuff although I do have jailmaker running as per @Stux’ video). The apps pool for these official apps is on the same set of HDDs as my main “tank” pool which contains my datasets.

I want to experiment with moving my apps pool to some separate storage which is a 32GB Sandisk industrial uSD card (1900 TBW, designed to be used for large R/W operations). The reason is for interest and to hopefully reduce the frequent HDD thrashing which I seem to get (which I don’t think happened with Cobia or DF but does seem prevalent now with EE, all on the identical h/w platform).

These are the apps:

How ought I to estimate the size of pool I need for them ?

I am happy to ssh into my box and run some commands (but I don’t know what to run).

Thanks!

I believe this is the ‘app pool’
du -sh /mnt/.ix-apps/

ahh yes, I think you’re right. I should have thought of that!

Thanks - at the moment it seems to hang but perhaps it takes a long time to calculate (or perhaps .ix-apps is a strange dynamic mount or something unusual which I don’t understand).

I’ll carry on fiddling.

edit - using the built-in Midnight Commander I was able to list the directory size which in my case is cuyrrently about 13 GB.

I just ran it on my pool in a few seconds, but it’s only 12gb and is on an optane mirror pool. Just let it finish and you’ll know how much space.

‘docker prune’ can be used for some cleanup, just make sure you know what you’re deleting before running it.

root@truenas[~]# du -sh /mnt/.ix-apps/

8.6G /mnt/.ix-apps/

You’re right, I just needed to be patient! Thanks for your help; my 32GB uSD card should do nicely.

Apps pools are recommended on Mirror devices. Lose the pool, lose the apps, You want to make sure to back up to the HD pool in your case

1 Like

Are you declaring external host mounts for the apps?

32GB is not enough if you plan on storing Jellyfin’s config, cache, and transcode directories on it. The config file can grow GBs in size depending on how much media you add. And transcodes can take up large amounts of space (as much as the original media that’s being transcoded and more in certain cases).

The app’s dataset contains the docker var/lib directory.

This is where docker caches pulled images.

I believe docker expects to be able to use a 100GB cache.

Ergo, you shouldn’t move your apps pool to a device that is smaller than say 120GB.

Edit: I didn’t find a more authoritive description, but this link from IBM mentions the same 100GB requirement I do.

That may be a specific recommendation for OpenPages. As you said, Docker themselves doesn’t have any more authoritative guidance on sizing /var/lib/docker and I see various forum recommendations that are much lower than 100GB. Looking into it, it looks like OpenPages Docker images by themselves are in the range of 11GB (large enough that you may have to increase the maximum image size allowed by Docker) so they may be recommending a larger data directory because of that.

Yep, you can set cloud sync jobs to do that. I’m glad the apps I use that I’d want data/conf backed up for, have built in features for doing that. Just add a bind/hostpath for those folders and back those up to gdrive every week :slight_smile:

Thanks for all of the replies and very useful (and interesting) advice and comments. Given my limited skills I shall approach my experiment very cautiously (in case that 100GB guideline trips me up).

Yes. I think I figured it out. The recommendation is obsolete.

The device mapper is now deprecated and it used to have this as a default, and many distros used loopback files for the docker store in the early days.

dm.loopdatasize

Specifies the size to use when creating the loopback file for the “data” device which is used for the thin pool. The default size is 100G. Note that the file is sparse, so it will not initially take up this much space.

I still contend that 32GB is small for a docker store :slight_smile:

1 Like

For transcode, at least with Plex, I use a tempfs (ram). I don’t know if Jellyfin does the entire transcode up front, but Plex seems to stream the transcode.

Also, I use bind mounts to keep docker app config/data separate from the app pool. I make periodic backups of this and have easier access to the container data that I care about.