Windows Server 2016 系统盘(通常是 C 盘)爆红,是运维和开发过程中非常头疼但也非常常见的问题。作为在云环境里摸爬滚打多年的“老兵”,我不建议一上来就想着重装或者盲目删文件,那样风险太大且容易出乱子。
解决这个问题的核心思路只有两条:一是“扩容”(把盘子做大),二是“瘦身”(把没用的东西扔了)。针对云服务器和本地物理机,处理方式略有不同,下面我按优先级和实操性给你梳理一套完整的解决方案。
第一阶段:紧急止损与快速清理(不动刀,先止血)
如果服务器正在高负载运行,或者你不敢动系统分区,先做这些无损操作:
-
清理 Windows Update 缓存
这是 C 盘最大的“隐形杀手”。Windows Server 的更新包下载后不会自动删除,堆积起来几个 G 很正常。- 操作:以管理员身份打开 CMD 或 PowerShell,执行
net stop wuauserv停止服务,然后去C:WindowsSoftwareDistributionDownload文件夹下把所有内容清空,最后net start wuauserv重启服务。 - 进阶:使用系统自带的“磁盘清理”工具,勾选“Windows 更新清理”和“临时文件”。
- 操作:以管理员身份打开 CMD 或 PowerShell,执行
-
迁移页面文件(Pagefile.sys)
内存如果足够大(比如 32G+),页面文件其实可以挪走,或者限制大小。这个文件通常在 C 盘根目录,几 GB 到几十 GB 不等。- 操作:右键“此电脑” -> 属性 -> 高级系统设置 -> 性能“设置” -> 高级 -> 虚拟内存“更改”。取消“自动管理”,选择 C 盘设为“无分页文件”,选择 D 盘或其他非系统盘设为“系统管理的大小”或自定义大小,重启生效。
-
检查大型日志文件
很多应用(如 IIS、SQL Server、Java 应用)会把日志打到默认路径。- 重点排查:
C:inetpublogsLogFiles(IIS),C:ProgramDataMicrosoftSearchDataApplicationsWindows(搜索索引),以及各类数据库的数据文件。如果发现某个.log文件特别大(几百 MB 甚至 GB 级),立即联系对应应用的负责人进行日志轮转配置,不要直接手动删除正在写入的文件。
- 重点排查:
第二阶段:数据搬家(治本之策)
系统盘只装系统和软件,所有业务数据必须搬离 C 盘。这是铁律。
-
迁移用户目录(Desktop, Documents, Downloads)
很多时候用户习惯把文件存在桌面或文档里,导致 C 盘膨胀。- 操作:右键“桌面”/“文档” -> 属性 -> 位置 -> 移动 -> 选择 D 盘(或其他大容量盘)的新建文件夹。注意:迁移后,旧数据会自动复制过去,新保存的位置也会变。
-
迁移应用程序数据
- SQL Server / MySQL / Oracle:修改实例配置,将默认的数据文件(
.mdf,.ldf等)和数据目录指向其他盘符。 - Docker / WSL:如果是容器化部署,确保镜像层和数据卷挂载在非系统盘。
- Web 站点:IIS 的网站根目录默认在
C:inetpubwwwroot,务必将其移动到 D 盘或 E 盘,并在 IIS 管理器中重新绑定路径。
- SQL Server / MySQL / Oracle:修改实例配置,将默认的数据文件(
-
卸载非必要组件
Windows Server 2016 安装了很多你可能永远用不到的功能。- 操作:服务器管理器 -> 管理 -> 移除角色和功能。去掉“打印服务”、“Hyper-V”(如果你不用)、“.NET Framework 3.5”(除非老程序依赖)等。虽然单个占用不大,但积少成多,且减少攻击面。
第三阶段:磁盘扩容(最推荐的终极方案)
如果你的系统是跑在阿里云、腾讯云、华为云等主流云平台上的,强烈建议直接扩容系统盘。这是最安全、最彻底、成本最低的方式。
场景 A:云服务器(AWS/Azure/阿里云/腾讯云/华为云等)
-
控制台操作:
- 登录云厂商控制台,找到你的 ECS/CVM 实例。
- 找到“云盘”或“磁盘”选项卡。
- 选择系统盘,点击“扩容”。
- 关键点:你可以一次性扩容到最大支持的大小(例如从 40G 扩到 500G)。大部分厂商支持在线扩容,无需关机。
-
操作系统内识别:
- 扩容完成后,进入 Windows Server 2016。
- 按下
Win + R,输入diskmgmt.msc打开磁盘管理。 - 你会看到 C 盘后面有一段“未分配”的空间。
- 右键 C 盘 -> “扩展卷” -> 下一步 -> 完成。
- 注意:如果中间有恢复分区阻挡,无法直接扩展,可能需要借助第三方工具(如傲梅分区助手免费版)或命令行
diskpart来处理,但通常云厂商的预装镜像都处理得很好,直接扩展即可。
-
优点:
- 零风险:不需要移动数据,不需要停机(大多数情况)。
- 成本低:按需付费,用多少买多少。
- 灵活性:随时可以再缩容(部分厂商支持)或再扩容。
场景 B:本地物理服务器 / 虚拟机(非云环境)
如果是在自家机房或 VMware/Hyper-V 里,操作稍微麻烦一点:
-
宿主机层面扩容:
- Hyper-V:右键虚拟机 -> 编辑磁盘 -> 扩展 -> 指定新大小。
- VMware:关闭虚拟机 -> 编辑 VM 设置 -> 硬盘 -> 扩展 -> 指定新容量。
-
Guest OS 层面扩展:
- 同样进入
diskmgmt.msc。 - 如果后面有空闲空间,右键 C 盘“扩展卷”。
- 坑点提示:如果 C 盘和 D 盘相邻,且 D 盘占用了空间,你需要先备份 D 盘数据,删除 D 盘分区,扩展 C 盘,然后再重建 D 盘并恢复数据。千万不要在不备份的情况下尝试合并分区!
- 同样进入
第四阶段:高阶技巧与避坑指南
-
关于第三方分区工具:
网上有很多教程推荐用 DiskGenius 或 Partition Wizard 来“无损调整分区大小”。- 我的建议:在云服务器上绝对不要用这种工具。云盘底层结构特殊,强行分区可能导致引导失败或性能下降。老老实实用微软自带的磁盘管理或云厂商控制台。
- 只有在本地物理机且数据已完全备份的情况下,才考虑使用这类工具进行精细化的分区调整。
-
启用存储感知(Storage Sense):
Windows 10/Server 2016 引入了存储感知。- 操作:设置 -> 系统 -> 存储 -> 开启“存储感知”。它可以自动清理临时文件、回收站中的过期项目。对于长期无人值守的服务器,这是一个很好的后台维护手段。
-
监控与告警:
不要等到 C 盘红了才行动。- 部署 Zabbix、Prometheus + Node Exporter 或云厂商自带的云监控。
- 设置阈值:当 C 盘剩余空间低于 10% 时发送钉钉/邮件/短信告警。
-
合规与安全提醒:
- 在清理文件时,严禁删除
C:Windows、C:Program Files、C:ProgramData下的未知文件。 - 不要为了省空间而禁用必要的系统服务(如杀毒软件实时保护、Windows Defender 等),这会带来巨大的安全风险。
- 如果是生产环境,任何变更前,务必快照!无论是云盘的快照还是系统的 Ghost/Backup,这是最后一道防线。
- 在清理文件时,严禁删除
总结建议
- 如果是云服务器:别折腾清理了,直接去控制台花几分钟把系统盘扩容到 100G 或 200G,然后进系统扩展卷。这是最省心、最专业、最符合现代运维理念的做法。
- 如果是本地服务器:先清理 Update 缓存和页面文件,然后把所有业务数据(数据库、网站、日志、用户文件)迁移到非系统盘。如果还不够,再考虑增加一块物理硬盘并组建 RAID 或简单挂载。
记住,系统盘 = 操作系统 + 软件 + 少量配置数据,数据盘 = 所有业务数据。守住这个界限,你就不会再为 C 盘空间焦虑了。
云技术博客