My favorite new feature of 6.12 is the “Exclusive Shares” concept. Here’s a rundown:
Background
Unraid user shares are a FUSE, which allows data on multiple drives to be presented as a single file system. This idea is at the heart of Unraid’s Array, as well as the concept of “Cache Pools” (now known as Named Pools). Any time you see a path that starts with /mnt/user
in Unraid, that’s a FUSE (prior to 6.12, that is).
FUSE is great for giving us this transparent way to view our files without having to worry about which physical drive those files reside on. However, this comes at a cost… and that cost is reduced performance for applications running on an SSD Named Pool.
This performance penalty wasn’t always noticeable, but it would sometimes rear it’s ugly head in unexpected ways (exampes: graylog and duplicati). There was a workaround, assuming your appdata
user share was stored entirely on one Named Pool: you could update your docker bind mounts to /mnt/[poolname]/appdata
instead of /mnt/user/appdata
. This bypassed the FUSE.
Exclusive Shares
With Unraid 6.12, Limetech introduced “Exclusive Shares” as part of the Share Storage Conceptual Change. This gives us a built-in way to bypass FUSE on an entire user share.
In order for a share to be designated an Exclusive Share, the following must be true:
- “Primary Storage” must be a Named Pool
- “Secondary Storage” must be set to
none
- Files for that share must exist entirely on the Primary Storage device
Setup
In order to use Exclusive Shares, you first have to enable them. Go to Settings > Global Share Settings
and change the Permit Exclusive Shares
setting to Yes
. You’ll have to stop your array in order to make this change.
Next, make sure that your appdata share is stored entirely on the Named Pool. Go to Shares
and click Compute
in the Size column for your appdata share. This will tell you how much data for this share is saved on each drive. If the only drive reported is your Named Pool, you’re all set. If you’ve got more than one drive, you’ll need to disable docker in settings, and then run the mover.
Once your sure that your entire appdata share is saved on your Named Pool, you need to change your appdata share settings. On the Shares
tab, click on appdata
to bring up the settings. Change the Secondary Storage
option to None
.
If you did it correctly, after you Apply the changes you will see the Exclusive Access
field on the appdata share change from No
to Yes
.
Finally, if any of your docker container bind mounts use mnt/[poolname]/appdata/...
, you can change those to mnt/user/appdata/...
.
I hope this helps anybody who might have been frustrated with the appdata FUSE performance in the past! If you have any questions, let me know!-