Можно создать не более 32767 подкаталогов. Попытка снять ограничение.Каталоги создавались CMS'кой очень крупного сайта. И исправить CMS нет возможности - одна версия обслуживает около сотни сайтов. На линуксе все решалось переходом на reiserfs. Но во фре reiserfs только на чтение.
Поисковики ничего толкового не предоставили. Кое где речь шла о перекомпиляции ядра, но что нужно было изменить не говорилось.
Ограничение в 32767 наводило на мысль, что для хранения использовалось двухбайтовое, но знаковое число. Изменив тип двухбайтового числа на беззнаковое и увеличив лимит, теоритически можно было бы обойти ограничение.Покопавшись в исходниках ядра FreeBSD, нашел ограничение задаваемое константой LINK_MAX.
Далее в /usr/sys/ufs были найдены переменные, сравниваемые с LINK_MAX. Так же пришлось изменить тип числа в исходниках ext2fs - компилятор ругнулся./usr/src/sys/sys/syslimits.h:57
before
#define LINK_MAX 32768 /* max file link count */
after
#define LINK_MAX 65000 /* max file link count *//usr/src/sys/ufs/inode.h:98
before:
int16_t i_nlink; /* File link count */
after:
u_int16_t i_nlink; /* File link count *//usr/src/sys/ufs/dinode.h:127
before:
int16_t di_nlink; /* 2: File link count. */
after:
u_int16_t di_nlink; /* 2: File link count. *//usr/src/sys/ufs/dinode.h:168
before:
int16_t di_nlink; /* 2: File link count. */
after:
u_int16_t di_nlink; /* 2: File link count. *//usr/src/sys/gnu/fs/ext2fs/inode.h:90
before:
int16_t i_nlink; /* File link count */
after:
u_int16_t i_nlink; /* File link count */На виртуальной машине компиляция выполнилось успешно и простенький скрипт насоздавал 64999 каталогов.
#!/bin/sh
a=1
while [ $a -lt 65005 ]
do
echo "$a"
a='expr $a + 1'
mkdir $a
doneПроверка раздела при помощи fsck ошибок не выявило. Но создав еще каталог и запустив там скриптик, исчерпал количество доступных инодов. Так что со снятием ограничения нужно позаботится и о достаточном количестве inode.
Просьба к знатокам и гуру - на какие грабли можно напороться, реализовав эти исправления?
Не просто так ограничение существовало. К сожалению, я недостаточно хорошо знаю английский, чтобы запросить в список рассылки FreeBSD.
>Просьба к знатокам и гуру - на какие грабли можно напороться, реализовав
>эти исправления?
>Не просто так ограничение существовало. К сожалению, я недостаточно хорошо знаю английский,
>чтобы запросить в список рассылки FreeBSD.Ваших изменений мало. Нужно "прошерстить" код ядра на предмет имён, типы которых вы изменили. И исправить все их некорректные использования, как, например, здесь:
http://freebsd.rambler.ru/bsdmail/freebsd-questions_1999/msg...Вот, собственно, объяснение, почему происходит ошибка:
http://freebsd.rambler.ru/bsdmail/freebsd-questions_1999/msg...А ограничение это, судя по всему, из-за банального снижения производительности при большом кол-ве каталогов..
Тут лежит патч: http://lists.freebsd.org/pipermail/freebsd-fs/2005-March/001...,
и несколько succesful stories.