The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"FreeBSD 6.1 UFS2, ограничение на количество каталогов внутри..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"FreeBSD 6.1 UFS2, ограничение на количество каталогов внутри..."  
Сообщение от Autopilot email(ok) on 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.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "FreeBSD 6.1 UFS2, ограничение на количество каталогов внутри..."  
Сообщение от butcher (ok) on 28-Ноя-06, 21:31 
>Просьба к знатокам и гуру - на какие грабли можно напороться, реализовав
>эти исправления?
>Не просто так ограничение существовало. К сожалению, я недостаточно хорошо знаю английский,
>чтобы запросить в список рассылки FreeBSD.

Ваших изменений мало. Нужно "прошерстить" код ядра на предмет имён, типы которых вы изменили. И исправить все их некорректные использования, как, например, здесь:
http://freebsd.rambler.ru/bsdmail/freebsd-questions_1999/msg13462.html

Вот, собственно, объяснение, почему происходит ошибка:
http://freebsd.rambler.ru/bsdmail/freebsd-questions_1999/msg13612.html

А ограничение это, судя по всему, из-за банального снижения производительности при большом кол-ве каталогов..

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "FreeBSD 6.1 UFS2, ограничение на количество каталогов внутри..."  
Сообщение от idle (??) on 28-Ноя-06, 21:35 
Тут лежит патч: http://lists.freebsd.org/pipermail/freebsd-fs/2005-March/001001.html,
и несколько succesful stories.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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