[sisyphus] грусные размышления о файловых системах

Alexander Bokovoy =?iso-8859-1?q?a=2Ebokovoy_=CE=C1_sam-solutions=2Enet?=
Ср Июл 23 13:25:51 MSD 2003


On Wed, Jul 23, 2003 at 12:59:44PM +0400, Ildar Mulyukov wrote:
> 	Уважаемый all!
> играясь с кодировками, [опять] наткнулся на принципиальный вопрос:
> выходит, что по умолчанию на фс таких, как extX, reiser и т.п. имена 
> файлов хранятся в той кодировке, в которой находился юзер, когда 
> создавал файл. То есть отсюда несколько выводов:
> 1. Юзеры в разных кодировках видят файлы друг друга как попало.
> Для многопользовательской системы, коими всегда славились Юнихи, как-то 
> слабО.
> 2. Принципиально криво. Для сравнения ntfs хранит названия в UTF16.
Увы, POSIX не регламентирует кодировки имен файлов. Вообще. Имя файлового
ресурса в POSIX - последовательность байт и все.

> Для исправления 2-й проблемы, положим, можно (на текущий момент) 
> добавить опцию iocharset для всех фс. Это примерно понятно как сделать. 
> Но, опять, это только решает 2-ю проблему, 1-я же всё равно портит дело...
> А с 1-й проблемой я вижу только один способ бороться: в glibc делать 
> конвертацию имён соответственно текущей локали. Это, я подозреваю, 
> возможно, но не слАбо :-)
И не нужно. В общем случае неизвестно, какую кодировку использовал тот,
кто записывал файл, тому, кто его читает. Узнать это можно только в
конкретном случае.

Единственным реальным на сегодня унифицирующим решением будет
использование UTF-8 для имен файлов в рамках всего сервера. Опять-таки, в
случае управляемых систем, когда производитель системы имеет полный
контроль над ней, вопрос вполне решается: например, в нашей ApplianceWare
мы используем UTF-8 и раздаем эти файлы по CIFS, NFS, AFP с учетом того, в
какой кодировке пришел клиент. Если для современных CIFS-клиентов это
довольно просто (общение идет в UCS2), то для NFS и AFP администратор
должен выставлять в системе управления кодировки в зависимости от
параметров клиента (IP, uid/gid, ресурс).

-- 
/ Alexander Bokovoy
---
I saw a subliminal advertising executive, but only for a second.
		-- Steven Wright



Подробная информация о списке рассылки Sisyphus