−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS
开始使用

如何在 VPS 上更新 Windows Server:点哪里、要多久、怎样收回磁盘空间

通过设置、sconfig 或一个 PowerShell 脚本安装 Windows Server 2022 更新,安全地重启,并清理每次更新留下的好几个 GB。时间和磁盘数据都来自我们从 2022 年镜像一路更新到 2026 年 10 月更新的服务器。

Windows Server 2022 每月会收到一个大的累积更新,另外还有一些针对 .NET 和 Defender 的小更新。在我们的镜像上,Windows 会替你下载,然后等你决定何时安装,所以重启永远不会突然发生。反过来说:你不装,就没人装。本文介绍三种安装方式、重启过程中会发生什么,以及如何收回更新留下的磁盘空间。为了拿到这些数字,我们把一台 Windows Server 2022 从 2022 年 3 月的初始版本,一步步更新到了 2026 年 10 月的更新。

1. 查看当前版本

打开 PowerShell 并运行:

$v = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
"{0}.{1}" -f $v.CurrentBuild, $v.UBR

第二个数字是更新级别。我们的服务器起点是 2022 年 3 月的 20348.587,全部更新之后变成 20348.5761,也就是 2026 年 10 月的累积更新。现在你在我们这里订购的 Windows 服务器也从这个版本起步:2026 年 10 月 25 日,我们正是按这些步骤更新了镜像。Get-HotFix 可以列出已安装的内容:

Get-HotFix | Sort-Object InstalledOn | Select-Object -Last 5

2. 安装更新

选你顺手的方式。三种方式用的都是同一个 Windows Update。

设置。 Start → Settings → Update & Security → Windows Update → Check for updates,然后点 Install now。如果页面提示某些设置由你的组织管理,那是我们的“仅下载”策略,并不妨碍你安装。

sconfig。 在 PowerShell 中输入 sconfig。选项 6) Install updates 会问要搜索什么:选 All quality updates,然后安装。选项 5) Update setting 在我们的镜像上显示为 Download only。也可以在这里改成 Automatic,之后 Windows 会按自己的时间表安装并重启。

同一个菜单里还有 Feature updates。除非你有更新版本 Windows Server 的许可证,否则别碰它。sconfig 会提示:功能更新需要新的产品密钥,并会停用你现在的版本。

PowerShell。 如果要写脚本或计划任务,Windows Update 自带的 API 不需要额外模块就能完成全部工作。我们运行的是这段:

$session  = New-Object -ComObject Microsoft.Update.Session
$result   = $session.CreateUpdateSearcher().Search("IsInstalled=0 and IsHidden=0 and Type='Software'")
$updates  = New-Object -ComObject Microsoft.Update.UpdateColl
foreach ($u in $result.Updates) { $u.AcceptEula(); [void]$updates.Add($u); $u.Title }
if ($updates.Count -gt 0) {
    $d = $session.CreateUpdateDownloader(); $d.Updates = $updates; [void]$d.Download()
    $i = $session.CreateUpdateInstaller();  $i.Updates = $updates
    $r = $i.Install(); "Result: $($r.ResultCode)  Restart needed: $($r.RebootRequired)"
} else { "Nothing to install" }

请在管理员身份的 PowerShell 中运行。结果代码 2 表示成功;在已是最新状态的服务器上,它只会输出 Nothing to install。

3. 重启,并让它完成

累积更新之后 Windows 需要重启,有时会重启两次。我们看到的情况如下:

轮次安装了什么安装用时重启
12026 年 9 月累积更新、.NET 更新、Defender、恶意软件删除工具22 分钟2 分 51 秒,约一分钟后 Windows 又自行重启了一次
22026 年 10 月累积更新、Defender17 分钟约 2 分钟,包括第二次自动重启
3Defender 平台和定义33 秒无
4已经没有剩余更新——

有两点需要知道:

  • 第二次重启是正常的。 我们重新连上大约一分钟后,Windows 为了完成更新又自行重启了一次。如果你刚登录远程桌面会话就断开了,多半就是这个原因。等一分钟再连。
  • 显示“Working on updates”时不要强制关机。 用开始菜单或 Restart-Computer 重启,然后耐心等待。在替换系统文件时强制断电,是更新后 Windows 无法启动的常见原因。

然后再检查一次。落后好几个月的服务器会分层收到更新:我们是装完 9 月的更新之后,才看到 10 月的更新。一直重复,直到搜索不到任何更新为止。

4. 收回磁盘空间

更新会让磁盘占用变大。Windows 会保留每个被替换的系统文件的旧版本,以便你以后卸载更新。在我们 50 GB 的服务器上:

阶段已用空间
2022 年的原始镜像12.6 GB
第一次累积更新期间20.8 GB
两次累积更新之后24.5 GB
StartComponentCleanup 之后17.3 GB
/ResetBase 之后15.7 GB
清空更新下载缓存之后14.6 GB

在管理员 PowerShell 中清理:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
Dism.exe /Online /Cleanup-Image /StartComponentCleanup

第一条命令显示能回收多少空间。第二条删除已被新更新取代的组件旧版本。在我们的服务器上它运行了 14 分钟,释放了 6.9 GB。再加上 /ResetBase,又在约一分半钟内释放了 1.6 GB,但之后已安装的更新就再也无法卸载了。在正在使用的服务器上我们会跳过这一步,留到真正缺空间的时候再用。

Windows Update 下载的文件也可以删掉。我们这里占了 1.1 GB:

Stop-Service wuauserv
Remove-Item C:\Windows\SoftwareDistribution\Download\* -Recurse -Force
Start-Service wuauserv

想知道除了更新之外还有什么在占磁盘,可以看磁盘空间那篇文章,里面有 Windows 和 Linux 的数据。

5. 养成习惯

微软在每月第二个星期二发布安全更新。每月运行一次 sconfig 的第 6 项或上面的脚本,重启后再检查一次。大更新之前,把重要的东西复制到服务器以外的地方。如果还没做,记得加固 RDP:更新能堵住 Windows 的漏洞,但挡不住别人猜中弱密码。

选哪个套餐

更新需要空间。我们测试用的是 Windows-Small(4 vCPU、4 GB、50 GB,每月 $11),两次累积更新之后仍有超过 25 GB 空闲。如果你打算安装大型软件,Windows-Medium 每月 $19,提供 60 GB。四个 Windows 套餐都在 Windows VPS 页面,支付方式为 Base、Ethereum 或 Polygon 网络上的 USDT、USDC 或 ETH。

常见问题

Windows Server 会自动安装更新吗?

在我们的镜像上,它会自动下载,但会等你来安装。更新策略是“仅下载”,所以服务器绝不会在没有提示的情况下重启。这也意味着安装要靠你自己。在微软每月第二个星期二发布之后,每月装一次是不错的节奏。

更新 Windows Server 需要多长时间?

一个月度累积更新在我们 4 vCPU 的服务器上安装用了 17 分钟,另加约两分钟重启。落后好几年的服务器需要好几轮:我们的服务器用了四轮,总共约一小时。

屏幕显示“Working on updates”时可以关机吗?

不要。这个界面表示 Windows 正在替换系统文件,中途强制关机可能导致无法启动。请等它完成。在我们的服务器上,最长的一次重启也不到三分钟。

sconfig 提示有功能更新,要装吗?

只有当你拥有更新版本 Windows Server 的许可证时才装。sconfig 自己会提示:功能更新需要新的产品密钥,并会停用旧版本。安全修复只需要质量更新。

为什么更新后磁盘满了?

Windows 会保留它替换的每个系统文件的旧版本。在我们的服务器上,两次累积更新后已用空间从 12.6 GB 涨到 24.5 GB。用 DISM 清理组件并清空下载缓存后,又回到了 14.6 GB。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。