Что такое inodes, почему они могут кончиться и что с этим делать

что такое inodes

Иногда пользователи линукса получают от ОС внезапное сообщение о том, что файл не может быть сохранен, хотя в разделе все есть еще свободное место. Естественно обычный пользователь недоумевает, что произошло? Что это за проблема?

Что такое иноды (inodes)

Inode (дальше — инода) — это сокращение от «index node» — по-русски — индексный узел. Математически он представляет собой структуру данных описания (дескриптор) файла и является базисным понятием, на котором основаны многие юниксные и линуксные файловые системы. Иноды подобны каталогу базовой академической библиотеки, в каком находится информация, связывающая «название-автор книжек» с их физическим местонахождением — комната хранилища, стеллаж, полка.

Другими словами, иноды — это данные о данных либо метаданные, как обычно говорят айтишники.

Какие данные хранятся в inodes (описание инода в POSIX)

Linux иноды содержит довольно много метаданных:

  • размер файла (в байтах)
  • идентификатор (ID) устройства, содержащего файл
  • ID пользователя-владельца файла ID группы юзеров, к которой принадлежит обладатель
  • права доступа, присвоенные обладателю, группе и т.н. «другим»
  • права чтения, модификации и выполнения для обладателя, группы и других
  • таймштампы моментов последнего доступа и конфигурации файла
  • счетчик количества жестких ссылок на файл (если он не нулевой, то файл нереально удалить)
  • указатели на блоки (кластеры) диска, в каких расположен файл
  • имя папки либо блочного устройства, где размещен файл
  • размер блока файловой системы (ФС) раздела, в каком находится файл
  • количество блоков, занимаемых файлом

Что не хранится в inodes

Инода не содержит время создания файла и его имени. Это атрибуты таблицы директориев (directory table). Когда юзер пробует получить к файлу доступ, происходит последующее:
— по названии файла в таблице директориев определяется соответственный ему номер иноды,
— по номеру иноды происходит воззвание к Inode table и считываются метаданные,
начинается работа с файлом, если это может быть.

В файловых системах, таких как ext3 либо ext4, иноды создаются сходу совместно с ФС. При разработке ФC количество инод определяется параметром -i команды mkfs. Чем больше это число, тем меньше инод создается совместно с ФС. Если создавать ФС с параметром -O largefile, то это будет равносильно заданию -i 1048576, т.е. 1 шт./Мб. А уменьшать -i можно прямо до размера блока, который обычно составляет 4 кб.

Как посмотреть метаданные

Посмотреть метаданные директории либо файла можно командой stat. К примеру:

stat /home

Посмотреть номера инод файлов текущей директории можно командой

ls -i

Посмотреть, как распределились иноды в вашей системе (сколько применено и сколько свободно) можно командой

df -hTi

Иноды — отличное изобретение. Они позволяет более просто воплотить работу LVM (Logical Volume Manager), при помощи которого, набив компьютер приводами жестких дисков, можно «сделать» один большой винчестер. Механизм инод ускоряет работу файловой системы, позволяет существенно уменьшить нарастание дефрагментации, но за все нужно платить: метаданным необходимо какое-то ограниченное место. Потому, если раздел содержит сильно много маленьких файлов, то может случиться так, что запаса инод на всех не хватит, и однажды они могут закончится.

Что делать, если закончились иноды

Что все-таки делать, если кончились иноды?

  • Можно, естественно, перенести данные на другой носитель и пересоздать файловую систему раздела. Страшно, да, но это linux, друзья.
  • А можно поступить разумнее: всю мелочь выгрузить в облако. Если нет доступа к Интернету (бывает же такое), можно просто удалить ненужные файлы (они есть у всех), а мелочь заархивировать (таким образом вы получите один файл, который содержит меньше метаданных).
  • А что если нет ни Интернета, ни лишних файлов, ни флэшки под руками? Тогда остается одно: закрыть все приложения, убедиться, что ОС не «свопит», перебить при помощи утилиты gparted раздел swap в какой-либо применимый для хранения данных, к примеру, FAT, слить туда часть данных, «мелочь» заархивировать и потом добавить в архив слитые данные. Позже вернуть swap-раздел.

Практическое применение

Большинство программ, которые используют сисадмины в операционной системе жестких дисков pfiles могут послужить в данном случае примерами, так как у них есть необходимость естественным образом конвертировать номера инодов в пути файлов и обратно. Это может быть дополнено использованием программы поиска файлов -inum или командой -i.

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

Проблема Y2038

Некоторые файловые системы, которые основаны на инодах, защищены от проблемы Y2038 (известной как Unix time) с учетом предотвращения ‘переполнения’ даты. К сожалению, далеко не все такие файловые системы защищены от таких проблем.

Оставить отклик

Ваш адрес эл.почты не будет опубликован.