Samba mounts eindigend op spatie of punt

Deze post is voor iedereen, die in een gemengde Windows/Mac/Linux-omgeving de windows-server wil mounten.

Wie in een gemengde omgeving op een Linux-machine een Windows-server mount, zal, na verloop van tijd, tot de ontdekking komen dat sommige mappen niet benaderbaar zijn. Meer specifiek: alles wat eindigt op een punt of een spatie kan niet benaderd worden.

Het kostte wat moeite, maar de oplossing is gelegen in een nogal obscure optie van mount.cifs, namelijk “mapchars”.

De manpage (man mount.cifs) maakt het er niet duidelijker op, die zegt iets over zeven “reserved characters” die vertaald worden:

Translate six of the seven reserved characters (not backslash, but
including the colon, question mark, pipe, asterik, greater than and
less than characters) to the remap range (above 0xF000), which also
allows the CIFS client to recognize files created with such
characters by Windows´s POSIX emulation. This can also be useful
when mounting to most versions of Samba (which also forbids
creating and opening files whose names contain any of these seven
characters). This has no effect if the server does not support
Unicode on the wire. Please note that the files created with
mapchars mount option may not be accessible if the share is mounted
without that option.

Afgezien van het feit dat de asterik niet bestaat, wordt in het geheel niet duidelijk wat hier vertaald wordt en waarom. Een bugreport uit 2015 maakt het al een beetje duidelijker: https://bugzilla.samba.org/show_bug.cgi?id=11206: “mapchars not handling trailing period and trailing space”.

Wat er gebeurt is dit: de Mac wijzigt spaties (karaktercode 0x20) in karakter 0xF028, maar alleen als de spatie aan het eind staat. Idem voor de punt: 0x2E wordt 0xF029, ook alleen aan het eind.

Wanneer je een dergelijke map tegenkomt in een SMB/CIFS-mount, loop je het risico dat je de map niet kunt benaderen. De oplossing: “mapchars” gebruiken.

Gebruik je op dit moment bijvoorbeeld:

mount -t cifs -o iocharset=utf8,credentials=/etc/smbcredentials ‘\\SERVER\Share’ /mnt/

… dan wordt het met de nieuwe mount-optie:

mount -t cifs -o iocharset=utf8,credentials=/etc/smbcredentials,mapchars ‘\\SERVER\Share’ /mnt/

Met deze optie erbij vertaalt de Linux-machine de bestandsnamen op dezelfde manier als de Mac – en zouden de mappen weer benaderbaar moeten zijn.

Eén gedachte over “Samba mounts eindigend op spatie of punt”

Reacties zijn gesloten.