我在Linux上有一个文件索引数据库。目前我使用文件路径作为标识符。但是如果一个文件被移动/重命名,它的路径就会改变,我无法将我的数据库记录与新文件匹配,并且必须删除/重新创建记录。更糟糕的是,如果一个目录被移动/重命名,那么我必须删除/重新创建所有文件和嵌套目录的记录。
我想使用inode编号作为唯一的文件标识符,但是如果删除文件并创建另一个文件,则可以重用 inode 编号。
所以,我想知道我是否可以使用一对{inode,crtime}
作为唯一的文件标识符。我希望在 ext4 上使用 i_crtime,在 NTFS 上使用 creation_time。在我有限的测试(使用 ext4)中,inode 和 crtime 在同一文件系统中重命名或移动文件或目录时确实保持不变。
因此,问题是是否存在文件的 inode 或 crtime 可能更改的情况。例如,fsck 或碎片整理或分区大小调整是否可以更改 inode 或 crtime 或文件?
有趣的是 http://msdn.microsoft.com/en-us/library/aa363788%28VS.85%29.aspx 说:
- “在 NTFS 文件系统中,一个文件在被删除之前保持相同的文件 ID。 ”
但也: - "在某些情况下,文件的文件 ID 会随着时间而改变。 "
那么,他们提到的那些案例是什么?
请注意,我研究了类似的问题:
但他们没有回答我的问题。