4

一些解决方案可能适用于 Windows,但是我不熟悉 Windows 操作系统,所以这将以 Linux 为重点。

据我了解,Unix文件系统都有inode的概念,就是存储文件系统元数据和“文件”的地方。因此,我想知道是否可以使用带有一些附加信息的 inode 编号来跟踪重命名或移动的文件?

我打算做的是进行初始扫描,该扫描将创建一个包含文件名/路径、它们所在的磁盘/驱动器、它们的 inode 编号以及最后某种校验和 (sha-1) 的数据库。

这将使系统能够使用 inode 编号快速检测文件是否被移动或重命名,然后它会跟进校验和以检查它是否实际上是同一个文件。

我可以看到这个方案的一些可能的问题:

  1. 文件可以被修改然后移动/重命名,这将无法检测到它,因为校验和不匹配。
  2. 一些(大多数?)应用程序在修改文件时会创建一个新的临时文件,然后用当前文件切换它,因此即使文件最终未修改,inode 也不会匹配....
  3. 需要存储它所在的设备/文件系统,因为每个文件系统上的 inode 对于该文件系统都是唯一的。
  4. 需要处理硬链接

我想知道是否还有其他我在这里忘记的问题?我希望能够使用 inode 快速追踪哪些文件被移动或重命名,然后跟进校验和以确认它实际上是同一个文件。

4

3 回答 3

8

inotify当有人对指定文件系统或目录中的文件执行任何操作时,请查看哪个允许您接听电话。

于 2010-08-18T17:24:50.037 回答
0

请注意,这将取决于文件系统。它在 ext3 和类似的文件系统中是可行的,但在其他文件系统中可能不行。这可能也是一个相当耗费资源的操作,因为它需要扫描磁盘以检查所有 inode,因此您需要查找解决方案以在 inode 更改时收到通知(而不是扫描所有 inode)。

于 2010-08-18T17:25:16.617 回答
0

logroate 使用mv命令,有一篇文章解释了为什么移动文件时 fd 不改变 UNIX 命令 mv 和 rm 如何处理打开的文件?

于 2017-06-21T02:47:18.590 回答