Человеческое, более дружелюбное имя Samba


11

Большинство наших компьютеров работают под управлением Ubuntu, но два из них имеют двойную загрузку в Windows, и когда у нас есть гости, они, как правило, также работают на компьютерах с Windows. Таким образом, в дополнение к использованию NFS, наш файловый сервер (сервер Ubuntu) также запускает Samba.

И поскольку мы в основном используем Ubuntu, нам нравится использовать его преимущества перед Windows, такие как возможность использовать символы \:*?"<>|в имени файла. Проблема, конечно, в том, что Windows не принимает эти символы в именах файлов, и поэтому Samba должна перевести имя файла в нечто более приемлемое. Однако то, как он это делает, мне кажется неприятным.

Episode 182 - Exorcist 2: The Heretic.mp4Например, имя файла превращается в E4Q82R~Y.MP4. Это ужасная «коррекция». Есть ли способ сделать извращение Самбы более дружелюбным к людям? Можно ли «исправить» это как-то Episode 182 - Exorcist 2_ The Heretic.mp4вместо этого, где просто подставляются недопустимые символы?


1
Ознакомьтесь с описанием этого патча в списке рассылки Samba . Описанный метод работает "из коробки" с Samba 4.1.4-Debian.
mpy

@mpy Я попробовал это, но это все равно не работает, когда я копирую файлы с недопустимыми символами Windows в свою общую папку samba. Он работает только для преобразования вещей, которые были бы в порядке (например, пробел, преобразованный в символ), но не для вещей, которые не будут работать (например, «:» преобразован в другой символ). Есть указатели?
pd12

Ответы:


11

mangled map теперь устарела и больше не будет работать в новых версиях Samba.

Вы можете использовать vfs_catia для решения проблемы. Добавьте следующие строки в smb.conf:

vfs objects = catia
catia:mappings = 0x003a:0x2236,0x003f:0x0294,0x002a:0x2217,0x003c:0x276e,0x003e:0x276f,0x0022:0x02ba,0x007c:0x2223,0x005c:0x29f9

Сопоставление задается с помощью шестнадцатеричных кодов символов с префиксом 0x, разделенных двоеточием. Предоставленное сопоставление переназначит недопустимые символы в двойники юникода, которые вряд ли будут использоваться на каком-либо языке.

:? * <> "| \
∶ ʔ ∗ ❮ ❯ ʺ ∣ ⧹

Код можно поставить под [global]или в отдельном [share]разделе. Размещение его [global]может повлиять на производительность.

Обратите внимание, что любой отображаемый вами символ не может использоваться в именах файлов на сервере, иначе они будут недоступны.

Пример: клиент Windows, обращающийся к файлу с именем file❮name.txtна сервере, запросит file<name.txtу сервера из-за сопоставления, что приведет к ошибке «файл не найден».


Я пробовал это, но это все еще не работает для меня, когда я копирую файлы с недопустимыми символами Windows в свою общую папку samba Он работает только для преобразования вещей, которые были бы в порядке (например, пробел, преобразованный в символ), но не для вещей, которые не будут работать (например, «:» преобразован в другой символ). Есть указатели?
pd12,

2
Это прекрасно работает! Следует отметить, что вы не можете сопоставить все с одним и тем же символом, и в вашем примере все, что в действительности имеет подчеркивание, больше не будет доступно. Вместо этого я использовал следующие отображения:, 0x3a:0x7e 0x3f:0x5eтак :становится ~и ?становится ^.
Джеффри

2

В этой ссылке вы можете увидеть варианты искажения. Я думаю, что сначала вы должны отключить опцию:

mangled names

После этого, я думаю, имена должны выглядеть лучше ...

Чтобы заменить двоеточие, например, используйте эту строку:

mangled map =(: _)

Вы можете добавить больше правил замены, как это:

mangled map =(: _) (foo bar)

(также заменяет любое появление foo на bar)


Теперь они выглядят лучше. Фактически, когда я устанавливаю «искаженные имена» в «нет», имена файлов отображаются в Windows совершенно без изменений. Хотя это, безусловно, выглядит лучше, но и приложения Windows не могут открывать файлы. Если я пытаюсь открыть файл tes:t.txtв Блокноте, например, мне говорят «Не удается найти файл [...] \ tes: t.txt». То же самое касается других «нелегальных» файлов в их соответствующих приложениях.
Алекс

отредактировал мой ответ!
Майкл К

mangled mapбыл удален из Samba. Из того, что я могу сказать после небольшого осмотра, он был удален несколько лет назад. Вот что log.smbdговорит мой файл, если я пытаюсь его использовать:Ignoring unknown parameter "mangled map"
Alex

Вы правы ... устарели. Это не сработает. Это не так просто - сложное имя файла состоит в том, чтобы предотвратить наличие двух файлов с именем дам. Файлы foo: .txt и foo_.txt могут существовать, и тогда ваше переименование не удастся. Поэтому лучше всего было бы применять правила имен файлов так, чтобы разрешались только имена, разрешенные в обеих файловых системах.
Майкл К
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.