macOS Finder has been notoriously slow handling some Samba file shares, and Synology users are well aware of this.
The most common issue is the non-existent activation of the vfs_fruit Samba module for SMB3.x connections on Synology NAS’. In order to activate this module, you’ll need to SSH your NAS and change the
smb.conf file in accordance.
# Warning 1: make sure you know what you’re doing while using SSH. If you don’t use it often, disable it after use.
# Warning 2: This change is not permanent, but it does persist after changes made to SMB settings via DSM UI. It may not be persistent after updates.
# Warning 3: Please understand that Synology does not support this out-of-the-box probably because it is untested. Take that in mind.
# Warning 4: This may affect Time Machine backups – to be confirmed.
Updated: a Simpler Way
Below are TL:DR instructions; to understand what is happening do read the rest of the article, but this method works just fine, although it doesn’t run on boot (can’t say why, though). You’ll have to run it manually using Task Scheduler after reboot for now.
This method also assumes that you’re not using NETBIOS, but applying the changes directly to the main
smb.conf file should probably work as well (untested).
This method is done by using only DSM > Control Panel > Task Scheduler. Create a new “Triggered Task“, the user as “root” and select “Boot-Up” as the trigger. Give this task a descriptive name:
Check “Enabled” Select the “Task Settings” tab and paste the following script in the script box:
#!/bin/sh # Stop Samba /usr/syno/sbin/synoservicecfg --stop samba # Create the new conf file sudo echo "vfs objects = fruit fruit:aapl = yes fruit:encoding = native fruit:locking = none fruit:metadata = stream fruit:resource = file" >> /var/tmp/nginx/smb.netbios.aliases.conf # Start Samba /usr/syno/sbin/synoservicecfg --start samba
Also note that upon restart SMB shares will be available using default configurations and only by the end of the boot process the new configuration will be applied and the Samba service rebooted.
Understanding what’s going on
You’ll need elevated privileges from hereon, so issue
sudo -i after initiating you SSH session.
While trying to make this work, I’ve found that if you change the global
/etc/samba/smb.conf file, by adding the parameters below, those will be all messed up after any changes are made to SMB settings via DSM UI.
Although it probably won’t matter, I’m using a workaround by placing these configuration parameters not in the main file, but in a file that it includes by default and that is [probably] not being used if you’re not using Netbios (it wasn’t in my case). This file is
/var/tmp/nginx/smb.netbios.aliases.conf, that you can see in my default smb.conf file:
[global] printcap name=cups winbind enum groups=yes include=/var/tmp/nginx/smb.netbios.aliases.conf min protocol=SMB2 security=user local master=no realm=* passdb backend=smbpasswd printing=cups max protocol=SMB3 winbind enum users=yes load printers=yes workgroup=WORKGROUP
This way, this will survive SMB settings edits and hopefully also DSM upgrades. So, in order to this, create the missing included conf file:
Open it up with VIM (note: this is not a common text editor, if you have never used it before, search for a how-to online):
When VIM opens, press
i to enable text entry and paste the required parameters, listed below:
vfs objects = fruit fruit:aapl = yes fruit:encoding = native fruit:locking = none fruit:metadata = stream fruit:resource = file
Escape to exit editing mode, type in
:wq to write and quit VIM. Then check if it looks ok:
Restarting the SMB service
After editing the .conf file above, issue this to restart the Samba server:
synoservicecfg --restart samba
You may also look into the log and check if all seems to have run ok:
testparm and press
Enter should show you the computed parameters in the current Samba session, just scroll up until you see the global options and these parameters should be there. Here’s my output:
# Global parameters [global] realm = * workgroup = WORKGROUP printcap name = cups server min protocol = SMB2 passdb backend = smbpasswd security = USER winbind enum groups = Yes winbind enum users = Yes fruit:resource = file fruit:metadata = stream fruit:locking = none fruit:encoding = native fruit:aapl = yes idmap config * : backend = syno include = /var/tmp/nginx/smb.netbios.aliases.conf vfs objects = fruit
All done! If your shares are still visible on your Mac, disconnect them and mount them again. Test out and see if this made any difference!
- I’ll update this if anything new comes up (namely a DSM upgrade), but do leave a comment below if you have any comments/insight.
- I had custom icons for my file shares setup (via
.VolumeIcon.icnsfiles), and a Finder is now ignoring those. It’s probably something related to one of the vfs fruit options.
- I’ve seen recommendations online about loading vfs
streams_xattrmodules as well but I’m not these helped in any way when I tested..
- Available modules are located in
vfs_streams_xattrmodule is not available but
streams_xattris, I assumed it’s the same.
- There are also what looks like proprietary Synology modules, prefixed by
Make it Persistent
This can be done via DSM UI, which I recommend, instead of messing around even more with SSH.
Note: I still need to check if this runs on reboots.
#!/bin/sh # backup default smb.conf cp /var/tmp/nginx/smb.netbios.aliases.conf /usr/local/etc/rc.d/smb.netbios.aliases.conf # copy backup config file cp /usr/local/etc/rc.d/smb.netbios.aliases.conf /var/tmp/nginx/smb.netbios.aliases.conf # restart samba /usr/syno/sbin/synoservicecfg --restart samba
After DSM Upgrades
To be verified, but the solution above (for reboots) should also work for DSM upgrades.
Other Possible Performance Improvements:
Adjust SMB browsing behavior
In this link you’ll find several suggestions made by Apple that might improve your SMB browsing experience as well:
Turn off packet signing for SMB 2 and SMB 3 connections
One other possible culprit of slow performing SMB file shares may be SMB packet signing to be enabled on your Mac. To disable this, you’ll need to edit (or create the file if it’s not there), as described by this Apple article: