为什么Linux看不到Windows 10共享文件,但可以创建和删除……?

为什么Linux看不到Windows 10共享文件,但可以创建和删除……?

我已经在 Debian-stretch 中使用 cifs 安装了一个 Windows 10 共享,其 cifs-utils 版本为 2:6.7-1 内核 4.15

在 Windows 中,我在共享和安全选项卡中授予了用户完全权限和完全控制/访问权限,并且我还完成了整个“替换子对象上的条目”等操作,而且无论如何用户都是管理员成员。

从 Linux

我可以将文件写入共享,但是ls -la 看不到任何文件/目录以外系统容量信息。但有些文件会显示出来。例如:touch cantseethis; echo "I can see this" > test.txt;

我还可以删除任何我看不到的文件:rm fileIcantSee有效。从 Linux 写入共享的所有文件都会在 Windows 10 中显示并正常工作。

我像这样安装它: mount -t cifs //windows-10-puter/D /mnt/windows-10/D -o username=bob,password=SECRETSTUFF,noexec,uid=101001,gid=101001

我可以使用选项 vers=3 进行挂载,没有任何区别。如果我尝试使用 vers=3.1.1 进行挂载,则会得到

mount error(11): Resource temporarily unavailable
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

如果我使用 vers=3.0 或 vers=3 或 vers=2.0 进行安装,它将安装,但问题不会改变。我尝试使用安装,vers='1.0'但它说

mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
  • 在 vers=3 和 vers='2.0' 之后我确实启用了低级加密选项,但问题没有解决,尝试 vers=1.0,但如上所述,它在 vers='1.0' 时没有连接

这是在新格式化的虚拟磁盘上。

# cat /proc/fs/cifs/DebugData
Display Internal CIFS Data Structures for Debugging
---------------------------------------------------
CIFS Version 2.10
Features: dfs fscache lanman posix spnego xattr acl
Active VFS Requests: 0
Servers:
Number of credits: 33
1) Name: 192.168.122.104 Uses: 2 Capability: 0x300047   Session Status: 1   TCP status: 1
    Local Users To Server: 1 SecMode: 0x1 Req On Wire: 0
    Shares:
    0) IPC: \\windows-10-puter\IPC$ Mounts: 1 DevInfo: 0x0 Attributes: 0x0
    PathComponentMax: 0 Status: 1 type: 0 
    Share Capabilities: None    Share Flags: 0x30

    1) \\windows-10-puter\D Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
    PathComponentMax: 255 Status: 1 type: DISK 
    Share Capabilities: None Aligned, Partition Aligned,    Share Flags: 0x0    Optimal sector size: 0x200

    2) \\windows-10-puter\C Mounts: 1 DevInfo: 0x20020 Attributes: 0xc706ff
    PathComponentMax: 255 Status: 1 type: DISK 
    Share Capabilities: None Aligned, Partition Aligned,    Share Flags: 0x0    Optimal sector size: 0x200

    MIDs:

有趣的是,我这样做了

echo "foo" | tee 1 2 3 创建了文件 2 和 3。但当我ls之后这样做的时候,突然间我能看到一切太奇怪了。问题似乎已经消失了。 也许这是 Samba 错误,发生在非常空/新的磁盘上。我删除了文件 2 和 3,现在它仍然正常工作……

答案1

这可能是您的 Linux 内核版本中的错误。在某个时候,它的 SMBv2+ 客户端出现错误,它会跳过 2 个目录条目,因为预期它们是虚拟的...条目;但是,由于 Windows 上的卷根没有这些条目,因此它会跳过实际文件。

修复该问题的提交存在于内核 4.19.0 中:

犯罪0595751f267994c3c7027377058e4185b3a28e75

    smb2:修复根共享目录列表中丢失的文件

    当安装作为驱动器根目录的 Windows 共享时(例如 C$)
    服务器不返回 . 和 .. 目录条目。这导致
    smb2 代码路径错误地跳过了前 2 个条目。

内核 4.19 存在于拉伸后端口,所以您应该升级。或者,stretch 中的内核 4.9 也在 4.9.132 中收到了此修复。

(另一方面,4.15 既不是官方的 LTS 内核,也不是 Debian 的“稳定”内核,并且它的开发已于 2018 年 4 月停止。除非您自己动手,否则不会修复它。)

请注意,Linux 内核的 SMB/CIFS 客户端(包括 cifs-utils)不是 Samba这不是 Samba 的错误,因此仅升级 smbclient 无法解决这个问题。


您收到“主机已关闭”的提示是因为 Windows 系统未安装 SMBv1 服务器。(如果 Windows 10 检测到根本没有使用 SMBv1 支持,它会自动卸载该支持。)尽管 SMBv1 协议在所有方面都已过时,但如果绝对必要,可以通过 PowerShell 将其重新添加到 Windows 10。

相关内容