Featured image of post Chrome 数据目录搬家:mklink 符号链接 C 盘到 D 盘 一招搞定

Chrome 数据目录搬家:mklink 符号链接 C 盘到 D 盘 一招搞定

Google Chrome 用户数据目录占用 C 盘空间根治方案:彻底关闭 Chrome → 迁移数据到 D 盘 → mklink 创建目录联接 → 一劳永逸

一、为什么 Chrome 是 C 盘空间"头号杀手"

Chrome 的用户数据目录 C:\Users\<USER>\AppData\Local\Google 默认在 C 盘,装几年之后轻松 10-30 GB

  • Cache —— 浏览器缓存
  • Code Cache —— 编译后的 JS 缓存
  • Service Worker\CacheStorage —— PWA 缓存
  • IndexedDB —— 网页数据库
  • Extensions —— 扩展
  • Local Storage —— localStorage

256 GB 的 C 盘装上 Chrome 用一两年,经常被吃光 30-50 GB

两条思路

  1. mklink 目录联接——把整个 Google 目录映射到 D 盘一劳永逸
  2. --disk-cache-dir 启动参数——只搬缓存不搬历史 / 密码 / 扩展

mklink 是首选——所有 Chrome 数据都搬

二、操作流程

2.1 第一步:彻底关闭 Chrome

迁移前必须确保没有任何 Chrome 进程在读写 Google 文件夹:

1
2
3
4
1. 关闭所有 Chrome 浏览器窗口
2. Ctrl+Shift+Esc 打开任务管理器
3. 检查进程列表
4. 如果看到 Google Chrome / Google Update → 右键 "结束任务"

为什么必须关

  • Chrome 进程会锁定数据库文件HistoryLogin Data
  • 关进程时 mmap 锁没释放——剪切 / 移动时会报"文件被占用"
  • Google Update 进程自动重启 Chrome——先把它也杀

2.2 第二步:迁移数据

1
2
3
4
5
6
7
1. 在 D 盘新建文件夹:D:\Google_Data(名字随意)
2. 来到 C:\Users\<USER>\AppData\Local
3. 找到 Google 文件夹 → Ctrl+X 剪切
4. 粘贴到 D:\Google_Data\Google
5. 现在的状态:
   - D:\Google_Data\Google\    ← 实际数据
   - C:\Users\<USER>\AppData\Local\Google\    ← 没了

必须用剪切Ctrl+X),不能复制——否则会留两份移动后 C 盘应该没有 Google 目录

2.3 第三步:管理员打开 cmd

1
2
1. Win+S 搜 "cmd"
2. 右键 → "以管理员身份运行"

为什么必须管理员mklink 是系统级操作,非管理员会被拒

2.4 第四步:创建符号链接

1
mklink /j "C:\Users\<USER>\AppData\Local\Google" "D:\Google_Data\Google"

参数说明:

  • /j —— 目录联接junction)——Windows 专有的硬链接形式
  • 第一个参数 —— 联接点(C 盘原位置)
  • 第二个参数 —— 真实目录(D 盘目标)

成功标志

1
为 C:\Users\...\Local\Google <<===>> D:\Google_Data\Google 创建的联接

同时你在 C 盘原位置会看到一个带有"快捷方式"图标的 Google 文件夹——但这是个"目录联接"不是普通快捷方式)。

2.5 验证

1
2
3
4
5
1. 启动 Chrome
2. 访问 chrome://version
3. 检查"个人资料路径" → 应该是 C:\Users\<USER>\AppData\Local\Google\...
4. 实际所有读写都走 D:\Google_Data\Google
5. 检查 D 盘空间 → 应该多了几个 GB

三、原理

类型标志适用
文件硬链接mklink /H单个文件
文件符号链接mklink(默认)单个文件
目录符号链接mklink /D目录(要管理员
目录联接mklink /J目录(Win Vista+ 内置,无管理员要求?

/j 的特殊性

  • 不需要管理员某些 Win10 版本仍要——建议都用管理员
  • 绝对路径——重命名 / 移动真实目录会断链
  • 不支持跨卷?——实际支持 NTFS 跨卷Symlink 才完全支持
  • 不支持网络共享要 /D

3.2 与快捷方式的区别

维度快捷方式 (.lnk)目录联接 (/J)
对应用透明❌ 应用不知道完全透明——应用以为在原位置
文件操作双击才会跳转读写都直接走真实路径
空间占用几 KB几乎 0只存联接点元数据

Chrome 打开 C:\Users\...\Local\Google

  • 快捷方式:系统跳到 D:\Google_Data\Google
  • 目录联接对 Chrome 完全透明——Chrome 以为自己访问 C 盘——所有 mmap / 锁都正常工作

四、搬完之后删什么

4.1 浏览器缓存(重点)

1
C:\Users\<USER>\AppData\Local\Google\Chrome\User Data\Default\Cache

这是最大的占用——几 GB 起——定期手动清或者用 Chrome 自带清理

1
2
3
4
5
1. 打开 Chrome
2. 快捷键 Ctrl+Shift+Delete
3. 选 "缓存的图片和文件"
4. 时间范围 "时间不限"
5. 清除数据

4.2 Service Worker 缓存

1
chrome://serviceworker-internals/

不需要的 Service Worker 可以点 “Unregister”

4.3 扩展(Extensions)

1
chrome://extensions/

关闭 / 卸载不用的扩展——每个扩展都有自己的 cache

五、备选:仅搬缓存(不动数据)

如果你不想做符号链接觉得危险),只搬缓存--disk-cache-dir

1
2
3
4
1. 桌面 Chrome 快捷方式 → 右键 → 属性
2. "目标" 一栏的最末尾加一个空格,然后粘贴:
   --disk-cache-dir="D:\ChromeCache"
3. 确定

效果

  • Chrome 缓存写到 D 盘——省 C 盘几个 G
  • 历史记录 / 密码 / 扩展 / 书签 仍在 C 盘原位置
  • 不会破坏 Chrome 状态

不推荐——只搬缓存意味着密码 / 历史 / 扩展都在 C 盘——C 盘系统重装会丢

六、Edge / Firefox / Brave 类似操作

6.1 Edge

Edge 目录 C:\Users\<USER>\AppData\Local\Microsoft\Edge —— 结构与 Chrome 一样

1
mklink /j "C:\Users\<USER>\AppData\Local\Microsoft\Edge" "D:\Edge_Data\Edge"

6.2 Firefox

Firefox 用户目录 C:\Users\<USER>\AppData\Roaming\Mozilla\Firefox\Profiles\<xxx>.default-release—— 走 Roaming 不是 Local

1
mklink /j "C:\Users\<USER>\AppData\Roaming\Mozilla\Firefox\Profiles" "D:\Firefox_Data\Profiles"

6.3 Brave

Brave 目录 C:\Users\<USER>\AppData\Local\BraveSoftware\Brave-Browser—— 同理

七、自动化脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$linkPath = "C:\Users\$env:USERNAME\AppData\Local\Google"
$targetPath = "D:\Google_Data\Google"

# 检查 mklink 是否存在
if (-not (Test-Path $linkPath)) {
    # 检查实际目录是否在 D 盘
    if (Test-Path $targetPath) {
        Write-Host "实际数据在 D 盘,符号链接丢失。重新创建..." -ForegroundColor Yellow
        # 用 admin 权限重新创建
        Start-Process cmd -ArgumentList "/c mklink /j `"$linkPath`" `"$targetPath`"" -Verb RunAs
    } else {
        Write-Host "Chrome 数据目录不存在,请检查" -ForegroundColor Red
    }
} else {
    $item = Get-Item $linkPath
    if ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) {
        Write-Host "符号链接正常:$linkPath$targetPath" -ForegroundColor Green
    } else {
        Write-Host "Google 目录是真实目录,未创建符号链接" -ForegroundColor Red
    }
}

7.2 定期清理 Chrome 缓存

1
2
3
4
5
# 清理超过 30 天的缓存
$cachePath = "C:\Users\$env:USERNAME\AppData\Local\Google\Chrome\User Data\Default\Cache"
Get-ChildItem $cachePath -Recurse -File |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
    Remove-Item -Force -ErrorAction SilentlyContinue

八、常见 5 个坑

  1. Chrome 没关就 mklink——剪切的 Google 目录里有 Chrome 锁定的文件——关进程后再做
  2. 路径带中文出错——mklink 对中文路径 OK——但 PowerShell 里中文路径要加反引号转义
  3. target 路径有空格——D 盘 Program Files 之类——必须双引号包起来
  4. 重启后符号链接"消失"——可能是杀毒软件误判——把 mklink 加白名单
  5. OneDrive 占 C 盘——OneDrive 走 C:\Users\<USER>\OneDrive —— 搬家思路同 ChromeOneDrive 设置里选"管理备份"

九、其它 C 盘减肥方案

目录大小处理方案
C:\Windows\Temp几 GB定期 cleanmgr
C:\hiberfil.sys≈ 内存大小powercfg -h off
C:\pagefile.sys几 GB设置到 D 盘系统属性 → 高级
C:\Users\<USER>\AppData\Local\Temp几 GB定期清理%TEMP% 变量目录)
C:\Users\<USER>\AppData\Local\Google10-30 GBmklink 到 D 盘本文
C:\Users\<USER>\AppData\Local\pip\cache几 GBpip config set global.cache-dir D:\pip-cache
C:\Users\<USER>\.nuget\packages几 GBnuget config set globalPackagesFolder D:\nuget-cache
C:\Users\<USER>\.gradle\caches几 GBGRADLE_USER_HOME=D:\gradle-home
C:\Users\<USER>\.m2\repository几 GB~/.m2/settings.xml<localRepository>

十、总结

  • mklink /j 目录联接 = 最一劳永逸的方案——完全透明——Chrome 不知道自己在 D 盘
  • 步骤:关 Chrome → 剪切 Google 目录到 D 盘 → mklink 目录联接 → 重启 Chrome
  • 优势所有数据都在 D 盘——C 盘瞬间释放 10-30 GB——重装系统迁移方便
  • 备选只搬缓存--disk-cache-dir="D:\ChromeCache" —— 简单但只搬缓存
  • 同样思路适用于 Edge / Firefox / Brave / OneDrive / NuGet / Maven / Gradle
  • Win10+ PowerToysFile Locksmith 可以查谁锁住了文件——mklink 失败时排查用

参考资料

使用 Hugo 构建
主题 StackJimmy 设计