Найти в Дзене
Записки сисадмина

Linux. Inode. Разбираемся в свойствах файла.

Оглавление

Рубрика «вряд ли столкнешься, но знать надо». Вот пришел ты на собеседование на позицию администратора linux. Все идет гладко, и тут вы доходите до файловых систем.

Вопрос: почему пользователь в системе не может создать файл?

Ну вроде ответ то на поверхности: кончилось место, либо нет прав. А если и с местом, и с правами все в порядке? Вот ситуация: диск не заполнен, а система орет «нет места на устройстве».

Давайте проверим, что же происходит с нашим диском:

-2

Странная ситуация, диск заполнен всего на 75%, никакого резервирования нет.

Вот так мы и знакомимся с термином Inode.

Inode (индексный узел) – это структура данных в файловой системе Unix и Unix-подобных системах, которая хранит информацию об файле или каталоге. Каждый файл или директория имеет уникальный inode, который содержит метаданные, такие как:

  • Размер файла
  • Время создания/изменения/доступа
  • Права доступа
  • Уникальный номер устройства
  • Указатели на блоки данных, хранящие содержимое файла

Количество inodes на файловой системе ограничено, и если они все будут заняты, то даже если на диске останется место, новые файлы создать будет невозможно.

Давайте же проверим inodes на нашем диске:

-3

Вот мы и нашли причину, почему мы не можем создать больше ни одного файла.

Если мы удалим один из файлов, файловая система освободит только один inode и позволит нам создать только один файл.

-4

При попытке создания следующего файла, файловая система снова скажет, что на устройстве нет места.

Чтобы вывести информацию о файле, введем команду "stat". Система покажет нам краткую сводку о правах, размере на диске и использовании файла.

-5

Как увеличить количество inode

В такой ситуации у нас есть 3 пути:

  1. Освободить несколько inode (просто удалить файлы, освобождение произойдет автоматически)
  2. Увеличить количество inode на разделе (уменьшится эффективное пространство раздела и придется создавать на разделе новую файловую систему с потерей всех данных)
  3. Добавить дополнительное пространство (сработает только если при создании файловой системы был указан параметр resize_inode)

Несколько нюансов inode

  • Если файл был удален, inode будет вычищена и восстановить ее данные будет уже невозможно.
  • Hardlink не тратит inode, т.к. это считается тем же файлом в системе, однако hardlink нельзя делать на каталоги.
  • Inodes не содержат имени файла. Все имена файлов хранятся в корневой директории файловой системы, а inodes хранятся в своей родительской директории.
  • В некоторых файловых системах, таких как btrfs и xfs, inodes выделяются динамически, пока не закончится все свободное место на диске.
  • Стандартный размер inode - 256 байт, однако при нехватке места в структуре данных, его можно изменить.

Следите за своими серверами и учитывайте все нюансы при проектировании.