Dark's Code Dump

Possibly useful

Optimised smb.conf for Windows clients

These Samba config options have been performing fantastically well for me. It took quite a bit of research to finalise the config you see below, so figured it was worth sharing.

My setup is a Debian server with BTRFS storage, and windows clients. Requirements are:

  • Good performance, especially with lots of tiny files, complex directory trees, random writes within files, etc.
  • Preservation of all reasonable windows file attributes, such as:
    • Creation date
    • DOS attributes
    • Anything else necessary for standard desktop workload such as steam game library, documents/pictures/etc folders, git, etc.
  • Continuing the previous point: It should feel like the server is running Windows – no weird surprises.
  • No preservation of anything that allows Windows to behave in unpredictable Windows-like ways – specifically no ACL support.
  • Sane Linux filesystem permissions
    • When I browse through my windows files, they should look like a Linux home directory, no weird permissions etc.
    • Everything Windows-specific should be abstracted away into xattrs.
    • Everything should be executable on Windows, but not executable on Linux, as that is the cleanest representation of the platform difference IMO.
  • Backup-able with standard Linux tools like tar and borg (xattrs must be enabled!)
  • Correct behaviour of BTRFS features such as compression.

Without further ado:

[global]
   socket options = IPTOS_LOWDELAY TCP_NODELAY IPTOS_THROUGHPUT
   use sendfile = yes
   min receivefile size = 16384
   write cache size = 262144
   strict sync = no
   min protocol = SMB3
   aio read size = 1
   aio write size = 1
   allocation roundup size = 4096
   server signing = no
   vfs objects = btrfs
   create mask = 644
   acl allow execute always = yes
   store dos attributes = yes
   map readonly = no
   map archive = no
   ea support = no
   nt acl support = no

Options I specifically avoid are:

  • SO_RCVBUF=131072 SO_SNDBUF=131072 – specifically recommended to avoid by newer Samba releases.
  • case sensitive = yes – breaks too many things, performance improvement is barely noticeable.
  • strict allocate = yes – breaks BTRFS compression.

And one final note, I noticed a substantial performance improvement in my use case of SMB when upgrading from Debian 9 to Debian 10, so if you are on a lower Samba version than 4.9, consider upgrading!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.