Linux/VLFN: различия между версиями
Строка 1: | Строка 1: | ||
'''VLFN'''(''Very Long FileName'') - проблема, заключающаяся в том, что ограничение на длину русских | '''VLFN'''(''Very Long FileName'') - проблема, заключающаяся в том, что в GNU/Linux применено ограничение в 255 байт на длину имени файла, что при использовании UTF-8 даёт для русских букв не более 127 символов. | ||
== Длинные имена файлов в Linux == | == Длинные имена файлов в Linux == | ||
Увеличение длин имен файлов в Linux. | Увеличение длин имен файлов в Linux. | ||
=== Имена файлов в Windows и Linux=== | === Имена файлов в Windows и Linux=== | ||
В Windows для именования файлов принята кодировка UTF-16, то есть каждый символ в названии файла кодируется двумя байтами. Максимальная длина файла 255 символов( | В Windows для именования файлов принята кодировка UTF-16, то есть каждый символ в названии файла кодируется двумя байтами (16 бит). Максимальная длина имени файла — 255 символов (510 байт). В Linux же для именования файлов принята кодировка UTF-8, при этом максимальная длина файла составляет 255 байт (а не символов). | ||
=== Постановка задачи === | === Постановка задачи === | ||
Так как в UTF-8 для кодирования русских букв используется два байта, то максимальная длина имени файла, состоящего из русских букв, фактически составляет 127 символов. В связи с этим появляется проблема - длинные имена файлов(от 128 до 255 русских символов) не влезают в имена файлов в Linux. | Так как в UTF-8 для кодирования русских букв используется два байта, то максимальная длина имени файла, состоящего из русских букв, фактически составляет 127 символов. В связи с этим появляется проблема - длинные имена файлов (от 128 до 255 русских символов) не влезают в имена файлов в Linux. | ||
Упоминания данной проблемы: | |||
http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-06/2426.html | Упоминания данной проблемы: | ||
http://stackoverflow.com/questions/833291/is-there-an-equivalent-to-winapis-max-path-under-linux-unix?rq=1 | * http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-06/2426.html | ||
* http://stackoverflow.com/questions/833291/is-there-an-equivalent-to-winapis-max-path-under-linux-unix?rq=1 | |||
=== Решение === | === Решение === | ||
Предложенное решение - необходимо увеличить возможную длину файлов в Linux. | Предложенное решение - необходимо увеличить возможную длину файлов в Linux. | ||
=== Уже сделано === | === Уже сделано === | ||
Был проведен тест файловой системы | Был проведен тест файловой системы NTFS. Оказалось, что на данной можно создавать файлы с длинным русским именем, из чего следовало, что ограничение задается самой ФС, а не ядром или библиотекой glibc: | ||
https://bugs.etersoft.ru/show_bug.cgi?id=9266<br> | https://bugs.etersoft.ru/show_bug.cgi?id=9266<br> | ||
Было решено выбрать файловую систему, которую легче всего было бы адаптировать для решения данной проблемы. Затем было проведено сравнение самых распространенных и перспективных файловых систем: | Было решено выбрать файловую систему, которую легче всего было бы адаптировать для решения данной проблемы. Затем было проведено сравнение самых распространенных и перспективных файловых систем: | ||
http://wiki.etersoft.ru/Comparison_of_file_systems | http://wiki.etersoft.ru/Comparison_of_file_systems | ||
Стоит рассмотреть такие системы как btrfs, xfs, ext4. | |||
В итоге была выбрана BTRFS. | В итоге была выбрана BTRFS. | ||
== BTRFS == | == BTRFS == | ||
B TRee File System - файловая система, основанная на структуре Б-деревьев и работающая по принципу «копирование при записи». | B TRee File System - файловая система, основанная на структуре Б-деревьев и работающая по принципу «копирование при записи». | ||
=== Изменения === | === Изменения === | ||
Изначально изменен предел BTRFS_NAME_LEN, заданный в файле /fs/btrfs/ctree.h. Аналогичный предел был изменен в пакете BTRFS-progs. В итоге, тест, создающий файл с именем, состоящим из 150 русских символов, проверяющий работу основных функций, (glibc_vlfn_test: git.eter:/people/reprofy/public/glibc_tests.git) выводит:<br> | Изначально изменен предел BTRFS_NAME_LEN, заданный в файле /fs/btrfs/ctree.h. | ||
Аналогичный предел был изменен в пакете BTRFS-progs. В итоге, тест, создающий файл с именем, состоящим из 150 русских символов, проверяющий работу основных функций, (glibc_vlfn_test: git.eter:/people/reprofy/public/glibc_tests.git) выводит:<br> | |||
<source lang=c>[root@host-35 btrfs]# ./glibc_vlfn_test | <source lang=c>[root@host-35 btrfs]# ./glibc_vlfn_test | ||
creat_test: working | creat_test: working |
Версия 19:58, 19 ноября 2013
VLFN(Very Long FileName) - проблема, заключающаяся в том, что в GNU/Linux применено ограничение в 255 байт на длину имени файла, что при использовании UTF-8 даёт для русских букв не более 127 символов.
Длинные имена файлов в Linux
Увеличение длин имен файлов в Linux.
Имена файлов в Windows и Linux
В Windows для именования файлов принята кодировка UTF-16, то есть каждый символ в названии файла кодируется двумя байтами (16 бит). Максимальная длина имени файла — 255 символов (510 байт). В Linux же для именования файлов принята кодировка UTF-8, при этом максимальная длина файла составляет 255 байт (а не символов).
Постановка задачи
Так как в UTF-8 для кодирования русских букв используется два байта, то максимальная длина имени файла, состоящего из русских букв, фактически составляет 127 символов. В связи с этим появляется проблема - длинные имена файлов (от 128 до 255 русских символов) не влезают в имена файлов в Linux.
Упоминания данной проблемы:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-06/2426.html
- http://stackoverflow.com/questions/833291/is-there-an-equivalent-to-winapis-max-path-under-linux-unix?rq=1
Решение
Предложенное решение - необходимо увеличить возможную длину файлов в Linux.
Уже сделано
Был проведен тест файловой системы NTFS. Оказалось, что на данной можно создавать файлы с длинным русским именем, из чего следовало, что ограничение задается самой ФС, а не ядром или библиотекой glibc:
https://bugs.etersoft.ru/show_bug.cgi?id=9266
Было решено выбрать файловую систему, которую легче всего было бы адаптировать для решения данной проблемы. Затем было проведено сравнение самых распространенных и перспективных файловых систем:
http://wiki.etersoft.ru/Comparison_of_file_systems
Стоит рассмотреть такие системы как btrfs, xfs, ext4.
В итоге была выбрана BTRFS.
BTRFS
B TRee File System - файловая система, основанная на структуре Б-деревьев и работающая по принципу «копирование при записи».
Изменения
Изначально изменен предел BTRFS_NAME_LEN, заданный в файле /fs/btrfs/ctree.h.
Аналогичный предел был изменен в пакете BTRFS-progs. В итоге, тест, создающий файл с именем, состоящим из 150 русских символов, проверяющий работу основных функций, (glibc_vlfn_test: git.eter:/people/reprofy/public/glibc_tests.git) выводит:
[root@host-35 btrfs]# ./glibc_vlfn_test
creat_test: working
access_test: working
chmod_test: working
open_test: working
stat_test: working
read_open_dir_test: working
unlink_test: working
creat_test: working
symlink_test: working
chmod_test: working
fopen_test: working
truncate_test: working
link_test: working
remove_test: working
mkdir_test: working
read_open_dir_test: working
rmdir_test: working
Errors: 0