Linux/VLFN: различия между версиями

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску
(Новая страница: «'''VLFN'''(''Very Long FileName'') - проблема, заключающаяся в том, что ограничение на длину русских имен…»)
 
Строка 21: Строка 21:
=== Изменения ===
=== Изменения ===
Изначально изменен предел BTRFS_NAME_LEN, заданный в файле /fs/btrfs/ctree.h. Аналогичный предел был изменен в пакете BTRFS-progs. В итоге, тест, создающий файл с именем, состоящим из 150 русских символов (glibc_vlfn_test: git.eter:/people/reprofy/public/glibc_tests.git) выводит:
Изначально изменен предел 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  
[root@host-35 btrfs]# ./glibc_vlfn_test <br>
creat_test: working
creat_test: working<br>
access_test: working
access_test: working<br>
chmod_test: working
chmod_test: working<br>
open_test: working
open_test: working<br>
stat_test: working  
stat_test: working <br>
read_open_dir_test: working
read_open_dir_test: working<br>
unlink_test: working  
unlink_test: working <br>
creat_test: working
creat_test: working<br>
symlink_test: working
symlink_test: working<br>
chmod_test: working
chmod_test: working<br>
fopen_test: working
fopen_test: working<br>
truncate_test: working
truncate_test: working<br>
link_test: working
link_test: working<br>
remove_test: working  
remove_test: working <br>
mkdir_test: working
mkdir_test: working<br>
read_open_dir_test: working
read_open_dir_test: working<br>
rmdir_test: working
rmdir_test: working<br>
Errors: 0
Errors: 0<br>

Версия 16:59, 19 ноября 2013

VLFN(Very Long FileName) - проблема, заключающаяся в том, что ограничение на длину русских имен файлов в Linux в два раза меньше, чем в Windows.

Длинные имена файлов в Linux

Увеличение длин имен файлов в Linux.

Имена файлов в Windows и Linux

В Windows для именования файлов принята кодировка UTF-16, то есть каждый символ в названии файла кодируется двумя байтами. Максимальная длина файла 255 символов(511 байт). В 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.

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