Out of inodes
Создал установку 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 :)