Иноды на хостинге что это
Что такое inode в Linux?
Обновл. 31 Авг 2021 |
Ваша система когда-нибудь жаловалась на то, что у вас не осталось свободного места, в то время как его было явно более чем достаточно?
Иноды и метаданные
Файловая система должна хранить файлы, которые могут находиться в каталогах, которые, в свою очередь, могут иметь подкаталоги. При этом что-то где-то должно записывать информацию о расположении всех файлов файловой системы, имена файлов, их размер, к каким учетным записям они принадлежат, какие у них разрешения и т.д. Данная информация называется метаданными — данные, которые описывают другие данные. Метаданные хранятся в иноде файла.
Инод (или «индексный дескриптор», «inode», от англ. «index node») — это структура данных, в которой хранятся метаданные о стандартных файлах, каталогах или других объектах файловой системы. Каждый используемый инод ссылается на 1 файл. Каждый файл имеет 1 инод. Каталоги, символьные и блочные устройства — всё это является файлами, а значит у каждого из них есть по 1 иноду.
Информация об инодах хранится в специальной таблице, расположенной, обычно, в начале каждого раздела диска. Каждый раздел имеет свою, отдельную таблицу инодов.
Для каждого файла в каталоге есть запись, содержащая имя файла и связанный с ним номер инода. Вся остальная информация о файле извлекается из таблицы инодов с помощью номера инода файла.
Иноды уникальны только в границах разделов своих файловых систем. Если у вас есть два файла, которые находятся на разных разделах диска, то у них могут быть одинаковые номера инодов.
Если у вас закончатся иноды, то вы больше не сможете создавать новые файлы, даже если у вас осталось место в разделе диска.
Как получить информацию об инодах в Linux?
Вы можете легко вывести список номеров инодов с помощью следующей команды:
На следующем скриншоте показан мой корневой каталог с соответствующими номерами инодов:
Количество инодов в каждой файловой системе задается на этапе её создания, и, как правило, для большинства пользователей их количества более чем достаточно.
По умолчанию параметры файловой системы таковы, что создается 1 инод на 2 КБ пространства диска. Такого количества инодов достаточно для большинства систем. Скорее место на вашем жестком диске исчерпается раньше, чем закончатся все иноды. При необходимости, во время определения первоначальных параметров файловой системы, вы можете указать, сколько инодов требуется создать.
Если у вас всё-таки закончатся иноды, то ни вы, ни ваша система больше не сможете создавать новые файлы. Это довольно редкая ситуация, но все же она может возникнуть. Например, в старые времена некоторые почтовые серверы, которые хранили сообщения электронной почты в виде отдельных файлов (что быстро приводило к созданию больших коллекций маленьких файлов размером менее 2 килобайт), довольно часто сталкивались с данной проблемой. Однако, когда они перешли на использование баз данных, проблема решилась.
В некоторых файловых системах, таких как Btrfs, JFS, XFS, реализованы динамические иноды. При необходимости такие файловые системы могут увеличить количество доступных инодов.
Как работает инод?
При создании нового файла ему назначается номер инода и имя файла. Номер инода — это уникальный номер файла в файловой системе. И имя, и номер инода хранятся в виде записи в каталоге.
Вы можете перечислить информацию об инодах для каждой файловой системы с помощью следующей команды:
Иноды и ссылки
Теперь сравним их номера инодов:
Как и ожидалось, dir1 и file1 имеют разные номера инодов. Но то же самое относится и к символьной ссылке. Когда вы определяете символьную ссылку, то тем самым создаете новый файл. В своих метаданных он указывает на целевой объект. Для каждой создаваемой вами символьной ссылки вы используете новый инод.
Теперь давайте создадим жесткую ссылку и посмотрим, что произойдет с инодами:
Выводим список номеров инодов:
Вы можете видеть, что file1 и hlink1 имеют одинаковый номер инода. Жесткая ссылка не создает новый файл, она лишь предоставляет новое имя для тех же данных. Такое возможно благодаря введению механизма инодов.
Примечание: В более старых версиях Linux можно было создать жесткую ссылку на каталог. Было даже возможно сделать так, чтобы каталог стал родительским самому себе. Но теперь установлены некоторые ограничения, чтобы пользователи не создавали очень запутанную структуру каталогов.
Польза от инодов
Принцип работы инодов также объясняет, почему невозможно создать жесткую ссылку из одной файловой системы в другую. Разрешение такой задачи открыло бы возможность наличия конфликтующих номеров инодов. В то же время, символьная ссылка может быть создана в разных файловых системах.
Поскольку жесткая ссылка имеет тот же номер инода, что и исходный файл, то вы можете удалить исходный файл, и данные по-прежнему будут доступны по жесткой ссылке. Всё, что вы сделали в этом случае, — это удалили одно из имен, указывающих на заданный номер инода. Данные, связанные с этим инодом, будут оставаться доступными до тех пор, пока все имена, связанные с ним, не будут удалены.
Иноды также являются важной причиной, по которой Linux-системы могут обновляться без необходимости перезагрузки: один процесс может использовать библиотечный файл, в то время как другой процесс заменяет этот файл новой версией. Уже запущенный процесс будет продолжать использовать старый файл, в то время как каждый новый вызов к нему приведет к использованию новой версии.
Еще одна интересная функция, которая поставляется с инодами, — это возможность хранить данные в самом иноде. Это называется встраиванием (англ. «inlining»). Этот метод хранения имеет преимущество в экономии места, поскольку не требует использования блоков данных, но при этом также увеличивает время поиска, избегая дополнительного доступа к диску для получения данных.
В некоторых файловых системах, таких как ext4, есть опция под названием inline_data, которая позволяет операционной системе хранить данные вышеописанным способом. Из-за ограничения размера встраивание работает только для очень маленьких файлов.
Заключение
Иноды — это не то, с чем вы взаимодействуете напрямую, но они играют важную роль в работе операционной системы. Если раздел должен содержать очень много маленьких файлов, то знание и понимание того, что такое иноды и как они работают, может избавить вас от многих проблем в будущем.
Что такое иноды в Linux и как они используются?
Все в Linux считается файлом для обеспечения согласованности. Это включает в себя аппаратные устройства, принтеры, каталоги и процессы. Обычные файлы, такие как музыка, текст, видео и другие мультимедийные файлы, также имеют дополнительные данные, связанные с ними, называемые метаданными.
Что такое иноды в Linux? Записи Inode являются основой файловой системы Linux. Они управляют метаданными о файле и являются неотъемлемой частью внутренней работы Linux.
Какова структура файловой системы?
Файловая система разделена на две части — блоки данных и inode. Количество блоков фиксируется после создания и не может быть изменено.
Имя, путь, местоположение, ссылки и другие атрибуты файла не находятся в каталоге. Каталоги — это просто таблицы, которые содержат имена файлов с соответствующим номером инода.
Вы можете создать жесткую ссылку, в результате чего для одного файла будет более одного имени. Когда вы создаете жесткую ссылку, он также создает новое имя в таблице с индексом, но не перемещает файл.
Если бы вы переместили большой файл, это заняло бы много времени. Более эффективно создать запись имени в новом каталоге и удалить старую запись. Вы также можете переименовать файлы таким же образом.
Верхняя часть иерархии — это сама файловая система. Внутри файловой системы находятся имена файлов. Имена файлов ссылаются на иноды. Индексы ссылаются на физические данные.
Что такое Inode в Linux?
Индод — это структура данных. Он определяет файл или каталог в файловой системе и хранится в записи каталога. Иноды указывают на блоки, которые составляют файл. Индод содержит все административные данные, необходимые для чтения файла. Метаданные каждого файла хранятся в inode в табличной структуре.
При использовании программы, которая ссылается на файл по имени, система ищет файл записи каталога, в котором он существует, чтобы получить соответствующий индекс. Это дает вашей системе данные файла и информацию, необходимую для выполнения процессов или операций.
Имена файлов и номера индексов хранятся в отдельном индексе и ссылаются на индекс. Вы можете ссылаться на метаданные, которые представляют файл. Можно иметь несколько имен файлов, которые ссылаются на один фрагмент данных или индекс, как вы можете видеть на рисунке ниже.
Что такое номер инода?
Каждый индекс в структуре Linux имеет уникальный номер, идентифицируемый с ним. Он также называется индексным номером и имеет следующие атрибуты:
Чтобы проверить список номеров инодов, используйте следующую команду:
На приведенном ниже снимке экрана показан каталог с номерами узлов, которые отображаются в крайнем левом столбце.
Как работают иноды?
Используйте команду ниже, чтобы вывести информацию об узлах для каждой файловой системы.
Сколько Inode вы используете?
Один из способов освободить место в файловой системе — это использовать все свои inode. Даже если у вас достаточно свободного места на диске, вы не сможете создавать новые файлы.
Использование всех инодов также может привести к внезапной остановке системы. Чтобы просмотреть список статистических данных об использовании inode, таких как «Используется», «Свободен» и «Процент использования», введите следующую команду:
Используются дополнительные способы Inode
То, как работают inode в Linux, делает невозможным наличие конфликтующих номеров inode. Невозможно создать жесткую ссылку на разные файловые системы. Однако вы можете использовать программные ссылки в разных файловых системах. Вы можете удалить исходные файлы и по-прежнему иметь доступ к данным по жесткой ссылке.
Удалив файл, все, что вы сделали, это удалили одно из имен, указывающих на конкретный номер инода. Данные будут оставаться до тех пор, пока вы не удалите все имена, связанные с одним и тем же номером инода. Обновление систем Linux без необходимости перезагрузки системы в значительной степени из-за способа работы inode.
Процесс может одновременно использовать файл библиотеки, другой процесс заменяет этот же файл более новой обновленной версией и создает новый индекс. Запущенный процесс продолжает использовать старый файл. В следующий раз, когда вы будете использовать тот же процесс, он будет использовать новую версию.
Пользователи не взаимодействуют напрямую с inode, но они представляют фундаментальный компонент файловых структур Linux.
Кое-что об inode
Периодически, с целью переезда в ЦРС собеседуюсь в разных крупных компаниях, в основном Питера и Москвы на должность DevOps. Обратил внимание, что во многих компаниях (во многих хороших компаниях, например в яндексе) задают два сходных вопроса:
Начну «снизу», т.е. с жесткого диска (флешки, SSD и прочие современные штуки отбросим, для примера рассмотрим любой 20 или 80 гиговый старый диск, т.к. там размер блока 512 байт).
Жесткий диск не умеет адресовать свое пространство побайтно, условно оно разбито на блоки. Нумерация блоков начинается с 0. (называется это LBA, подробности тут: ru.wikipedia.org/wiki/LBA)
Как видно из рисунка, блоки LBA я обозначил как уровень HDD. К слову, посмотреть, какой размер блока у вашего диска можно так:
Уровнем выше размечен раздел, один на весь диск (опять же для простоты). Чаще всего используют разметку разделов двух типов: msdos и gpt. Соответственно msdos — старый формат, поддерживающий диски до 2Tb, gpt — новый формат, способный адресовать до 1 зеттабайта 512 байтных блоков. В нашем случае имеем раздел типа msdos, как видно из рисунка, раздел при этом начинается с блока №1, нулевой же используется для MBR.
В первом разделе я создал файловую систему ext2, по умолчанию размер блока у нее 4096 байт, что также отражено на рисунке. Посмотреть размер блока файловой системы можно так:
Нужный нам параметр — «Block size».
Теперь самое интересное, как прочитать файл /home/serp/testfile? Файл состоит из одного или нескольких блоков файловой системы, в которых хранятся его данные. Зная имя файла, как его найти? Какие блоки читать?
Вот тут нам и пригождаются inode. В файловой системе ext2fs есть «таблица», в которой содержится информация по всем inode. Количество inode в случае с ext2fs задается при создании файловой системы. Нужные цифры смотрим в параметре «Inode count» вывода tune2fs, т.е. имеем 65536 штук. В inode содержится нужная нам информация: список блоков файловой системы для искомого файла. Как найти номер inode для указанного файла?
Соответствие имени и номера inode содержится в директории, а директория в ext2fs — это файл особого типа, т.е. тоже имеет свой номер inode. Чтоб разорвать этот порочный круг, для корневой директории назначили «фиксированный» номер inode «2». Смотрим содержимое inode за номером 2:
Как видно, нужная нам директория содержится в блоке с номером 579. В ней мы найдем номер нода для папки home, и так далее по цепочке, пока в директории serp не увидим номер нода для запрошенного файла. Если вдруг кому то захочется проверить, верный ли номер, и есть ли там нужная инфа, это не сложно. Делаем:
В выводе можно прочитать имена файлов в директории.
Вот я и подошел к главному вопросу: «по каким причинам может возникнуть ошибка записи»?
Естественно так случится, если не останется свободных блоков файловой системы. Что можно в этом случае сделать? Кроме очевидного «удалить что-нибудь ненужное», следует помнить, что в файловых системах ext2,3 и 4 есть такая штука, как «Reserved block count». Если посмотреть в листинге выше, то у нас таких блоков «13094». Это блоки доступные для записи только пользователю root. но если нужно оперативно решить вопрос, как временное решение можно сделать их доступными для всех, в результате чего появится немного свободного места:
Т.е. по умолчанию, у вас не доступно для записи 5% дискового пространства, и учитывая объемы современных дисков, это могут быть сотни гигабайт.
Что еще может быть? Еще возможна ситуация, когда свободные блоки есть, а ноды кончились. Такое обычно случается, если у вас в файловой системе куча файлов размером меньше размера блока файловой системы. Учитывая, что на 1 файл или директорию тратится 1 inode, а всего их имеем (для данной файловой системы) 65536 — ситуация более чем реальная. Наглядно это можно увидеть из вывода команды df:
Как хорошо заметно на разделе /var/www, количество свободных блоков файловой системы, и количество свободных нодов сильно различается.
На случай если кончились inode, заклинаний не подскажу, т.к. их нет (если не прав, дайте знать). Так что для разделов в которых плодятся мелкие файлы следует грамотно выбирать файловую систему. Так например в btrfs inode не могут закончиться, т.к. динамически создаются новые при необходимости.
Большое количество Inodes (инодов) на сайте (лимит inode)
Раньше я не имел понятия о таком понятии, как индексные дескрипторы (Inodes) на хостинге. Однако, любому человеку, связанным с хостингом рано или поздно придется узнать, что это такое.
Все обращали внимание, что копирование 1 Гб целого файла занимает пару минут, а 1 Гб мелких файлов может растянуться на пол часа. Так и с хостингом. Помимо предоставленного объема места, хостинг поставляет определенное количество Inodes. В данный момент я использую хостинг от HOSTiQ. Их тарифы выглядят следующим образом.
Таким образом предоставляется от 200 тыс до 400 тыс. дескрипторов. По следующей ссылке можно почитать про индексные дескрипторы на виртуальном хостинге.
Однажды я увидел, что в статистике панели cPanel занято 40% под Inodes при 16,22% (4,06 Гб/25 Гб) занятого места на диске. Это довольно большое значение Inodes и такими темпами через год они займут предельное значение.
Статьи сайта easywork.com.ua обладают большим количеством изображений и я решил, что они занимают данное место. Но проблему нужно решать и я решил связаться с тех.поддержкой хостинга. Мне было сообщено, что отдельно приобрести иноды нельзя есть два варианта дальнейших действий — убрать лишние файлы или приобрести пакет с их большим количеством.
Однако нужно более подробно разобраться в ситуации и я запросил распределение Inodes на сайте. Мне было сообщено, что на 19 февраля 2020 года индексные дескрипторы распределены следующим образом.
Наибольший объем занимает папка /home/easywork/public_html (52839 инодов). Из нее наибольший объем занимает папка /home/easywork/public_html/wp-content (51025 инодов). Я запросил более детальную информацию по потреблению индексных дескрипторов в данной директории.
Наибольший объем занимают /updraft (20357 шт), /uploads (17631 шт) и /plugins (5088 шт).
Папка updraft/ создана плагином UpdraftPlus — Backup/Restore, который создает резервные копии сайта. Распределение Inodes следующее.
Как оказалось, на локальном сервере была сохранена копия сайта.
Однако после удаление данных файлов резервного копирования, место использованное UpdraftPlus все также оставалось большим.
на хостинге в папке /updraft остались распакованные файлы сайта (их можно увидеть через FileZilla). Это папки типа папки «uploads-old» «themes-old» и т.д. Они также занимают место на хостинге и плагин
Дело в том, что пол года назад сайт восстанавливался из резервной копии. Перед восстановления резервной копии, UpdraftPlus переименовал существующие папки plugins, themes и uploads в папки plugins-old, themes-old и uploads-old (в случае, если что-то пойдет не так с восстановлением). Как только восстановление успешно произойдет, можно удалить эти старые папки. Для этого выберите «Настройки»> «Резервные копии UpdraftPlus» от администратора WordPress, затем нужно нажать кнопку «Удалить старые каталоги» в верхней части страницы.
В свое время это не было сделано и сейчас стоит этим заняться.
После этого количество Inodes уменьшилось с 60,6 тыс (40,4%) до 36,95 тыс (24,63%).
Распределение Inodes в папке /home/easywork/public_html/wp-content/uploads (17631 шт Inodes):
В данной папке содержатся по большей части картинки, используемые в статьях. При загрузке каждого файла генерируется еще 6 с разными разрешениями. Все кроме 300х300 создаются в момент публикации статьи на сайте. Это относится к изображениям, которые используются в качестве миниатюры для статей и создаются настройками темы WORDPRESS.
Для обычных изображений создаются лишь изображения, указанные в «Медиа настройках» к медифайлам. У меня был указана миниатюра 300 х 300, но я ее тоже отключил, чтобы теперь не продолжать плодить дубли картинок и не расходовать зря дисковое пространство. Данное разрешение не используется на сайте.
Таким образом можно уменьшить количество Inodes на текущий момент, большую часть которых составляют изображения и файлы резервного восстановления плагина UpdraftPlus.
Объяснение инодов
Хотя индексный дескриптор не является самым важным фактором при выборе веб-хостинга, это один из важных моментов, особенно если вы размещаете много веб-сайтов в одной учетной записи хостинга.
Что такое Inode?
Термин «индексный дескриптор» появился с момента появления первой файловой системы UNIX примерно в конце 1970-х годов.
Inode создается на вашем сервере каждый раз при создании или загрузке файла. При создании файловой системы создается структура данных, содержащая информацию об этом конкретном файле. Каждый файл имеет «i-номер» и идентифицируется номером inode в файловой системе, в которой он находится.
Inodes используются для хранения информации о файле сервера, такой как владение пользователем и группой файла, режим доступа (права на чтение, запись, выполнение) и типы файлов. Для большинства типов файлов количество доступных индексных дескрипторов фиксируется при создании файловой системы.
Что такое лимит Inode?
Что произойдет, если вы превысите лимит Inode?
Разные хостинг-провайдеры по-разному реагируют на достижение лимита Inode.
взять Hostinger например, вы больше не сможете создавать дополнительные файлы по достижении лимита Inode. Ваша учетная запись может быть заблокирована до тех пор, пока вы не удалите неиспользуемые веб-файлы и не опуститесь ниже лимита.
Oс другой стороны, пользователи Hostgator получают 100,000 XNUMX inode для общей учетной записи по умолчанию, Пользователи, работающие с более чем 100,000 250,000 инодов, не будут включены в еженедельное резервное копирование Hostgator, и их учетная запись будет заблокирована, если они превысят XNUMX XNUMX инодов.
Большинство планов виртуального хостинга сегодня позволяют использовать до 200,000 XNUMX inodes на учетную запись, что обычно более чем достаточно.
Однако не все провайдеры заранее четко представляют свои ограничения на индексные дескрипторы.
Освобождение Inode в вашей учетной записи хостинга
Как и в случае с другими загроможденными накопителями, освобождение inode на веб-хостинге часто может быть просто вопросом избавления от мусора. Если вы обнаружите, что получаете предупреждения об использовании ресурсов из-за большого количества инодов, есть несколько способов, которыми вы можете быстро освободить пространство с небольшим обслуживанием.
1. Очистить кэш
Прежде чем вы коснетесь чего-то еще, это одно из первых мест, которое вы должны посмотреть, особенно если вы заметили недавний большой объем трафика. Многие сайты (особенно те, которые управляются CMS) используют файлы кэша.
Хотя они часто бывают временными, они могут быстро накапливаться, если вы пропустите некоторые настройки управления. Если вы используете плагин CMS, простая очистка кэша может быстро освободить inode. Для других сайтов это может быть более сложным, и вам, возможно, придется искать временные файлы.
2. Потерять немного
Например, наличие неиспользуемых старых файлов, лежащих вокруг, не только трата подсчета, но и увеличивает вашу сигнатуру риска. Если вам не хватает места, сделайте уборку и избавьтесь от мусора.
3. Электронная почта также способствует подсчету узлов
Регулярно очищайте свои почтовые папки и обязательно удаляйте ненужную почту. Если вы хотите сохранить их, сделайте копию в автономном режиме и не загромождайте свой веб-сервер.