Out of inodes: различия между версиями

Материал из Bas Wiki
Перейти к навигации Перейти к поиску
Новая страница: «Создал установку <code>FreeBSD</code> с очень ограниченным количеством места. Получилось так, что…»
 
Нет описания правки
Строка 1: Строка 1:
Создал установку <code>FreeBSD</code> с очень ограниченным количеством места. Получилось так, что дерево портов по команде <code>portsnap extract</code> не помещалось на раздел в 2 ГБ, хотя по факту оно занимает менее 1 ГБ. В логах можно увидеть ошибку "out of inodes".
Создал установку FreeBSD с очень ограниченным количеством места. Получилось так, что дерево портов по команде <code>portsnap extract</code> не помещалось на раздел в 2 ГБ, хотя по факту оно занимает менее 1 ГБ. В логах можно увидеть ошибку "out of inodes".<br />
 
<br />
Почему так? Смотрим <code>man newfs</code>:
Почему так? Смотрим <code>man newfs</code>:
<source lang="text">-f frag-size
<source lang="text">-f frag-size
Строка 14: Строка 14:
             is required for each distinct file, so this value effectively
             is required for each distinct file, so this value effectively
             specifies the average file size on the file system.</source>
             specifies the average file size on the file system.</source>
Если кратко, то:
Если кратко, то:
- размер фрагмента (frag-size) по умолчанию 4096 байт
* размер фрагмента (frag-size) по умолчанию 4096 байт
- каждая inode создаётся для (4 * frag-size) байт, т.е. в нашем случае для (4 * 4096) или 16384 байт<br />
* каждая inode создаётся для (4 * frag-size) байт, т.е. в нашем случае для (4 * 4096) или 16384 байт<br />
<br />
<br />
По этой причине нам может не хватить количества inode на маленьких раздела, даже не смотря на то, что место есть. Особенно это актуально, если у вас много мелких файлов (в моём случае - дерево портов). Для решения этой проблемы необходимо пересоздать раздел, уменьшив количество байт, выделяемых под inode.<br />
По этой причине нам может не хватить количества inode на маленьких раздела, даже не смотря на то, что место есть. Особенно это актуально, если у вас много мелких файлов (в моём случае - дерево портов). Для решения этой проблемы необходимо пересоздать раздел, уменьшив количество байт, выделяемых под inode.<br />

Версия от 11:10, 9 апреля 2015

Создал установку FreeBSD с очень ограниченным количеством места. Получилось так, что дерево портов по команде portsnap extract не помещалось на раздел в 2 ГБ, хотя по факту оно занимает менее 1 ГБ. В логах можно увидеть ошибку "out of inodes".

Почему так? Смотрим man newfs:

-f frag-size
             The fragment size of the file system in bytes.  It must be a
             power of two ranging in value between blocksize/8 and blocksize.
             The default is 4096 bytes.

-i bytes
             Specify the density of inodes in the file system.  The default is
             to create an inode for every (4 * frag-size) bytes of data space.
             If fewer inodes are desired, a larger number should be used; to
             create more inodes a smaller number should be given.  One inode
             is required for each distinct file, so this value effectively
             specifies the average file size on the file system.

Если кратко, то:

  • размер фрагмента (frag-size) по умолчанию 4096 байт
  • каждая inode создаётся для (4 * frag-size) байт, т.е. в нашем случае для (4 * 4096) или 16384 байт


По этой причине нам может не хватить количества inode на маленьких раздела, даже не смотря на то, что место есть. Особенно это актуально, если у вас много мелких файлов (в моём случае - дерево портов). Для решения этой проблемы необходимо пересоздать раздел, уменьшив количество байт, выделяемых под inode.

ВНИМАНИЕ! Данные необходимо сохранить перед пересозданием раздела, иначе они будут потеряны! Сохранив данные пишем:

# newfs -O 2 -i 1024 /dev/da1p1

..., и радуемся новому разделу с большим количеством inode :)