因此,有一个 Java 应用程序从第三方网站下载文件并将其保存在 NFS 共享中。但偶尔,保存的文件会应用非常奇怪的权限、所有者和其他元数据。甚至没有可用的大小信息
Windows 工具显示该文件的日期为 1974 年,大小为 0 字节,但在 Linux 主机上,除了显示的信息之外,我看不到任何信息。
当我尝试统计一个文件时,它说该文件不存在。
有什么方法可以解决这个问题?如果我删除该文件,应用程序会重新下载它,但几天或几周后,问题又会再次出现
-????????? ?? ?? ?? tmp-Football.xml
谢谢
答案1
这是一个损坏的文件,几乎可以肯定是在某种传输错误(通常与重新启动 NFS 服务器或客户端在应用程序传输数据时错误地卸载有关)之前由 NFS 创建的。
如果 NFS 客户端以任何方式失败,它要么保留缓冲尝试发送的最后一位信息,然后冻结,直到 NFS 服务器再次可用来接收该数据位,要么它将丢弃最后一位信息并抛出 I/O 错误,以便应用程序可以处理/忽略它(并正常进行而不会被冻结)。
这是硬挂载和软挂载之间的本质区别。硬挂载是冻结类型,而软挂载是当不可避免的轻微网络故障发生时默默损坏数据的类型。
如果您过于关心正在传输的数据的完整性,请使用硬挂载。如果您更关心应用程序的稳定性,请使用软挂载。如果您遇到损坏问题,并且您没有像某些数据中心流氓一样疯狂地重新启动 NFS 服务器,那么现在是分别检查 NFS 服务器日志和客户端日志的好时机。同时,一些网络诊断和监控/日志是为了查看网络是否是问题所在。
Wireshark 非常适合用于实时流量监控,除了交换机日志外,它还具有许多 GUI,可以以比纯文本更清晰的方式解释其输出。两个系统上的系统日志应该可以揭示大多数信息,因为卸载的文件系统和重新启动的服务器都可以很好地显示出来。