Назад | Перейти на главную страницу

Как запретить имена файлов, отличных от UTF-8?

Можно ли на уровне файловой системы обеспечить, чтобы все созданные записи файлов имели допустимые имена UTF-8? Я использую Btrfs.

Нет. Вам придется либо изменить Linux или реализацию файловой системы, либо использовать файловую систему сквозного фильтра (возможно, реализованную с помощью fuse), которая обеспечивает соблюдение ограничения.

Это хорошая идея, но, вероятно, очень сложно прийти к единому мнению:

  • Пуристы старой школы будут настаивать на том, чтобы имя файла могло быть любой строкой байтов с завершающим нулем.
  • Другие скажут, что если вы применяете действительный UTF-8, вы также должны пойти дальше и запретить другие ошибки Unicode, такие как объединение символов без базовых символов, неназначенных кодовых точек и т. Д.

zfs имеет utf8only вариант крепления что будет обеспечивать это.

Eсть патч, чтобы добавить это в ext4 но, похоже, не получил особого отклика.

Сама файловая система (и, соответственно, уровень файловой системы Linux) допускает любой символ в имени файла, отличный от нуля и /. Изменение драйвера для удаления поддержки таких имен теоретически возможно, но может вызвать нежелательные побочные эффекты: например, что происходит, когда вы монтируете файловую систему, в которой уже есть такие файлы? Они невидимы? У вас паника ядра? Вы избегаете этих выставленных имен? И если вы избегаете имен, нарушает ли это какие-либо инструменты пользовательского пространства или делает определенные файлы недоступными? [см. «руткит»]. Кроме того, форк ОС означает, что вам придется вручную перестраивать для каждого обновления ядра и соответствующим образом применять патч - это немного раздражает.

Однако если вы все же хотите продолжить, самый простой способ сделать это - создать ПРЕДОХРАНИТЕЛЬ слой. Это отрицательно сказывается на производительности, но, безусловно, это самый простой способ начать работу и проверить свою идею. Вы можете прочитать документацию и написать такую ​​программу всего за несколько часов.