Рубрика «вряд ли столкнешься, но знать надо». Вот пришел ты на собеседование на позицию администратора linux. Все идет гладко, и тут вы доходите до файловых систем.
Вопрос: почему пользователь в системе не может создать файл?
Ну вроде ответ то на поверхности: кончилось место, либо нет прав. А если и с местом, и с правами все в порядке? Вот ситуация: диск не заполнен, а система орет «нет места на устройстве».
Давайте проверим, что же происходит с нашим диском:
Странная ситуация, диск заполнен всего на 75%, никакого резервирования нет.
Вот так мы и знакомимся с термином Inode.
Inode (индексный узел) – это структура данных в файловой системе Unix и Unix-подобных системах, которая хранит информацию об файле или каталоге. Каждый файл или директория имеет уникальный inode, который содержит метаданные, такие как:
- Размер файла
- Время создания/изменения/доступа
- Права доступа
- Уникальный номер устройства
- Указатели на блоки данных, хранящие содержимое файла
Количество inodes на файловой системе ограничено, и если они все будут заняты, то даже если на диске останется место, новые файлы создать будет невозможно.
Давайте же проверим inodes на нашем диске:
Вот мы и нашли причину, почему мы не можем создать больше ни одного файла.
Если мы удалим один из файлов, файловая система освободит только один inode и позволит нам создать только один файл.
При попытке создания следующего файла, файловая система снова скажет, что на устройстве нет места.
Чтобы вывести информацию о файле, введем команду "stat". Система покажет нам краткую сводку о правах, размере на диске и использовании файла.
Как увеличить количество inode
В такой ситуации у нас есть 3 пути:
- Освободить несколько inode (просто удалить файлы, освобождение произойдет автоматически)
- Увеличить количество inode на разделе (уменьшится эффективное пространство раздела и придется создавать на разделе новую файловую систему с потерей всех данных)
- Добавить дополнительное пространство (сработает только если при создании файловой системы был указан параметр resize_inode)
Несколько нюансов inode
- Если файл был удален, inode будет вычищена и восстановить ее данные будет уже невозможно.
- Hardlink не тратит inode, т.к. это считается тем же файлом в системе, однако hardlink нельзя делать на каталоги.
- Inodes не содержат имени файла. Все имена файлов хранятся в корневой директории файловой системы, а inodes хранятся в своей родительской директории.
- В некоторых файловых системах, таких как btrfs и xfs, inodes выделяются динамически, пока не закончится все свободное место на диске.
- Стандартный размер inode - 256 байт, однако при нехватке места в структуре данных, его можно изменить.
Следите за своими серверами и учитывайте все нюансы при проектировании.