我在Linux上有一个文件索引数据库。目前我使用文件路径作为标识符。 但是,如果文件被移动/重命名,则它的路径会更改,我无法将我的DB记录与新文件匹配,并且必须删除/重新创建记录。更糟糕的是,如果目录被移动/重命名,那么我必须删除/重新创建所有文件和嵌套目录的记录。
我想使用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可能会随时间而改变。"
那么,他们提到的是哪些情况?
请注意,我研究了类似的问题:
但它们没有回答我的问题。