NFS-mv命令来自两个客户端文件损坏?

时间:2017-01-10 21:19:02

标签: linux race-condition nfs corruption file-locking

我有一个基本脚本,我想要执行以下操作:

  1. 如果new / file.txt存在
  2. mv new / file.txt current / file.txt
  3. 现在 - 如果2台服务器在同一时间运行同一个脚本(可以访问相同的NFS文件共享):

    • 服务器1 - 步骤1.检查文件是否存在。真
    • 服务器2 - 步骤1.检查文件是否存在。真
    • 服务器1 - 步骤2.开始执行" mv"命令
    • 服务器2 - 步骤2. ????

    从我在网上找到的内容来看,服务器2似乎只会抛出错误 - 但是没有文件损坏或任何应该关注的事情: http://nfs.sourceforge.net/

      

    文件句柄指的是已删除的文件。删除文件后   服务器,客户端在尝试访问文件之前不会发现   他们从之前的LOOKUP中缓存了一个文件句柄。使用rsync   或 mv在另一个客户端上使用时替换文件是一个   导致ESTALE错误的常见情况。

    我已经尝试过模拟这个以确认但是还没有成功地做到这一点 - 所以我想在实施这个策略之前检查一下:

    问题: 我的理解是否准确 - 或者我是否需要使用其他策略来确保file.txt不会被破坏?

    其他细节: 亚马逊Linux OS。安装的驱动器为 nsf4 。该文件可能大到100MB

1 个答案:

答案 0 :(得分:2)

check-if-file-exists是一个典型的TOCTTOU问题。

最简单的解决方法是检查,尝试mv。 如果没有要移动的文件,mv将失败(并且不执行任何操作)。