在Linux上移动文件时出现争用情况



假设我有两个脚本。第一个方法(使用mv命令)将一些文件放入目录,第二个方法偶尔检查一次目录并处理这些文件。我担心的情况是,当第二个脚本开始处理目前只移动了一部分的文件时。在XFS文件系统的实际生活中会发生这种情况吗?

这取决于文件的移动位置。单个文件系统中的mv是原子的,否则它必须执行非原子的复制(然后删除原始文件),并且容易出现您提到的那种竞争条件。

FWIW,这是正常的POSIX语义,并不是XFS特有的。

在XFS文件系统中,您的情况下不会出现争用条件。然而,XFS允许多个进程通过使用灵活的锁定方案同时读取和写入一个文件,这与Unix文件系统的单线程inode锁定不同。XFS通过多个进程序列化同一区域上的写入。

XFS使用直接I/O来访问文件。直接I/O允许应用程序指定其数据不缓存在缓冲区缓存中。

当使用正常的缓冲I/O时,多个读卡器可以同时访问该文件,但一次只允许单个写入器访问该文件。使用直接I/O时,多个读写器可以同时访问该文件。

最新更新