我已经在 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。