Rename

mv 是兩個文件系統之間的原子操作嗎?

  • July 2, 2018

通過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),因此可能存在未檢測到的後期文件系統錯誤。

引用自:https://unix.stackexchange.com/questions/452620