The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"FreeBSD 6.1 UFS2, ограничение на количество каталогов внутри..."
Отправлено Autopilot, 28-Ноя-06 15:08 
Можно создать не более 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.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру