黎小葱 2026-02-27 12:50 采纳率: 98.4%
浏览 0
已采纳

LOL更新后残留文件为何长期占用大量磁盘空间?

《英雄联盟》(LOL)更新后残留文件长期占用大量磁盘空间,是玩家普遍遭遇的典型技术问题。其根本原因在于Riot客户端采用“增量式热更新”机制:每次更新并非覆盖旧文件,而是下载新版本补丁包(.pak/.bin),并将旧版本完整保留于`/Game/Config/Updates/`或`/RADS/solutions/lol_game_client_sln/releases/`等目录中,用于回滚、校验及断点续更。同时,客户端默认不自动清理历史版本(尤其当检测到自定义皮肤、Mod或第三方工具修改时会主动禁用自动清理),导致数次大版本更新后残留文件可达10–30GB。此外,Windows权限限制或杀毒软件拦截也可能使清理进程失败。该问题虽不影响游戏运行,但显著挤压SSD空间、拖慢磁盘扫描与系统备份效率,且普通用户难以识别哪些文件可安全删除——误删可能导致客户端异常或需重下全量包。
  • 写回答

1条回答 默认 最新

  • Airbnb爱彼迎 2026-02-27 12:50
    关注
    ```html

    一、现象层:磁盘空间异常膨胀的可观测特征

    玩家在《英雄联盟》(LOL)经历3–5次大版本更新(如14.10 → 14.15 → 14.18 → 14.22)后,C:\Riot Games\League of Legends\RADS\solutions\lol_game_client_sln\releases\ 目录下常堆积12–28个完整 release 子目录(如 14.10.429.1234514.15.387.67890),每个平均占用 1.2–2.6 GB;同时 Game/Config/Updates/ 中残留数百个 .pak.bin 补丁文件(含 patch-14.10-to-14.11.pak 等),总量常超 30 GB。Windows 磁盘清理工具无法识别其归属,资源管理器显示“已删除但未释放”状态(因文件句柄被 RiotClient.exe 持有)。此为典型“幽灵空间占用”现象。

    二、机制层:增量式热更新(Delta Patching)的设计逻辑与副作用

    • 原子化版本快照:Riot 客户端将每次发布构建成独立 release 包(含完整 game.dllassets/data/),而非覆盖式升级;
    • 回滚保障优先级高于空间效率:当网络中断或校验失败时,客户端可秒级切换至前一 release 并继续运行;
    • 安全熔断策略:若检测到 Plugins/ 下存在非签名 DLL、DATA/Skins/ 被手动修改、或进程列表含 LOLModLoader.exe 等第三方工具,自动清理开关(auto_cleanup_enabled=true)被强制设为 false 并写入 RADS/user/properties/lol.properties
    • 校验链依赖:每个 .pak 文件含 SHA-256 + RSASSA-PKCS1-v1_5 签名,旧版文件参与新包完整性验证(如 14.22 验证需读取 14.21 的 manifest.json)。

    三、权限层:Windows 安全模型与清理失败的深层根因

    以下为常见权限冲突场景及对应诊断命令:

    问题类型表现验证命令修复路径
    ACL 继承中断子目录无“Users”组读取权限icacls "C:\Riot Games\..." /verify重置继承:icacls "C:\Riot Games\..." /reset /T
    杀毒软件劫持Windows Defender 实时保护阻止 cleanup.exe 删除Get-MpThreatDetection | ? ThreatName -like "*Riot*"添加排除路径:Add-MpPreference -ExclusionPath "C:\Riot Games\League of Legends\RADS\"

    四、工程层:安全清理的三级操作体系(面向IT从业者)

    1. Level 1 — 客户端原生清理(低风险):启动 Riot Client → 设置 → 游戏 → “清理旧版本”按钮(仅对未触发熔断的环境生效);
    2. Level 2 — RADS CLI 强制清理(中风险,需停服):执行 C:\Riot Games\League of Legends\RADS\system\rads_user_kernel.exe --clean,该命令绕过 UI 熔断检查,但要求所有 Riot 进程已退出;
    3. Level 3 — 手动精简(高风险,需审计):保留最新 2 个 release 目录 + 当前 active release 的 deploy/ 符号链接指向目录 + 所有 Updates/*.pak 中文件名含 to-当前版本 的补丁,其余可删(脚本见下文)。

    五、自动化层:生产级清理脚本(PowerShell 7+)

    # 安全清理脚本:lol-cleanup-safe.ps1(需以 Administrator 运行)
    $base = "C:\Riot Games\League of Legends"
    $releases = Get-ChildItem "$base\RADS\solutions\lol_game_client_sln\releases\" -Directory | 
      Sort-Object Name -Descending | Select-Object -Skip 2
    $releases | ForEach-Object {
      Write-Host "Removing obsolete release: $($_.Name)" -ForegroundColor Yellow
      Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
    }
    # 清理过期 .pak(仅保留最近90天及关联当前版本的补丁)
    Get-ChildItem "$base\Game\Config\Updates\*.pak" | 
      Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) -and 
                      $_.Name -notmatch "to-$(Get-Content "$base\RADS\solutions\lol_game_client_sln\releases\active\version.txt")" } |
      Remove-Item -Force
    

    六、架构层:可视化清理决策流程(Mermaid)

    flowchart TD A[启动清理流程] --> B{客户端是否正在运行?} B -->|是| C[提示:请关闭Riot Client & LOL客户端] B -->|否| D{是否启用自动清理?} D -->|否| E[检查lol.properties中的auto_cleanup_enabled] D -->|是| F[执行内置清理] E --> G[检查Plugins/ DATA/Skins/ 是否被修改] G -->|存在非签名文件| H[手动清理模式激活] G -->|洁净| I[启用RADS CLI强制清理] H --> J[生成清理白名单报告] I --> K[执行rads_user_kernel.exe --clean]
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 2月28日
  • 创建了问题 2月27日