最近发现圈子里有个挺坑的现象,不少小伙伴在折腾 Windows 服务器或者本地 NAS 的时,突然发现 SMB(Server Message Block)协议挂了。明明昨天还能正常传文件,今天死活连不上。排查了半天,甚至以为是中了病毒或者网络配置飞了。

结果最后发现,居然是 Windows 的 Codex 组件在背后搞鬼,偷偷把 SMB 服务给禁用了。今天我就来聊聊这个问题,顺便给大家整理一份排查和修复的保姆级教程。

什么是 Codex?它为什么要动我的 SMB?

首先,咱们得搞清楚这个 Codex 是个啥。在很多 Windows 环境(特别是服务器版本或者某些精简版)中,Codex 组件通常与系统更新、媒体扩展或者特定的第三方兼容层有关。它并不是微软原生的标准组件名称,更像是某些集成环境或特定更新包里的一个模块。

Windows 服务窗口,显示 LanmanServer 服务状态

检查服务窗口中的 Server (LanmanServer) 和 Workstation 服务状态

问题就出在这里:有些版本的 Codex 在进行后台自动更新或配置重置时,会误判 SMB 协议的安全性。为了所谓的“优化系统性能”或“增强安全性”,它可能会直接修改注册表,或者通过 PowerShell 命令将 SMB 1.0 甚至 SMB 2.0/3.0 的服务给禁用。

SMB 可是局域网共享的命根子啊,它一断,你的映射驱动器就全红了,Docker 容器挂载的 volume 也可能报错,坑人不浅。

症状自测:你的 SMB 是不是被禁用了?

Windows 功能开启或关闭窗口中的 SMB 选项

在 Windows 功能中启用 SMB 协议支持

如果你遇到以下几种情况,大概率就是中招了:

  1. 映射网络驱动器断开:明明 IP 能 ping 通,网页也能打开,但就是无法访问共享文件夹。
  2. NAS 无法连接:群晖或威联通后台显示连接被拒绝,但在其他设备上正常。
  3. 服务报错:在事件查看器里能看到关于 SMB 服务的错误日志,提示服务未运行或协议不可用。
  4. Docker 报错:如果是跑在 Windows 上的 Docker,挂载本地目录可能会失败,提示路径不存在。

修复教程:三步恢复 SMB 服务

既然知道了原因,修复起来其实并不难,主要就是检查服务状态和注册表配置。大家跟着一步步操作。

第一步:检查 SMB 服务状态

  1. Win + R 键,输入 services.msc 回车。
  2. 在服务列表中找到以下两项:
    • Server(服务名可能是 LanmanServer)
    • Workstation(服务名可能是 LanmanWorkstation)
  3. 确保这两个服务的状态都是“正在运行”,启动类型最好是“自动”或“自动(延迟启动)”。如果是停止状态,右键点击启动即可。

第二步:启用 SMB 功能(最关键的一步)

很多时候服务看似开了,但协议层面的功能被关了。我们需要通过 Windows 功能面板开启它。

  1. 打开“控制面板” -> “程序和功能” -> “启用或关闭 Windows 功能”。
  2. 在列表中找到 SMB 1.0/CIFS File Sharing Support
  3. 注意:为了安全起见,通常不建议开启 SMB 1.0(毕竟它有 WannaCry 漏洞的风险),但也得看你的老旧设备需求。如果你只是 Windows 10/11 互传,其实主要靠 SMB 2.0/3.0。
  4. 确保下层的 SMB DirectSMB Server 这类选项是被勾选的。

如果你懒得点鼠标,直接用管理员权限打开 PowerShell,输入以下命令确保 SMB 协议是开启的:

Set-SmbServerConfiguration -EnableSMB2Protocol $true
Set-SmbServerConfiguration -EnableSMB1Protocol $false  # 安全起见建议关闭,除非必须

或者检查客户端配置:

Get-SmbClientConfiguration

确认 RequireSecuritySignature 等配置没有被异常修改。

第三步:防火墙与注册表排查

Codex 有时候会改防火墙规则。你需要检查一下。

  1. 打开 Windows Defender 防火墙 -> 高级设置
  2. 点击左侧的 入站规则,在右侧找到“文件和打印机共享”相关的规则。确保它们是“已启用”的状态,尤其是针对“域专用”和“公用”配置文件的规则。

如果以上都没问题,就要进注册表挖一挖了(操作前请记得备份注册表):

  1. Win + R 输入 regedit
  2. 定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  3. 查看右侧是否有名为 SMB1SMB2 的 DWORD 值,默认值为 0 即为启用。如果被改成了 1,记得改回 0,然后重启电脑。

避坑指南:如何防止 Codex 再次作妖?

既然知道 Codex 可能会乱动配置,咱们就得防着点。如果你使用的是集成好的 Windows 环境(比如某些自带面板的 VPS 镜像),可以考虑这样做:

  1. 暂停自动更新:如果是生产环境,建议暂时关闭 Windows Update,等更新稳定了再手动打补丁。
  2. 禁止 Codex 自启:在任务计划程序里,找到与 Codex 相关的触发器,将其禁用。
  3. 脚本监控:写一个简单的 PowerShell 脚本,定期检查 SMB 服务状态,一旦发现服务停了就自动拉起,配合发邮件告警,这才是运维该有的样子。

写在最后

Windows 作为主力系统虽然方便,但这种“偷偷改配置”的毛病确实让人头大。SMB 协议作为局域网共享的核心,一旦瘫痪非常影响效率。希望今天的教程能帮大家解决燃眉之急,如果你还遇到过其他由于组件更新导致系统抽风的奇葩问题,欢迎在评论区交流避坑!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭