Rename
mv 是兩個文件系統之間的原子操作嗎?
通過
mv
命令在兩個文件系統之間移動文件是原子操作嗎?
查看 EXDEV 錯誤(在 man 2 rename 中):
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 所做的是使用者空間複製和刪除,這絕不是原子的。
這取決於您對“原子”的理解。
與
rename()
系統呼叫不同,在兩個文件系統之間複製文件通常不是原子的。由於中的複制常式mv
不呼叫fsync(2)
,因此可能存在未檢測到的後期文件系統錯誤。