LINUX.ORG.RU
ФорумAdmin

Samba и длинные имена файлов

 


0

4

При попытке скопировать на самбовую шару с винды файл с именем «Генеральный директор ДлиннаяФамилия И.О встречает губернатора Энской области ДругаяДлиннаяфамилия И.О. и мэра города Энск-Энский ТретьяДлиннаяфамилия И.О.-2.jpg» получаю «Синтаксическая ошибка в имени файла, имени папки или метке тома.» На винде с файлом проблем нет, нормально копируется с места на место.

Утверждается, что это из-за того, что имя файла в линуксах ограничено 255 байтами, что составляет 128 символов utf8. Правильно ли я понимаю, что для совместимости с виндой, где позволяются более длинные имена, придётся отказаться от utf8 и заставить самбу хранить файлы в однобайтовой кодировке?



Последнее исправление: aikr (всего исправлений: 2)

Где ты слышал про такое ограничение? я впервые слышу. Может это ограничение самой самбы?

Deleted
()

Вроде в винде 260 байт на всё, включая путь.

Только в Windows 10 сделали возможность «включить» длинные имена отдельно, не?

zgen ★★★★★
()
Ответ на: комментарий от Deleted

Где ты слышал про такое ограничение? я впервые слышу.

На ЛОРе эта тема уже неоднократно всплывала. Вкратце, NTFS позволяет хранить 255 символов в имени файла, в то время как в коде ext* под линукс захардкоджено 255 байт, отсюда и проблемы.

h578b1bde ★☆
()

Правильно ли я понимаю, что для совместимости с виндой, где позволяются более длинные имена, придётся отказаться от utf8 и заставить самбу хранить файлы в однобайтовой кодировке?

Проблема не в самбе а в файловой системе. Но даже если ты будешь хранить имена файлов в однобайтовой кодировке — могут всплыть проблемы с другими файлами, т.к. NTFS НЯП хранит имена файлов в UTF-16, соответственно диапазон всевозможных символов там гораздо шире чем вмещает KOI8/cp866/etc.

h578b1bde ★☆
()

Анонимус утверждает

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

anonymous
()
Ответ на: комментарий от h578b1bde

коде ext*

То есть дело в ФС на которой размещена самба и если её поселить не на ext*, a скажем на xfs,btrfs или zfs то этого ограничения уже не будет?

torvn77 ★★★★★
()
Ответ на: комментарий от kerneliq

И какой же выход?

ИМХО самый лучший вариант — ограничиваться именами в 127 символов для кириллицы если нужна переносимость между обеими ФС/ОС.

h578b1bde ★☆
()
Ответ на: комментарий от torvn77

a скажем на xfs,btrfs или zfs то этого ограничения уже не будет?

Судя по вышеприведённой таблице, во всех перечисленных ФС имена также как в ext* хранятся в байтах, так что нет, не прокатит.

h578b1bde ★☆
()
Последнее исправление: h578b1bde (всего исправлений: 1)
Ответ на: Анонимус утверждает от anonymous

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

subst /?

h578b1bde ★☆
()
Ответ на: комментарий от h578b1bde

Если файлы на NTFS были созданы в Windows, то в Windows есть жёсткие ограничения на имена файлов и там просто не будет символов, отсутствующих в других кодировках. Да и ввести специфичные символы тоже не так уж просто, конечно можно, но зачем.

kostik87 ★★★★★
()
Ответ на: комментарий от h578b1bde

ограничиваться именами в 127 символов для кириллицы

Не прокатит, это получится искусственное ограничение, которое придётся внедрять костылями типа сервиса, который при записи файлов будет автоматом укорачивать имя (или скрипта, который раз в несколько минут будет пробегать по каталогам и имена укорачивать).

aikr
() автор топика
Ответ на: комментарий от h578b1bde

Судя по вышеприведённой таблице, во всех перечисленных ФС

Вроде как у reiserfs почти четыре килобайта на имя заявлено. Но мне с ней как-то стрёмно связываться.

aikr
() автор топика
Ответ на: комментарий от kostik87

Если файлы на NTFS были созданы в Windows, то в Windows есть жёсткие ограничения на имена файлов и там просто не будет символов, отсутствующих в других кодировках

ЩИТО?

Да и ввести специфичные символы тоже не так уж просто, конечно можно, но зачем

Скачай из интернетов любой файл, названный японскими иероглифами или, к примеру, немецкими/испанскими/etc буквами с умляутами и прочей диакритикой. Хотя можешь далеко не ходить и загрузить файл с именем в кириллице с буквами, отсутствующими в какой-нибудь KOI8-R, например на украинском.

h578b1bde ★☆
()
Ответ на: комментарий от kostik87

в Windows есть жёсткие ограничения на имена файлов

Есть, но допустимые символы в именах файлов всё равно выходят за пределы однобайтовой кодировки. И часть ограничений суть кривость Проводника, который не работает с некоторыми символами в именах - при этом файловая система их разрешает использовать.

aikr
() автор топика
Ответ на: комментарий от h578b1bde

Хотя можешь далеко не ходить и загрузить файл с именем в кириллице с буквами, отсутствующими в какой-нибудь KOI8-R, например на украинском.

Вы всё перепутали. Ядру на unix-системах всё равно, koi8-r или koi8-u. Для ядра это просто байты, где есть только два запрещенных символа: '/' и '\0'. Кодовые страницы появляются для файловых систем, где есть: a) неразличимость больших и маленьких букв б) не байтовое преставление имён, например utf-16 в) преобразование в два имени - короткое и длинное.

vodz ★★★★★
()
Ответ на: комментарий от h578b1bde

Нет, в VFS всё же ограничение в 4096 байт, так что если очень сильно нужно именно 255 символов — придётся либо патчить драйвер ФС, либо отдать под самбу другую ФС, хранящую имена в символах (например, NTFS со всеми недостатками ntfs-3g).

h578b1bde ★☆
()
Ответ на: комментарий от vodz

Вы всё перепутали. Ядру на unix-системах всё равно, koi8-r или koi8-u. Для ядра это просто байты, где есть только два запрещенных символа: '/' и '\0'. Кодовые страницы появляются для файловых систем, где есть: a) неразличимость больших и маленьких букв б) не байтовое преставление имён, например utf-16 в) преобразование в два имени - короткое и длинное.

Речь о том что нельзя впихнуть невпихуемое — как ни старайся, а впихнуть всю кириллицу, расширенную латиницу и иероглифы в один байт не получится, поэтому при работе с именами файлов на разных языках непременно будут возникать коллизии и прочие трудности.

h578b1bde ★☆
()
Последнее исправление: h578b1bde (всего исправлений: 2)
Ответ на: комментарий от aikr

И часть ограничений суть кривость Проводника, который не работает с некоторыми символами в именах - при этом файловая система их разрешает использовать.

То о чём ты говоришь — это ограничения, вызванные обратной совместимостью WinAPI, а не самого Проводника.

h578b1bde ★☆
()
Ответ на: комментарий от h578b1bde

при работе с именами файлов на разных языках непременно будут возникать коллизии и прочие трудности

Это проблема софта. Ядро не сортирует, не преобразует большие в маленькие, когда это не надо. Поэтому спец символ в koi8-u отсутствующий в koi8-r не запрещён, а просто на экране будет псевдографическая загогулина вместо украинской буквы, только и всего.

vodz ★★★★★
()
Ответ на: комментарий от aikr

Не прокатит, это получится искусственное ограничение, которое придётся внедрять костылями типа сервиса, который при записи файлов будет автоматом укорачивать имя (или скрипта, который раз в несколько минут будет пробегать по каталогам и имена укорачивать).

Если задача переехать с винды на самбу, то прийдется разово укоротить имена (недавно тут тема была). В дальнейшем уже при сохранении на самбе пользователем проблем не будет, просто пошлют его, и он сам сделает имя покороче.

anc ★★★★★
()
Ответ на: комментарий от aikr

reiserfs. Но мне с ней как-то стрёмно связываться.

3-тий рейзер много много лет использовал и на десктопе и на паре тройке серверов, проблем никогда не было. Так что я бы порекомендовал попробовать,тем более она не развивается, а значит её и не ломают.

vtVitus ★★★★★
()
Ответ на: комментарий от Deleted

Где ты слышал про такое ограничение? я впервые слышу. Может это ограничение самой самбы?

Нет. Если ты не слышал, то это не значит, что этого нет. Ограничение в Linux - 255 байт. Ограничение в Windows - 255 символов.

http://wiki.etersoft.ru/Linux/VLFN

AS ★★★★★
()
Ответ на: комментарий от aikr

Заявлена возможность, но зависит от реализации

/usr/src/linux/fs/reiserfs/reiserfs.h:#define REISERFS_MAX_NAME(block_size) 255

Давно было побольше, но ещё в версии 2.6 вот это прописали.

anonymous
()
Ответ на: комментарий от AS

В VFS давно расширили, а новые ФС проектируют одним байтом для длинны имени. Есть ФС работающие с длинными именами. Для btrfs был патч, а у reiserfs только одно число поменять. У ext были лишние байты, но их, вроде, определили под что-то другое.

anonymous
()
Ответ на: комментарий от AS

Не в ext, а в VFS. Что несколько серьёзнее.

В VFS ограничение тоже есть, но вроде как побольше.

h578b1bde ★☆
()
Ответ на: комментарий от Vit

А там ограничение на размер файла. Так что в udf.

anonymous
()
Ответ на: комментарий от anc

Если задача переехать с винды на самбу

Не переехать, а просто копию иметь в другой точке. Ради одной только файлопомойки в удаленном филиале ещё одну винду покупать не хочется.

aikr
() автор топика
Ответ на: комментарий от h578b1bde

наверное и ему и тебе стоит перечитать, я не пытаюсь тыкнуть кого-то, просто достало уже мракобесие культа имени Линуса.

260 символов, а не байт. И это ограничение можно снять, если очень припекает.

Morin ★★★★
()
Ответ на: комментарий от Morin

наверное и ему и тебе стоит перечитать, я не пытаюсь тыкнуть кого-то, просто достало уже мракобесие культа имени Линуса.

А я тут причём, мопед ведь не мой. Я ещё в самом первом своём посте в данном треде констатировал тот факт что винда в именах оперирует понятием „символ”, в отличие от этого вашего типа продвинутого в фейловых системах линукса.

h578b1bde ★☆
()
Ответ на: комментарий от anonymous

В VFS давно расширили

Я не зря дал ссылку на wiki.etersoft. Там всё написано, где надо править, чтобы работало. Хотя да, про VFS там нет.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от h578b1bde

Я ещё в самом первом своём посте в данном треде констатировал тот факт что винда в именах оперирует понятием „символ”, в отличие от этого вашего типа продвинутого в фейловых системах линукса.

Это ещё не факт, что правильнее. utf-16 с фиксированным количеством символов, но с урезанной поддержкой алфавитов и длинной пути, либо полной utf-8 и «неограниченной» длинной пути, а то и 4k utf-8 символов для райзера.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.