1

这是场景:

  • 运行 Linux 的中央机器是许多仪器的“数据存储”。

  • 每台仪器都有一台 PC,并且每台仪器在数据存储上都有一个远程安装 (SMB),它将仪器捕获的数据文件写入其中。

  • 仪器 PC 运行范围广泛的操作系统,包括一些非常旧的操作系统。

  • 仪器 PC 的硬件时钟不同步,由于多种原因,同步会出现问题。

  • 其他各种修复(例如,不使用 SMB、升级仪器操作系统、开发在仪器上运行的东西)同样存在问题。

我们要编写的是一个“抓取器”应用程序,当仪器通过远程挂载将文件写入数据存储时,它会发出通知,然后将文件快速复制到其他地方。目前的计划是使用 Linuxinotify子系统在文件可能到达的目录/树上监视文件系统事件,然后进行复制。

我担心的是,我们没有同步时钟这一事实将成为一个问题。这种担忧是否合理?

4

1 回答 1

2

这种担忧是没有道理的。

Linux inotify 是一个暴露 Linux fsnotify 子系统的用户空间 API。这个内核文件系统连接到内核的通用文件系统层(称为 VFS)。它通过回调函数直接从文件系统代码中获取创建新文件的通知,而不是通过比较目录中文件的创建或访问日期。因此,文件上的时间戳根本不会影响它,因此不同客户端计算机上的时钟根本无关紧要。

为了确保您审核了 inotify_should_send_event() 发送事件函数的代码,该函数检查是否需要为跟踪的文件或目录发送事件(参见此处: http: //lxr.linux.no/linux+v3.0.4/ fs/notify/inotify/inotify_fsnotify.c#L144)。请注意,没有任何时间参考。本着同样的精神,内核中的主要 fsnotify 函数 (http://lxr.linux.no/linux+v3.0.4/fs/notify/fsnotify.c#L296) 不会在任何地方引用时间戳,因此时钟不会影响完全是这个界面。

我希望这有帮助。

于 2011-10-13T13:13:04.657 回答