My first ZFS pool / datasets / Zvol: Asking for sanity check

Hi all,

I’ve just created my first ZFS pool in TrueNas Scale Electric-Eel-24.10.1 with 4x20TB HDDs in raidz2 configuration. Before I populate the pool with data, it would be great to get a 3rd party “sanity check”, on whether this dataset & zvol layout looks okay. (Complete hardware info is in the signature below.)

Pool: “elephant” [raidz2, no pool-level encryption]

Dataset/Zvol layout:

\ (root) [unencrypted, recordsize=1MiB]
    |- OpenVault [Dataset, Preset: Generic, key-based encryption] (functions as encryption root for all other datasets that don't need passphrase-based encryption)
        |- Zvols [Dataset, Preset: Generic] (parent node for Zvols)
            |- windows_game_library [zvol, blocksize=128k, size=8TiB, sparse=checked, sync=disabled] (Game Library, to be formatted as NTFS w/ clustersize 128k)
    |- Vault [Dataset, Preset: Generic, encrypted with Passphrase] (functions as encryption root for SMB datasets)
        |- Data [Dataset Preset: SMB] (main SMB Share for misc. data files)
        |- Media [Dataset Preset: SMB, recordsize=2MiB] (SMB Share for Media files)
Notes:
  1. The default recordsize of 1MiB was recommended by this article for generic file storage.
  2. I picked a recordsize of 2MiB for the “Media” dataset after reading this thread. My thought process was that, if 1MiB is good for general file storage, then for media files - that are on average much larger - a slightly higher record size shouldn’t hurt and might bring some benefits. But perhaps that was wrong thinking?
  3. All settings not specifically mentioned have been left at standard (e.g. compression=lz4, dedup=off)

Some questions regarding the “windows_game_library” Zvol:

  • Does it make sense to set sync to disabled? (I’m currently assuming that for a game library, any issues can be rectified by simply reinstalling the game.)
  • This Zvol will be formatted with NTFS. Does it make sense to use the same NTFS allocation unit size (clustersize) as the blocksize (128k)?
  • The iSCSI extent for that Zvol has a logical block size of 4096. Is that okay for Windows 10/11 or should I pick a different value?
  • I understand that in general a Zvol on a raidz pool is less than ideal, but does it seem okay for a game library (where presumably mostly reads will happen during usage)? FWIW my network connection is 10GBe.

Thanks so much in advance for any insights you can provide.

In my personal opinion, which goes against the explicit warning you are given by iX when you do this, I believe that you should set sync to Disabled except where you know for certain that you need it. The performance cost of sync writes (esp. on HDD without an SLOG) is so significant that I would not wish to risk TrueNAS deciding to use sync writes when they are not needed.

Normally zVols / iSCSI would be the exception where sync should be set to On, but if the iSCSI data is unimportant and you are prepared to recreate the zVol if it becomes corrupted due to e.g. a power failure, then that would seem to be an exception to the exceptions.

1 Like

@Protopia , thanks so much for responding. So if I understand you correctly, setting sync to “Disabled” on the root dataset or at least on the SMB datasets is what you’d recommend?

On the topic of SLOG: I haven’t bothered with this yet, but I do have two Intel Optane P1600X 58GB NVMe SSDs. If you happen to know: Would those SSDs make a good SLOG in a mirror configuration for a 10GBe system, if ever needed?

SLOG questions I’ll just point you to a few links that cover the devices and sizing

BASICS

iX Systems pool layout whitepaper

Special VDEV (sVDEV) Planning, Sizing, and Considerations

1 Like

TL;DR Yes. Even one would suffice.

2 Likes