Гарантируется ли (например, стандартом) неизменность номера инода после перезагрузки, перемонтирования или даже после того, как он был закрыт всеми процессами, а затем снова открыт? Например. может ли он автоматически генерироваться при открытии файла, а не храниться в файловой системе. Может ли приложение полагаться на него? Должна ли реализация файловой системы гарантировать определенную семантику?
Номер инода после перезагрузки
Ответы (1)
inode
не является общей концепцией для всех файловых систем. Ext
, а Linux VFS
рассматривает inode
как структуру данных, в которой хранится информация о файле. Но, например, FAT32
или NTFS
понятия не имеют, что такое inode
, потому что они просто не используют это понятие.
Сказав это, я постараюсь дать ответы на ваши вопросы:
Гарантируется ли (например, стандартом) неизменность номера инода после перезагрузки, перемонтирования или даже после того, как он был закрыт всеми процессами, а затем снова открыт?
Зависит от того, если файловая система типа Ext
, то номер inode
хранится в файле i_ino
внутри struct inode
, который записывается на диск, так что да, в этом случае, если файл тот же (не другой файл с тем же именем), то номер inode
гарантированно будет таким же.
В противном случае, если файловая система отличается от Ext
, номер inode
генерируется inode operations
, определенным драйвером файловой системы, поскольку у них нет понятия о том, что такое inode
, они должны имитировать все внутренние поля inode
, чтобы соответствовать VFS. , поэтому это число, вероятно, будет другим после перезагрузки, даже после закрытия и повторного открытия файла (теоретически).
Например. может ли он автоматически генерироваться при открытии файла, а не храниться в файловой системе.
Да! Драйверы файловой системы, отличной от Ext
(FAT32
, NTFS
), генерируют структуру inode
всякий раз, когда осуществляется доступ к одному из ее файлов.
Может ли приложение полагаться на него?
Не очень безопасно, приложения полагаются на пути к файлам, которые более удобочитаемы. Необходимость найти файл по его inode
будет означать перебор всех inodes
в разделе (много-много). Разрешая путь к файлу, поиск оптимизируется, он проверяет только файлы внутри каталогов.
Должна ли реализация файловой системы гарантировать определенную семантику?
Я не очень хорошо понимаю этот вопрос, но я предполагаю, что да, файловые системы - это очень сложные структуры, им нужно хорошо определить, какие типы данных потребуются и каково будет их значение.
Например: Ext
определяет block
, inode
и dentry
, а также список функций над этими структурами данных.
Надеюсь это поможет!
ls -i
после каждого изменения. Вероятно, они не изменятся, потому что будут закэшированы, но они точно нереальны.
- person Paulo Bu; 15.01.2014
touch x
, создал и поместил в индекс с идентификатором 294959
, затем rm x
, touch y
и индекс для y
повторно использовал идентификатор 294959
. Это что-то говорит?
- person Paulo Bu; 15.01.2014
id
небезопасно использовать в приложениях.
- person Paulo Bu; 15.01.2014
inode
, этого не ожидается, с другими файловыми системами теоретически это может произойти, но вы редко это увидите.
- person Paulo Bu; 15.01.2014