Linux максимальное количество файлов в папке
Пошагово разберем процесс установки ограничений на использование дискового пространства в системах Linux. Какой дистрибутив — не важно. Процесс немного различается для файловых систем XFS и EXT4/остальных — мы разберем оба варианта.
Установка пакета quota
Установка пакета для управления квотами выполняется из репозитория.
а) для систем на базе RPM (Red Hat, CentOS):
yum install quota
б) для систем на базе deb (Debian, Ubuntu):
apt-get install quota
Настройка раздела
Для возможности управлять квотами для определенного раздела необходимо его смонтировать с соответствующими опциями. Для файловых систем XFS и не XFS (например, ext) эти опции различаются:
- Для XFS — uquota (для пользователей) и/или gquota (для групп).
- Для ext и других — usrquota (для пользователей)и/или grpquota (для групп).
И так, чтобы добавить нужные опции для включения квотирования, откроем файл fstab:
Находим настройку для монтирования раздела, на который необходимо установить квоту и добавим нужные опции:
/dev/sda / ext4 defaults ,usrquota,grpquota 0 0
/dev/sdb /var xfs defaults ,uquota,gquota 0 0
* в данном примере мы добавили опции usrquota и grpquota для устройства /dev/sda, примонтированного в качестве корневого раздела / с файловой системой ext. А также опции uquota и gquota для устройства /dev/sdb (монтируется в /var с файловой системой xfs). Если необходимо включить квоту только для пользователей или групп, оставляем соответствующие опции.
* существуют и другие опции, например, jqfmt нужна для указания формата квоты при использовании журналирования. Подробнее описано в таблице Опции системы квот в файле /etc/fstab сайта IBM.
Перемонтируем наши разделы:
mount -o remount /
mount -o remount /var
Проверим, что нужные нам разделы теперь смонтированы с опциями квотирования:
mount | grep quota
Мы увидим, примерно, следующее:
/dev/sda on / type ext4 (rw,relatime, quota,usrquota,grpquota ,data=ordered)
/dev/sdb on /var type xfs (rw,relatime,attr2,inode64, usrquota,grpquota )
Квоты включены для разделов.
Корневая директория (/) + XFS
При попытке включить квоту для корневой директории XFS с помощью файла fstab, результат будет нулевым — в опциях монтирования мы будем наблюдать noquota, например:
/dev/sda on / type xfs (rw,relatime,attr2,inode64, noquota )
Для включения опции квотирования необходимо отредактировать загрузчик. Для этого открываем файл:
Находим строку GRUB_CMDLINE_LINUX и дописываем в нее rootflags=uquota,gquota — в моем случае получилось так:
.
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vg/root rd.lvm.lv=vg/swap rhgb quiet floppy.allowed_drive_mask=0 rootflags=uquota,gquota "
.
На всякий случай, сохраним конфигурационный файл загрузчика:
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup
. и применим настройки grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
После перезагрузки мы должны наблюдать такую картину:
mount | grep quota
/dev/mapper/vg-root on / type xfs (rw,relatime,attr2,inode64, usrquota,grpquota )
Квоты включены для корневого раздела с файловой системой XFS.
Включение квот
И так, мы разрешили квоты для разделов. Теперь включаем квоты. Процессы для XFS и остальных файловых систем немного различаются. Мы рассмотрим оба варианта. Так как в нашем примере есть разделы для XFS и Ext, то мы выполним все варианты настроек.
После монтирования раздела с файловой системой XFS автоматически включается квотирование (если была задана соответствующая опция). Проверить состояние можно, войдя в режим экспертного управления квотами:
. и выполнив команду для получения статуса:
Ext и другие
. при наличии разделов с включенной квотой на XFS мы можем увидеть:
quotacheck: Skipping /dev/sdb [/var]
* это нам говорит о том, что команда quotacheck пропускаем раздел с xfs.
Включаем квоту для разделов:
Установка квот
Пришло время задать квоты. Они устанавливаются с помощью команды edquota.
Квоты пользователей
Для пользователя, вводим команду:
edquota -u dmosk
* где dmosk — имя пользователя, для которого будет задана квота.
В открывшемся редакторе можно задать ограничение на использование разделов, для которых включена квота:
Disk quotas for user dmosk (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda 20 0 10M 8 0 0
/dev/sdb 0 0 20M 0 0 0
- Filesystem — дисковое устройство, для которого устанавливается квота.
- blocks — текущее количество используемых пользователем блоков.
- первый soft — мягкая квота на объем данных (при ее превышении отправляется уведомление по почте, а после периода отсрочки, который по умолчанию составляет 7 дней, мягкая квота становится жесткой).
- первый hard — жесткая квота на объем данных (при ее превышении дальнейшая запись будет запрещена).
- inodes — текущее количество файлов, используемых пользователем.
- второй soft — мягкая квота на количество файлов (при ее превышении отправляется уведомление по почте).
- второй hard — жесткая квота на количество файлов (при ее превышении дальнейшая запись будет запрещена).
* в данном примере мы задали жесткую квоту для пользователя dmosk в 10 Мб на /dev/sda (корневой раздел) и 20 Мб на /dev/sdb (/var).
Квоты для групп
Для группы, задаем квоту так:
Как и в случае с пользователем, откроется редактор, с помощью которого можно задать квоту:
Disk quotas for group mail (gid 12):
Filesystem blocks soft hard inodes soft hard
/dev/sda 0 0 30M 6 0 0
/dev/sdb 0 0 40M 0 0 0
* в данном примере мы зададим квоту для группы в 30 Мб на /dev/sda (корневой раздел) и 40 Мб на /dev/sdb (/var).
Копирование квот
Мы также можем копировать квоты для пользователей. Для этого используется та же команда edquota с ключом -p:
edquota -p dmosk ivanov
* в данном примере мы скопируем настройку квотирования, которая применяется к dmosk на другого пользователя ivanov.
Настройка периода отсрочки
Как было упомянуто выше, мягкие ссылки являются мягкими только в течение периода отсрочки. Данный период по умолчанию равен 7 дням. Его можно задать командой edquota с ключом -t:
В открывшемся окне задаем новые значения:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/mapper/vg-root 8days 9days
/dev/sdb 8days 9days
* в данном примере мы задали 8 дней для квот на дисковое пространство и 9 дней — на количество файлов.
Просмотр и проверка квот
Ограничения настроены. Проверим.
Отчет по квотам
Чтобы посмотреть отчет об используемом пространстве и установленных квотах, вводим команду:
* для отчета корневого раздела только по пользовательским (u) квотам в режиме удобного чтения (s).
* для отчета по разделу /var для групп.
Мы увидим что-то на подобие:
*** Report for user quotas on device /dev/sda
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 2862M 0K 0K 115k 0 0
polkitd -- 0K 0K 0K 2 0 0
tss -- 8K 0K 0K 2 0 0
postfix -- 4K 0K 0K 38 0 0
chrony -- 4K 0K 0K 3 0 0
dmosk -- 20K 0K 10240K 8 0 0
rpc -- 0K 0K 0K 2 0 0
ntp -- 4K 0K 0K 3 0 0
.
* как видим, это отчет по использованию раздела /. Мы видим, каким пользователем сколько занято дискового пространства и видим, что для нашего пользователя dmosk установлена квота в 10 Мб (10240 Кб).
Проверка
И так, мы настроили для пользователя dmosk ограничение на использование дискового пространства. Попробуем превысить данный лимит. Заходим в консоль под нужным пользователем:
dd if=/dev/zero of=/tmp/tmp_dmosk_file bs=1024000 count=100
* команда должна создать файл на 100 Мб в каталоге tmp.
dd: ошибка записи «/tmp/tmp_dmosk_file»: Превышена дисковая квота
11+0 записей получено
10+0 записей отправлено
скопировано 10240000 байт (10 MB), 0,223768 c, 45,8 MB/c
Другие квоты
Иногда, необходимо установить квоту в рамках определенной программы или каталога.
Однако, квоты так не работают и нет возможности задать их для определенного каталога или программы. Но это не означает, что выхода нет.
Квота на директорию
Чаще всего, нет необходимости задавать квоту на всю систему — нужно только ограничение размера директории. В данной ситуации нам нужно примонтировать диск к нужной директории и задать квоту на примонтированный раздел.
Квоты в samba
Как правило, речь в контексте samba идет о ограничения на использование шары. Для этого необходимо каждую шару поместить на отдельный раздел, каждый со своей квотой.
Также в файловом сервере samba есть возможность настройки квотирования на уровне программного обеспечения. В конфигурационном файле при настройке шары добавим:
[share]
.
vfs objects = default_quota
default_quota:uid = 1022
default_quota:uid nolimit = no
.
* в данном примере мы задаем квоту на каталог share. Данная квота должна быть такой же, как у системного пользователя с uid 1022. Таким образом, системные квоты должны быть настроены.
Для samba есть также параметр max disk size, который не является ограничением, а просто показывает для других программ максимальный объем доступного пространства.
Квоты в vsftpd
Настраивая vsftpd, мы также должны позаботиться о том, чтобы каталоги с FTP были на разделах с установленными квотами. Другими словами — вопрос также решается с применением пакета quota.
файловая система - ext4. Сейчас файлов в одной папке 100к, новые файлы добавляются каждый день (теоретически, максимум может стать до 5 млн.) Файлы размером 3-6 кб, имя файла в виде хеша md5 (если эта информация нужна). Сейчас параллельный случайный доступ к файлам работает быстро. Вопрос: когда начнет тормозить? И начнет ли вообще? если файлов станет 500к/1 млн/5 млн? Есть информация, что на NTFS все работает нормально при 25 млн. файлов в папке, естественно если не проводником заходить :) Как обстоят дела с ext4, пишут что если файлов много, то кончаться иноды?
Есть информация, что на NTFS все работает нормально при 25 млн. файлов в папке
охотно верим, бгг
reiserfs чем не нравится?
reiserfs вроде стандартом не идет, там какая то версия древняя. надо будет на продакшене с бубном танцевать, стремно запороть все. работает не трогай как говорят. просто хочу узнать ext4 потянет? кто сталкивался?
Нормальная версия. УМВР. Зато не эти помои extX.
Задай при создании их кол-во с запасом.
С какой целью интересуешься?
никакая не древняя.
ты думаешь всё новое лучше?
а экст. можно при создании задать инодов по-больше
megabaks ★★★★ ( 17.02.14 20:01:57 )надо будет на продакшене с бубном танцевать
Последнее исправление: megabaks 17.02.14 20:02:34 (всего исправлений: 1)
почитай об ext4 о структуре директории, список или дерево, узнаешь будет тормозить или нет.
Та ну его в инод! Пущай vfat ставит, раз ССЗБ такой!
Если создать на ext4 файл с raiserfs и примонтировать куда нужно, так можно? не закончатся иноды?
Ну что за извращение? Отформатируй уже раздел по-человечески. А так — ну, будет у тебя тупить, как собака, т.к. 2ФС.
Если уж делать нефиг и хочется на свою пятую точку приключений, переформатируй в ext4 с увеличенным количеством инодов.
для начала надо бы df -i посмотреть, а то советуете не глядя.
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb 61046784 8198556 52848228 14% /var/www
заполнишь почти 53 млн. файлов приходи
Если файлы 3-6 кб, то наверное рациональнее было создавать фс с параметром mkfs.ext4 -i 4096 /dev/sdx , так на одну иноду будет приходиться 4096 байт (по дефалту 16, в /etc/mke2fs.conf записано), потери были бы наверное значительно меньше (может вдвое, если распределение равномерное). Если распределение равномерное между 3 и 6 кб, то ориентировочно иноды закончатся примерно на 31% места ( средний размер файла = (3+6)/2 = 5кб, 5/16 = 0,3125 - отношение занятого места к всему месту на диске)
Если бы фс была создана с параметром -i 4096 то при том же распределении размера файлов место бы закончилось где-то 71,4%
1) Файлы от 3х до 4х кб влезают в иноду, это четверть от всех файлов (предполагая равномерное распределение).
2) Файлы от 4х кб до 6кб, влезают в одну иноду полностью и одну иноду заполняют в среднем на четверть, это 75% от всех файлов.
Итого:
1) 25% раздела заполенны точно.
2) 75% раздела на половину заполнены, т.е. ещё 37,5% от раздела заполнены.
3) и 35.5% раздела заполнены на четверть, т.е. 35.5%/4 = 8,875% от раздела.
Значит заполнятся 25 + 37,5 + 8,875 = 71,375% раздела, что несколько лучше чем 31%.
Говорят что reiserfs (или reiser4, не уверен) относится к месту на диске гораздо лучше, потому что умеет паковать концы файлов прямо в иноду. Поэтому при большом кол-ве мелких файлов я бы попробовал её, если сильно не устраивают получившиеся цифры.
На хостинге меня пугали, что больше 3000 файлов в одной папке держать крайне не желательно, замедляется производительность доступа к этим файлам. Погуглил, люди сотнями тысяч хранят, вроде.
- Вопрос задан более трёх лет назад
- 13842 просмотра
10 тысяч — вполне нормальное число.
50 тысяч и больше — стоит подумать о подпапках и иерархичности папок / документов.
Если ответить коротко — зависит от ограничений файловой системы.
Это, пожалуй, индивидуальная мера для выбранной системы, на каком количестве файлов начнутся тормоза.
На практике, чем больше файлов в папке — тем медленнее листинг. Индивидуальный доступ к одному файлу из 30 тыс. может не отличаться по скорости(если в директорию никогда не заходить через терминал), но листинг может занять несколько минут и загрузить процессор.
Лично я распределяю по удобству копирования и архивации, примерно по несколько сотен файлов(до тысячи) в одной папке.
Под Линуксом используются разные файловые системы и у них разные ограничения.Наиболее распространены ext3 и ext4, но не так редко бывает RaserFS, XFS и пр.
Например, в ext3 выделяется 655360 inodes на раздел и когда они кончаются, записать ничего нельзя. Да? А как тогда объяснить это? ;)
Вот маленькая корневая система на домашнем компьютере:
shrike
Если я правильно понимаю, то количество инодов определяется параметром -i команды mkfs, чем больше это число, тем меньше инодов создаётся на ФС.
Если создавать ФС с параметром -O largefile, это будет аналогично заданию -i 1048576, т.е. 1 инод на 1 мегабайт. А уменьшать -i можно вплоть до размера блока, который для x86(_64)-систем составляет 4Кб
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/md1 121864192 216052 121648140 1% /
tmpfs 4119873 2 4119871 1% /dev/shm
/dev/md3 122109952 13398777 108711175 11% /u0
/dev/md4 292962304 11 292962293 1% /u1
Этот вывод какбэ намекает, что в корневой ФС — 121 млн инодов, а в /u1 и того больше.
сколько файлов может содержать папка? У меня 30К папок в папке 1. Каждая из папок имеет 1 файл изображения. Есть ли ограничение на количество файлов в папке может храниться?
Я использую Windows Server 2003, IIS6.
Примечание: предполагая NTFS, так как никто в здравом уме не будет использовать FAT ни для чего другого, кроме USB-накопителей или карт памяти, не говоря уже о сервере (ok, это мысль-это страшно).
Да, есть предел. Хранение большего количества файлов, чем частиц во Вселенной, может оказаться непрактичным. Однако фактический предел значительно меньше.
NTFS имеет максимум 4,294,967,295 (2 32 - 1) файлов на томе. Некоторые из них уже используются самой файловой системой, и папка также должна считаться файлами.
30,000 не так уж много файлов. Но Microsoft рекомендует что ты выключить автоматическое создание DOS-совместимых коротких имен, если вы двигаетесь мимо 300,000, как найти уникальное короткое имя становится трудно, то.
там нет практических ограничений на объединенные размеры всех файлов в папке, хотя могут быть ограничения на количество файлов в папке. Что еще более важно, существуют ограничения на размер отдельных файлов, которые зависят от того, какую файловую систему вы используете на жестком диске. ("Файловая система" - это не что иное, как спецификация того, как именно файлы хранятся на диске.)
разберем по файловой системе:
•жир aka FAT16
жир, для таблицы распределения файлов, является преемником оригинальной файловой системы FAT12, поставляемой с MS-DOS много, много лет назад.
Maximum максимальный размер диска: 4 гигабайта
◦максимальный размер файла: 4 ГБ
◦максимальное количество файлов на диске: 65,517
Maximum максимальное количество файлов в одной папке: 512 (если я правильно помню, корневая папка "/" имела нижний предел 128).
•FAT32
" там нет практических лимит на общий размер всех файлов в папке, хотя там может быть ограничения на количество файлов в папке."FAT32 был введен для преодоления некоторых ограничений FAT16.
◦максимальный размер диска: 2 ТБ
◦максимальный размер файла: 4 ГБ
◦максимальное количество файлов на диске: 268,435,437
◦максимальное количество файлов в одной папке: 65 534
•NTFS
NTFS, или " новая технология Файловая система", введенная в Windows NT, является полностью переработанной файловой системой.
◦максимальный размер диска: 256 терабайт
◦максимальный размер файла: 256 терабайт
◦максимальное количество файлов на диске: 4,294,967,295
◦максимальное число файлов в одной папке: 4,294,967,295
обратите внимание, что когда я говорю "диск" выше, я действительно говорю о "логических" дисках, не обязательно физических. Никто не делает 256 терабайт диск, но с помощью NTFS массив дисков можно рассматривать как один логический диск. Предположительно, если у вас их достаточно, вы можете построить огромный логический диск.
Также обратите внимание, что ограничение NTFS в 256 терабайт вполне может быть просто ограничение реализации - я читал, что формат NTFS может поддерживать диски до 16 эксабайт (16 раз 1,152,921,504,606,846,976 байт).
Читайте также: