我有一台配置了 NFS 服务的 Windows 2008 存储服务器。我正在使用 FreeBSD 客户端从存储服务器挂载共享。复制、删除文件等一切都运行正常。但是,当我find
在 FreeBSD 客户端上运行挂载文件系统内某个目录的命令时,该命令无法递归列出文件。它列出了直接子文件和目录。子目录中的文件未列出。
有人可以帮忙吗,这可能是什么问题?
答案1
IIUC Windows NFS 服务器至少曾经更像是一个“复选框功能”,而不是可用于实际工作的东西。不过,不知道 w2k8 是否有任何变化。
假设 FreeBSD 有 CIFS 客户端,那么通过 CIFS 安装可能会更顺利一些?
答案2
我在 Linux 中也看到过类似的事情,我仔细研究了查找工具。Windows Server 2008 中似乎存在一个错误,其中NFS 客户端上返回d_type
的字段为 8(DT_REG,不正确)而不是 4(DT_DIR,预期)。不出所料,find 不会递归到此类目录的子树中。(struct dirent*)
readdir()
如果你想自己测试一下,可以下载findutils-4.4.2. 修改 gnulib/lib/fts.c 第 1136 行
if (sp->fts_compar == NULL || ISSET(FTS_DEFER_STAT)) {
到
if (0 && sp->fts_compar == NULL || ISSET(FTS_DEFER_STAT)) {
并重建 find。经过此更改后,find 返回了所有预期的目录,至少在我尝试的情况下是这样。我不知道这是否是一个完整的修复,保证在所有情况下都能正常工作。
我还不知道微软是否意识到了这个问题并且提供了修复程序,以及它是否已经在 Windows Server 2008 R2 中进行了修复。