
При удалении жесткой ссылки удаляется сама ссылка, но содержимое самого файла продолжает существовать (то есть его пространство не освобождается) до тех пор, пока не будут удалены все ссылки на файл.
Я понимаю, чтотолькокогда удаляется сам файл, таблица инодов сбрасывается для этого конкретного файла? Поскольку даже исходный файл представляет собой ссылку, представленную1в метаданных команды ls.
Допустим, например, у меня есть 2 жесткие ссылки на файл, и я удаляю обе жесткие ссылки, данные Inode все еще индексируются в таблице, пока не будет удалена последняя ссылка? Это правильно?
При использовании команды df -hi
она не дает много информации о том, было ли очищено пространство или нет. Итак, мой второй вопрос: как я могу точно знать, когда данные Inode очищены и не занимают место?
решение1
Пространство инода, а также его блок и пространство в таблице инодов будут освобождены, когда:
- Последняя запись каталога, указывающая на inode, удаляется. То есть больше нет жестких ссылок на inode, и
- Последний файловый дескриптор, ссылающийся на inode, закрыт. То есть inode больше не используется и inode не имеет открытых файловых дескрипторов, ссылающихся на него.
Например, процесс может создать файл, открыть файл, а затем немедленно отсоединить его, чтобы использовать этот файл как временное хранилище. Если процесс завершается или иным образом завершается, его файловые дескрипторы автоматически закрываются, а временный файл автоматически освобождается.
Пока inode фактически не освобожден, inode и его блоки будут использоваться, а используемое пространство будет отображаться как используемые блоки и inode, как показывает df. Когда последний файловый дескриптор и жесткая ссылка исчезнут, пространство будет освобождено, и отчет df будет обновлен.