我在 VMWare ESXi 6.5 虚拟机管理程序上以 VM 形式运行安装了 cifs-utils 的 Ubuntu Server 16.04.3 LTS 64 位。
我在 Windows Server 2016 上有一个常规网络共享设置。
目标是利用 Veeam Linux Agent 通过 CIFS 将此 Linux VM 备份到 Windows 共享。
问题:
当我配置 Veeam 以使用 CIFS 时(查看日志),veeam 正在执行此命令来连接到网络共享:
mount -t cifs -o username=MyUsername,password=*,rw,soft //MyServerIP/MyShare /tmp/veeam/MyServerIPMyShare
它给了我错误:mount error(112): 主机已关闭。
当我手动运行命令时,它会执行相同的操作。
但是当我运行这样的命令时:
mount -t cifs -o vers=3.0,username=MyUsername,password=*,rw,soft //MyServerIP/MyShare /tmp/veeam/MyServerIPMyShare
如果我使用 2.0,它也可以毫无问题地安装。
问题是,Veeam 中没有办法强制使用 3.0 版本。因此,我需要以某种方式在 Linux 中强制使用。
我发现其他人也遇到了这个问题,但没有提出解决方案。
我尝试了以下操作(根据我的发现):
在 /etc/samba/smb.conf 中添加以下行
server min protocol = SMB2
server max protocol = SMB3
client min protocol = SMB2
client max protocol = SMB3
min protocol = SMB2
max protocol = SMB3
client ipc min protocol = SMB2
我将各种变化与重新启动进行混合和搭配,但无济于事。
答案1
我意识到这已经很老了,但是我在搜索同样的东西时被带到这里:在 Ubuntu 16.04 上使用 veeam(Linux 4.0 的免费代理)备份到托管在 Windows Server 2016 上的现代 SMB 共享。与 OP 一样,通过 veeam 向导进行的配置失败,当我测试 mount 命令时也是如此,但是在 mount 命令中添加“vers=3.02”却可以工作(如预期的那样)。
这令人沮丧,因为我的 18.04 机器连接良好,并且从读取来看,新版本的 cifs-utils 已将 SMB3 设置为默认值。
我确实找到了解决方案但是。我尝试找到 veeam 使用的安装脚本,但他们不使用任何可以编辑的传统类型的脚本。我决定尝试在 smb 配置的向导字段之一中添加“vers=3.02”选项,假设它只是接受我的输入并形成安装命令,它成功了!我将其添加到用户名后面,如“entered_username,vers=3.02”。
答案2
对于给定的版本,除了添加到命令行(或添加到)mount.cifs
之外,我不知道还有其他方法。驱动程序会忽略。从历史上看,它似乎无法自动协商,只是尝试了一个协议版本 -vers=3.0
/etc/fstab
mount.cifs
smb.conf
mount.cifs
2017 年 7 月之前为 1.0,之后为 3.0(2017 年 7 月是代码更改为 cifs 4.13 的日期,早期版本在运行时不会查看该日期!)来自2017 年 9 月看起来它可以自动协商,默认为 2.1 或更高版本(服务器可以提供的最高版本)。
因此,如果您可以升级您的 cifs 版本,那么即使没有明确指定协议版本,您也应该能够获得不同的结果协议版本。
以下是 mount.cifs、smb.conf 和 Windows 协议版本的映射:
vers=3.0
是 SMB3,即 Windows 8、Windows Server 2012vers=2.1
是 SMB2_10,即 Windows 7、Windows Server 2008 R2vers=2.0
是 SMB2_02,即 Vista SP1、Windows Server 2008vers=1.0
是 NT1,即 Windows 95、NT 4.0