通过命令在两个文件系统之间移动文件是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)
,因此可能存在未检测到的晚期文件系统错误。