Пытаетесь понять, как удаление жестких ссылок связано с освобождением значений в таблице инодов?

Пытаетесь понять, как удаление жестких ссылок связано с освобождением значений в таблице инодов?

При удалении жесткой ссылки удаляется сама ссылка, но содержимое самого файла продолжает существовать (то есть его пространство не освобождается) до тех пор, пока не будут удалены все ссылки на файл.

Я понимаю, чтотолькокогда удаляется сам файл, таблица инодов сбрасывается для этого конкретного файла? Поскольку даже исходный файл представляет собой ссылку, представленную1в метаданных команды ls.

Допустим, например, у меня есть 2 жесткие ссылки на файл, и я удаляю обе жесткие ссылки, данные Inode все еще индексируются в таблице, пока не будет удалена последняя ссылка? Это правильно?

При использовании команды df -hiона не дает много информации о том, было ли очищено пространство или нет. Итак, мой второй вопрос: как я могу точно знать, когда данные Inode очищены и не занимают место?

решение1

Пространство инода, а также его блок и пространство в таблице инодов будут освобождены, когда:

  • Последняя запись каталога, указывающая на inode, удаляется. То есть больше нет жестких ссылок на inode, и
  • Последний файловый дескриптор, ссылающийся на inode, закрыт. То есть inode больше не используется и inode не имеет открытых файловых дескрипторов, ссылающихся на него.

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

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

Связанный контент