Best way to create a Truenas dataset for Windows and Linux clients?

I cannot imagine I’m the first person to want to do this and I would imagine plenty of people have even done this. I am running Truenas scale and followed Felixthecat’s great guide here. However when I get to the dataset creation section is where I am not sure how to proceed.

For the immediate future the plan is for this to be where my wife and I can put all our pictures and videos of the kids. I run Linux and she runs Windows. Long term we are also looking at using it for the media share for Jellyfin.

Would I be correct in thinking that given there is a Windows client that is the lowest common denominator and I should set up the dataset as I would for Windows? Or am I mistaken and should make it more like a linux dataset?

Not that I think it matters but I don’t plan on running Jellyfin on the Truenas scale box. It is an old PC of mine and Jellyfin will either be if my wife builds a new pc, or buying something more purpose built for VM’s. Either way the app side of Jellyfin will not be this dataset.

Thanks for the guidance/advice in advance!

Unless I’m seriously misunderstanding what your use case is, it sounds like an smb share is what you’re after. Works great with windows and Linux.


I know I would make an SMB share. But I am asking specifically for the creation of the data set, not the share.

Specifically in the instructions:

Case Sensitivity and Share Type depend on your Use Case.
→ If Files will be accessed by Linux Clients, e.g. a Jellyfin Container or Linux PCs, then leave Case Sensitivity at “Sensitive” and Share Type at “Generic”:
Case Sensitivity and Share Type depend on your Use Case.
→ If you’re planning to serve files to Windows Clients directly, switch Case Sensitivity to “Insensitive” and Share Type to “SMB”:

I’m new to ZFS and TrueNAS but I’ve worked with commerical storage for years (EMC and Netapp). In those I am used to just creating a volume. Then you create either the NFS or SMB after. So basically with my use case when creating the dataset, not the actual share, what should I do knowing that I’ll be accessing it from at least 3 devices, a Linux Desktop, a Windows Desktop, and a Jellyfin instance (probably docker/kubernetes).


zfs create pool/dataset
zfs get all pool/dataset

this shows all available dataset properties that can be changed at will.

then you set all properties as you like via:


zfs set casesensitivity=insensitive pool/dataset

Compression, recordsize, quota/reservation or the ACL ones if you are using ACLs are interesting properties for a fileshare dataset. Or set copies=2 if you don’t have redundancy but want to have more integrity on that very dataset. Properties are cool stuff :slight_smile:

I have child datasets in my shares with differing properties that are mounted as folders. Some well tuned datasets with proper recordsizes can save lots of space for metadata and improve performance. I also disable compression and increase recordsize on datasets storing e.g. video data while most of my other datasets are set to compression=zstd (inherited from pool property)

Ok. I get you can do a lot of fancy things. But I’m not looking to do fancy at this point in time. I’m reading the guide and it gives 2 suggestions. The way I read it is
If only Linux - use sensitive and generic.
If only Windows - change to insensitive and SMB.

But since I have both, it isn’t clear what to do. My hunch is follow the windows instructions and Linux will deal. But I’m asking if my hunch is right, or not. And if not, what settings?
Case - Sensitive, Mixed, or Insensitive
Type - Generic or SMB

In short I am looking for actual value suggestions. I figure potentially it could help lots of people, as I am sure there are tons like me who have mixed OS’s at home. And if there is a good consensus maybe even the guide could be updated to make it clearer.