mv是两个文件系统之间的原子操作吗?

mv是两个文件系统之间的原子操作吗?

通过命令在两个文件系统之间移动文件是mv原子操作吗?

答案1

查看 EXDEV 错误(在 man 2 重命名中):

   EXDEV  oldpath and newpath are not  on  the  same  mounted  filesystem.
          (Linux  permits  a  filesystem to be mounted at multiple points,
          but rename() does not work across different mount  points,  even
          if the same filesystem is mounted on both.)

您无法通过系统调用在文件系统之间移动,因此 mv 所做的是用户空间复制和删除,这从来都不是原子的。

答案2

这取决于您对“原子”的理解。

与系统调用不同rename(),在两个文件系统之间复制文件通常不是原子的。由于 中的复制例程mv不调用fsync(2),因此可能存在未检测到的晚期文件系统错误。

相关内容