Inode отслеживают все файлы в системе Linux. За исключением имени файла и фактического содержимого файла, inode сохраняют все остальное. Это похоже на файловую структуру данных, которая содержит метаданные обо всех файлах в системе.
Inode, или “index nodes (индексные узлы)”, были впервые представлены в операционной системе Unix в 1970-х годах. В 90-х годах Linux внедрил ту же концепцию, которая используется до сих пор. В значительной степени правильная работа всей операционной системы зависит от индексов. В этом посте будет объяснено, почему.
В системе Linux файлы хранятся в виде блоков определенного размера. Если файл больше этого заданного размера, он разбивается на фрагменты и сохраняется пустыми блоками везде, где они доступны на диске. С увеличением количества файлов это может легко привести к путанице. Inode помогают системе упорядочивать данные.
Хотя inode не хранят фактическое содержимое файла, они содержат расположение различных фрагментов для каждого файла вместе с другими метаданными, включая:
Поскольку inode не хранят имя файла, не имеет значения, вырезаем ли мы и вставляем файл в другое место на виртуальном диске или переименовываем его — файл все равно будет физически находиться в том же месте. Для этого не требуется вносить изменения в данные inode, что является одной из особенностей, которая делает их такими гибкими.
Хотя inode могут помогать управлять файлами, они также имеют определенные ограничения. Точно так же, как файлы хранятся в единицах заданного размера, индексные индексы также хранятся блоками, что позволяет файлу размером до 4 МБ в одиночку занимать индексный индекс размером 32 байта.
Когда это происходит, косвенный указатель в inode указывает на другой inode. Файл размером в сотни Мегабайт может привести к использованию цепочки индексных индексов только для одного файла, и это быстро исчерпает количество доступных индексных индексов.
Даже при использовании небольших файлов, если их в системе достаточно, все доступные inode могут быть исчерпаны, потому что в системе доступно только ограниченное количество inode. Хотя это число можно увеличить, это сопряжено с риском. Изменение количества inode требует полной перестройки диска, что может привести к полной потере данных. Это связано с тем, что команда mkfs имеет опцию i, которую можно использовать для установки параметра байт на inode при форматировании диска. Меньшее число здесь гарантирует, что для данного диска будет создано больше inode.
Есть несколько признаков того, что в системе закончились inode. Поскольку inode необходимы для хранения местоположения файла, при создании нового файла он просто не будет отображаться на компьютере. Это произойдет, даже если на диске достаточно свободного места.
Также могут возникать и другие проблемы, такие как сбой приложений, перезапуск операционной системы или невыполнение запланированных задач. Если эти проблемы возникают часто, это признак исчерпания индексных индексов.
Каждая система Linux имеет свой собственный лимит inode, основанный на системном оборудовании. Мы можем использовать «файловую систему диска» (команда df), чтобы получить эти цифры. Например, на скриншоте на рисунке 1 показана информация об inode с ноутбука MacBook Pro с диском емкостью 1 ТБ.
Используемая здесь команда:
df -i
Этот вывод показывает несколько столбцов со следующими значениями:
Эта команда позволяет легко проверить количество inode и объем доступного хранилища. Общее количество индексных индексов, доступных для данного диска, может быть рассчитано путем сложения значений в столбцах iused и ifree. Хотя эти цифры и высоки, для современных компьютеров они все еще ограничены. Теоретически максимальное количество inode, которое может иметь система, составляет 2^32, или 4,3 миллиарда inode. Но практически это число близко к 1: 16 КБ от емкости системы.
Как отмечалось выше, даже если на диске достаточно свободного места для создания новых файлов, inode все равно могут быть исчерпаны. Например, на рисунке 1 доступно 480 МБАЙТ дискового пространства и 4 910 520 индексных индексов свободны в файловой системе /dev/disk1s2.
Это слишком много индексных индексов. Но если мы создадим на этом диске 4 910 520 файлов размером всего в 1 байт каждый, это займет все доступные индексные индексы, потребляя при этом всего 5 МБ дискового пространства. Итак, несмотря на то, что на диске доступно более 400 МБ свободного места, новые файлы не могут быть созданы. Это проблема с нехваткой inode в системе Linux.
Вы можете возразить, что никто не собирается создавать 4 миллиона маленьких файлов, и это может быть правдой. Но некоторые приложения могут. Например, приложение может сохранять каждое электронное письмо в виде файла на диске и со временем создавать множество небольших файлов.
Как только начнут появляться предупреждающие знаки, упомянутые ранее, первое, что нужно сделать, это использовать команду df -i, чтобы проверить количество доступных inode. Эта команда предоставит фактическое количество индексных индексов, что позволит легко увидеть, полностью ли они исчерпаны или просто заканчиваются.
После того, как вы установили, что проблема связана с inode, следующим шагом будет удаление всех ненужных файлов на диске. Для этого требуется идентифицировать такие файлы по их источнику. На примере приложения электронной почты было бы полезно настроить приложение для сохранения всех электронных писем в определенном месте. Затем вы можете удалить эти небольшие файлы из этого места или непосредственно из самого приложения.
Другой способ вернуть некоторые inode — это очистить кэш и временные файлы. В зависимости от выбранной операционной системы или дистрибутива Linux меняется расположение для хранения временных файлов. Это верно и для кэшированных файлов.
Следующее место, куда следует обратиться, — это каталоги, где хранятся временные файлы, о которых часто забывают. Примером может служить каталог downloads, который можно очистить от ненужных файлов.
Наконец, сортировка всех файлов в заданном расположении или директории по размеру файла упрощает идентификацию небольших файлов, которые вам, возможно, больше не понадобятся и которые, следовательно, можно удалить. Команда для составления списка файлов в порядке возрастания по размеру файла:
ls -laShr <path_to_directory>
На рисунке 2 ниже показан скриншот вывода этой команды со списком всех файлов и каталогов в указанном месте на ноутбуке MacBook Pro.
Команда delete file может быть передана вместе с этой командой для автоматического удаления ненужных небольших файлов. Однако удаление файлов таким способом может быть опасным, особенно если пользователь не знает, какие файлы являются целевыми. Естественно, удаление файлов, необходимых для правильного функционирования приложения, вызовет проблемы.
Если удаление файлов невозможно, единственный другой способ увеличить количество inode — это перераспределить весь диск, что, если не сделано должным образом, может привести к потере данных или другим проблемам.
Хотя это случается редко, проблемы с inode не являются чем-то неслыханным. Понимание использования inode помогает правильно диагностировать проблему. Используя несколько наиболее часто используемых команд Linux, мы можем легко подтвердить, являются ли inode источником проблемы или нет.
Также существует множество команд Linux, позволяющих легко определять небольшие и ненужные файлы для удаления. Это гарантирует наличие достаточного количества индексных индексов для создания новых файлов и обеспечения оптимальной производительности системы.