假设我有两个脚本。第一个将(使用 mv 命令)一些文件放入目录中,第二个不时检查目录并处理文件。我担心的情况是当第二个脚本开始处理目前仅部分移动的文件时。这会在 XFS 文件系统上发生在现实生活中吗?
问问题
1859 次
2 回答
7
这取决于您从哪里移动文件。mv WITHIN 单个文件系统是原子的,否则它必须做一个非原子的副本(然后删除原始文件),并且容易出现你提到的那种竞争条件。
FWIW,这是正常的 POSIX 语义,对 XFS 没什么特别的。
于 2012-02-27T11:17:09.977 回答
1
在您的情况下,XFS 文件系统不会出现竞争条件。然而,与 Unix 文件系统的单线程 inode 锁相比,XFS 通过使用灵活的锁定方案允许多个进程一次读取和写入文件。XFS 负责将多个进程在同一区域上的写入序列化。
XFS 使用直接 I/O 访问文件。直接 I/O 允许应用程序指定其数据不缓存在缓冲区缓存中。
当使用正常的缓冲 I/O 时,多个读取器可以同时访问文件,但一次只允许单个写入器访问文件。使用直接 I/O 时,多个读取器和写入器可以同时访问文件。
于 2012-02-27T10:52:27.043 回答