Samba "ea support" Tips
At home, I use Samba as one of the methods for
exposing the data on my file server to the rest of my network (the others being
SFTP, FTPS, and NFS). In addition, I use Folder
to keep my Documents, Pictures, and Videos folders in sync on all of my
machines. In order to maintain the nifty appearance of those special folders,
the file attributes for the
desktop.ini file in each one must be preserved.
Samba can do this in one of two ways:
- Mapping DOS file attributes to UNIX permissions
- Storing the DOS attributes in extended file attributes
I prefer the latter method since I also access the files from Linux machines, so changing the permissions of files is not appropriate.
To enable storing of DOS attributes in extended file attributes, the following
lines must be added to each share definition in
ea support = yes map hidden = no map system = no map archive = no map readonly = no store dos attributes = yes
In order for it to work, though, the filesytem containing the files must
support extended attributes. My file server uses XFS, which needs no special
mount options. Ext3/4 need the
user_xattr mount option set.
On occassion, I have noticed that sometimes, Samba seems to ignore the extended
attribute values. Setting file attributes from Windows does nothing (i.e. the
changes are not saved), and setting the
user.DOSATTRIB extended attribute
setfattr has no effect. In all cases that I have encountered,
this is because Samba encounters a file or directory from which it cannot read
the extended attributes. For me, this has been because I had mounted a
different filesystem that did not support extended attributes on a subdirectory
of a share. Apparently, once Samba encounters one file it cannot read, it stops
processing extended attributes altogether.
user.DOSATTRIB extended attribute contains a bit field indicating the
state of each DOS attribute:
Read-Only = 0x1 Hidden = 0x2 System = 0x4 Archive = 0x20
getfattr command to view the current attributes:
dustin@rigel ~/Documents $ getfattr -n user.DOSATTRIB desktop.ini # file: desktop.ini user.DOSATTRIB="0x6"
setfattr command to manually set a file's attributes:
dustin@rigel ~/Documents $ setfattr -n user.DOSATTRIB -v '"0x6"' desktop.ini
(Note the escaping of the quotes in the value; this is needed to force the extended attribute to contain a string instead of an integer)