【发布时间】:2017-01-10 21:19:02
【问题描述】:
我有一个基本脚本,我想执行以下操作:
- 如果 new/file.txt 存在
- mv new/file.txt current/file.txt
现在 - 如果 2 台服务器要同时运行相同的脚本(可以访问相同的 NFS 文件共享):
- 服务器 1 - 步骤 1. 检查文件是否存在。是的
- 服务器 2 - 步骤 1. 检查文件是否存在。是的
- 服务器 1 - 步骤 2. 开始执行“mv”命令
- 服务器 2 - 第 2 步。????
从我在网上找到的信息来看,似乎服务器 2 会抛出一个错误 - 但没有文件损坏或任何值得关注的问题: http://nfs.sourceforge.net/
文件句柄指的是已删除的文件。文件被删除后 服务器,客户端在尝试访问文件之前不会发现 使用他们从以前的 LOOKUP 中缓存的文件句柄。使用 rsync 或 mv 来替换正在另一个客户端上使用的文件 是 导致 ESTALE 错误的常见情况。
我已尝试模拟此操作以确认但未能成功 - 所以我想在实施此策略之前检查这里:
问题: 我的理解是否准确 - 还是我需要使用不同的策略来确保 file.txt 不会损坏?
其他细节: 亚马逊 Linux 操作系统。安装的驱动器是 nsf4。文件最大可达 100MB
【问题讨论】:
-
如果您要投反对票,请您提供一个理由,以便我可以相应地调整问题。
标签: linux race-condition nfs corruption file-locking