- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近使用 inotify 创建了一个保管箱系统,监视在特定目录中创建的文件。我正在监视的目录是从 NFS 服务器挂载的,并且 inotify 的行为与我的预期不同。考虑以下场景,其中 inotify 脚本在计算机 A 上运行,监视/some/nfs/dir/also/visible/to/B。
- 使用计算机 A 在/some/nfs/dir/also/visible/to/B 中创建文件,脚本的行为符合预期。使用机器 B 执行相同的操作,脚本不会收到关于目录中删除了新文件的通知。
- 当脚本在 NFS 服务器上运行时,当从机器 A 和机器 B 创建文件时,它会收到通知。
这是我用来访问 inotofy 的包中的错误,还是这是预期的行为?
最佳答案
inotify 需要内核的支持才能工作。当应用程序跟踪目录时,它会要求内核在发生这些更改时通知它。当更改发生时,除了将这些更改写入磁盘之外,内核还会通知监视进程。
在远程 NFS 机器上,更改对内核不可见;它完全是远程发生的。 NFS 早于 inotify,并且 NFS 或任何类似的东西都没有网络级别的支持。
如果你想解决这个问题,你可以在存储服务器上运行一个服务(因为内核总是会看到文件系统的更改),该服务代理远程计算机的 inotify 请求,并将数据转发到远程客户端。
编辑:我觉得 NFS 很奇怪应该归咎于它缺乏对 inotify 的支持。
Network File System (NFS) is a distributed file system protocol originally developed by Sun Microsystems in 1984, wikipedia article
但是:
Inotify (inode notify) is a Linux kernel subsystem that acts to extend filesystems to notice changes to the filesystem. [...] It has been included in the mainline Linux kernel from release 2.6.13 (June 18, 2005 ) [...]. wikipedia article
很难指望可移植的网络协议(protocol)/应用程序能够支持为不同操作系统开发的特定内核功能,并且该功能在二十多年后出现。即使它确实包含其扩展,它们在其他操作系统上也不可用或无用。
*在所有情况下都强调我的
<小时/>还有一个问题;假设我们根本不使用网络,而是使用具有良好 inotify 支持的本地文件系统:ext3(假设它安装在 /mnt/foo
)。但文件系统不是真正的磁盘,而是从环回设备挂载的;并且底层文件又可以在 vfs 中的不同位置访问(例如,/var/images/foo.img
)。
现在,您不应该修改已安装的 ext3 文件系统,但如果更改的是文件内容而不是元数据,那么这样做仍然相当安全。
因此,假设一个聪明的用户在十六进制编辑器中修改文件系统镜像(/var/images/foo.img
),用一些其他数据替换文件的内容,同时inotify watch 正在观察已安装文件系统上的同一文件。
没有合理的方法可以安排 inotify 始终向观看进程通知此类更改。尽管可能需要进行一些调整才能使 ext3 注意到并遵守更改,但这些都不适用于 xfs drtiver,因为它们在其他方面非常相似。
也不应该。你在作弊! inotify 只能通知您通过正在监视的实际挂载点处的 vfs 发生的更改。如果更改发生在该 VFS 之外,则由于底层数据发生更改,inotify 无法为您提供帮助,也不是为了解决该问题而设计的。
您是否考虑过使用消息队列进行网络通知?
关于nfs - 使用 NFS 进行 inotify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231243/
我正在运行 Debian GNU/Linux 7 VM mount.nfs 版本 mount.nfs: (linux nfs-utils 1.2.6) 我想在 NFS 挂载上设置配额。 NFS 服务器
我正在尝试使用 VirtualBox 作为提供程序并使用 ansible 作为配置工具来“升级”一台 CentOS 机器 (centos7-x64-vbox43)。我执行了以下命令: vagrant
我最近使用 inotify 创建了一个保管箱系统,监视在特定目录中创建的文件。我正在监视的目录是从 NFS 服务器挂载的,并且 inotify 的行为与我的预期不同。考虑以下场景,其中 inotify
我已经在我的本地机器上安装了一个 NFS 挂载(所以,我想我的机器是 NFS 客户端)并且一个文件正在被托管 NFS 挂载的远程机器(NFS 服务器)写入 NFS 挂载中。现在,我如何使用 JAVA
我关注这个tutorial为我的服务器设置 NFS。目前,我有 1 台服务器将其部分目录共享为 HOST,2 台服务器将这些目录作为 CLIENT。 我的问题很直接,如果我的HOST包含200万张图片
我在主机上有一个 NFS 分区,如果将其添加到容器中 docker run -i -t -v /srv/nfs4/dir:/mnt ubuntu /mnt 将包含共享数据,但它不会导致冲突吗?因为它还
没有 iptables 规则,我可以挂载我的 NFSSERVER:/PATH 但有了它(firewall/iptables) 已启用,但我无法安装。 [.e.g., after iptables --
我们有两个数据中心,每个数据中心都有许多共享一个基于 EMC 的大型 nfs 的 Linux 服务器。 挑战在于保持两个 nfs 同步。目前假设写入仅发生在 nfs1 上,然后 nfs1 必须将更改传
我在尝试挂载 nfs 导出时遇到以下错误。 sudo mount 192.168.1.175:/mnt/nas /mnt/c/nas mount.nfs: No such device 关于如何解
NFS 挂载在我的 RHEL 7 AWS 实例中不起作用。 当我做一个 mount -o nfsvers=3 10.10.11.10:/ndvp2 /root/mountme2/ 我得到错误: mou
我正在复制 Controller 示例 [1] 中尝试 Kubernetes NFS 卷声明。 我已经设置了 NFS 服务器、PV 和 PVC。我的复制 Controller 看起来像这样 apiVe
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我想查找并更改用户帐户及其在本地文件系统上的默认组,但不包括大量 NFS 安装和指向这些安装的符号链接(symbolic link)。我尝试了多种语法但没有成功 - find / -user dumm
我正在使用 docker NFS 容器,但是在安装导出的目录(即使在本地主机上)时遇到了麻烦。 问题 exportfs: does not support NFS export 设置 我的容器使用入
HDFS NFS GateWay mount.nfs:输入/输出错误? 1.报错如下: [root@xx sbin]# mount -t nfs -o vers=3,proto=tcp,nolock,
我无法为 Docker Swarm 安装 NFS 卷,并且缺乏有关 --mount 语法( https://docs.docker.com/engine/reference/commandline/s
我有一个 Kubernetes 集群设置(本地),它有一个 NFS 共享(my-nfs.internal.tld)安装到 /exports/backup在每个节点上创建备份。 现在我正在设置我的日志记
我想将 sqlite 数据库嵌入到现有的 tcl 应用程序中(从平面文件迁移)。 目前;我们的 tcl 解释器是从网络位置运行的; /bin/tclsh8.3 我有一个 nfs $PATH对于已经为所
我在一台服务器上为客户端创建了一个 NFS 共享服务器和客户端都是centos 6系统。服务器 nfs 导出:/srv/diskless/tmp *(rw,sync,no_root_squash)。
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 10 个月前关闭。 Improve
我是一名优秀的程序员,十分优秀!