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