Asynchronous NFS同步与异步

Asynchronous NFS同步与异步,asynchronous,sync,nfs,Asynchronous,Sync,Nfs,我使用NFS允许两台服务器通过简单的文本文件进行通信,但是有时,似乎读取文本文件以获取信息的服务器正在读取不完整的文件,然后由于此崩溃。然后我去看导致它崩溃的“不完整”文件,文件是完整的。读取这些文件的服务器是否可能在NFS完成写入之前看到它们?我使用linux的mv将它们从本地机器移动到NFS,只有当它们完全写入时,才会这样做,所以NFS上“应该”永远不会有不完整的状态 这个问题是否与同步与异步有关?现在我正在使用异步。根据我的理解,异步只是意味着您从写操作返回,并且您的程序可以继续运行,而这

我使用NFS允许两台服务器通过简单的文本文件进行通信,但是有时,似乎读取文本文件以获取信息的服务器正在读取不完整的文件,然后由于此崩溃。然后我去看导致它崩溃的“不完整”文件,文件是完整的。读取这些文件的服务器是否可能在NFS完成写入之前看到它们?我使用linux的
mv
将它们从本地机器移动到NFS,只有当它们完全写入时,才会这样做,所以NFS上“应该”永远不会有不完整的状态


这个问题是否与同步与异步有关?现在我正在使用异步。根据我的理解,异步只是意味着您从写操作返回,并且您的程序可以继续运行,而这种写操作将在以后发生。而同步意味着您的进程将等待写入操作完成后再继续。更改为同步会解决此问题吗?还是有更好的方法来处理这个问题?我知道两台服务器可以通过数据库进行通信,但实际上我这样做是为了降低数据库的使用率。谢谢

跨文件系统的
mv
转换为
cp
+
rm
,即使不涉及NFS,也肯定不是原子的。您应该首先将文件复制到目标文件系统中的临时文件,然后将其重命名为正确的名称。例如,而不是:

$ mv myfile.txt /mnt/targetfs/myfile.txt
做:


(这假设读取文件的过程忽略了它,而它没有正确的名称。)

对不起,我在描述中没有提到这一点,但实际上我已经这么做了,我仍然在解决这个问题。
$ mv myfile.txt /mnt/targetfs/.myfile.txt.tmp
$ mv /mnt/targetfs/.myfile.txt.tmp /mnt/targetfs/myfile.txt