У меня есть база данных индексирования файлов на Linux. В настоящее время я использую путь к файлу в качестве идентификатора. Но если файл перемещается/переименовывается, его путь изменяется, и я не могу сопоставить свою запись с базой данных с новым файлом и удалять/воссоздавать запись. Хуже того, если каталог перемещается/переименовывается, мне приходится удалять/воссоздавать записи для всех файлов и вложенных каталогов.
Я хотел бы использовать номер inode в качестве уникального идентификатора файла, но номер inode можно использовать повторно, если файл удален, а другой файл создан.
Итак, интересно, могу ли я использовать пару {inode,crtime}
как уникальный идентификатор файла.
Я надеюсь использовать i_crtime на ext4 и creat_time на NTFS.
В моем ограниченном тестировании (с ext4) inode и crtime действительно остаются неизменными при переименовании или перемещении файлов или каталогов в пределах одной файловой системы.
Итак, вопрос в том, есть ли случаи, когда inode или crtime файла могут измениться. Например, может ли fsck или дефрагментация или изменение размера раздела изменить inode или crtime или файл?
Интересно, что http://msdn.microsoft.com/en-us/library/aa363788%28VS.85%29.aspx говорит:
- "В файловой системе NTFS файл сохраняет тот же идентификатор файла, пока он не будет удален."
но также: - "В некоторых случаях идентификатор файла для файла может меняться со временем".
Итак, что они упомянули в этих случаях?
Обратите внимание, что я изучил похожие вопросы:
- Как определить уникальность файла в Linux?
- Выполнение 'mv A B': Будет ли изменен "inode" ?
- Лучший подход к обнаружению перемещения или переименованию в файл в Linux?
но они не отвечают на мой вопрос.