◆

Windows 系统初始化与常用软件安装清单

2023-07-04 07:100

这篇是我自己重装 Windows 之后照着走的一份流程记录,主要目的有两个:一是尽量把会持续膨胀的目录挪出系统盘,二是把开发环境要装的东西按顺序列清楚,免得装到一半发现少了个前置工具。

先说为什么要花精力搬目录。现在的机器大多是一块固态划出一个不大的 C 盘,剩下的空间给数据盘。问题是很多软件根本不给你选安装位置,或者它给你选了主程序位置,缓存却照旧写在 C:\Users\<用户名>\AppData 下面。浏览器的用户数据、JetBrains 系列 IDE 的索引、npm 和 pnpm 的包缓存,这几类是增长最快的,放着不管,几个月就能吃掉几十个 G。等到 C 盘报红再来处理,很多软件已经在跑,文件被占用,搬起来更麻烦。所以我的习惯是系统刚装完、软件还没装的时候就先把路子铺好。

搬迁用的手段是目录联接,也就是下面会反复出现的 mklink /J。它在原位置留下一个指向新位置的入口,软件按老路径去读写,实际落盘在数据盘上,软件自己完全感知不到。这比改软件配置通用,因为不依赖软件是否提供了自定义路径的选项。

前置操作

Temp 文件夹

系统和各种程序跑安装包、解压、编译中间产物都往临时目录里丢,这个目录的特点是写入频繁、体积波动大,而且不少程序退出时不清理残留。先把它挪走,后面装软件产生的临时文件就都不占系统盘了。

在此电脑-属性-高级系统配置-高级-环境变量

把用户变量和系统变量中的 TEMP 对应的 path,修改为非系统盘即可

顺带一提,同一个位置通常还有一个 TMP 变量,指向和 TEMP 一样的地方,两个一起改掉才彻底。改完需要重新登录或重启才对已经启动的进程生效。新目录记得先手动建出来,指向一个不存在的路径会让部分安装程序直接报错。

应该文件夹

为了避免 C 盘不够用,部分文件夹可以采取软连接的方式,同步到非系统盘

命令的形式是 mklink /J "链接位置" "真实位置",前一个参数是 C 盘上那个原本的路径,后一个是数据盘上真正存东西的地方。参数顺序反了会得到一个方向相反的联接,等于什么都没搬,这是最容易出的错。/J 建的是目录联接,和普通的快捷方式不是一回事,资源管理器和绝大多数程序都会把它当成真实目录来对待。

执行这些命令需要用管理员身份打开命令提示符,普通权限会报拒绝访问。另外 mklink 是 cmd 的内置命令,不是独立的可执行文件,在 PowerShell 里直接敲会找不到,得写成 cmd /c mklink ... 或者干脆开一个 cmd 窗口。

如下

mklink /J "C:\Users\mio\AppData\Local\Google" "D:\Users\mio\AppData\Local\Google"

下面这批是我实际会搬的目录,挑选的标准就是前面说的「持续膨胀」:浏览器用户数据、IDE 缓存和索引、包管理器缓存、以及一些会自己往 Local 里塞更新包的国产客户端。

需要同步的文件夹如下,要注意这些文件夹要提前建好

这里的「提前建好」指的是右边数据盘上的目标目录要先存在,而左边 C 盘上的那个路径必须还不存在或者是空的。如果对应软件已经装过、目录里已经有数据,正确的顺序是:先彻底退出该软件,把 C 盘目录整个剪切到数据盘,确认 C 盘那边已经没有这个目录了,再执行 mklink。目标位置已存在同名目录时 mklink 会直接报错退出,不会覆盖数据,这一点还算安全。

路径里的 mio 是我的用户名,照抄的时候要换成自己的。

mklink /J "C:\Users\mio\AppData\Local\Google" "D:\Users\mio\AppData\Local\Google"
mklink /J "C:\Users\mio\AppData\Local\JetBrains" "D:\Users\mio\AppData\Local\JetBrains"
mklink /J "C:\Users\mio\AppData\Local\Mozilla" "D:\Users\mio\AppData\Local\Mozilla"
mklink /J "C:\Users\mio\AppData\Local\npm-cache" "D:\Users\mio\AppData\Local\npm-cache"
mklink /J "C:\Users\mio\AppData\Local\pnpm-cache" "D:\Users\mio\AppData\Local\pnpm-cache"
mklink /J "C:\Users\mio\AppData\Local\Programs" "D:\Users\mio\AppData\Local\Programs"
mklink /J "C:\Users\mio\AppData\Local\qq-chat-updater" "D:\Users\mio\AppData\Local\qq-chat-updater"
mklink /J "C:\Users\mio\AppData\Local\Tencent" "D:\Users\mio\AppData\Local\Tencent"
mklink /J "C:\Users\mio\AppData\Local\Yarn" "D:\Users\mio\AppData\Local\Yarn"

其他文件夹

上面那批在 AppData 下面,装的是用户数据和缓存。这一批在 Program Files 下面,装的是程序本体。会需要搬它们,是因为像 Chrome 这类软件的安装器压根不提供选择安装目录的界面,装哪儿由它自己决定,只能提前把入口重定向掉。

这里要多留一份小心:程序本体所在的目录一旦被联接,后续软件自动更新、修复安装、卸载都会经过这个联接。绝大多数情况没问题,但如果之后遇到某个软件更新失败或卸载残留,这里是需要优先怀疑的地方。相比之下搬 AppData 里的缓存目录风险要低得多。所以这批我只对确实没法选路径、体积又大的软件做。

mklink /J "C:\Program Files\Google" "D:\Program Files\Google"
mklink /J "C:\Program Files (x86)\Google" "D:\Program Files (x86)\Google"
mklink /J "C:\Program Files (x86)\Tencent" "D:\Program Files (x86)\Tencent"
mklink /J "C:\Program Files (x86)\Common Files\Tencent" "D:\Program Files
(x86)\Common Files\Tencent"

初始化安装工具

这一组的排序是有讲究的,基本按依赖关系来:解压工具要最先装,因为后面很多下载下来的是压缩包;网络工具紧跟其后,不然 Chrome、JetBrains 这些站点可能连不上;浏览器装完才方便继续找剩下的东西。真正能开始写代码之前,最关键的是 git 和 JetBrains Toolbox 这两个。

autohotKey 那两条是配套的,第一条是程序本体,第二条是我自己在用的脚本,主要做一些按键重映射和窗口快捷操作。

nvm

Node 我不直接装官方安装包,一律走 nvm 管理。原因是手上的项目跨了好几个 Node 大版本,有的老项目在新版本上根本装不上依赖,能按项目切版本比重装省事太多。

注意 Windows 上用的是 coreybutler/nvm-windows,和 mac、Linux 上那个 nvm 是两个独立的项目,只是名字和命令长得像,用法上有出入,别拿 mac 的教程照抄。

装完先装一个长期支持版打底。nvm-windows 支持用 lts 这个别名代替具体版本号,省得去查当前 LTS 是几:

nvm install lts

装完还需要 nvm use 指定实际启用的版本,光 install 不会自动切过去,node -v 可能还是找不到命令。另外它切换版本的实现是改一个符号链接,所以执行 nvm use 的窗口需要管理员权限,普通窗口会失败。

前面搬目录时之所以把 npm-cache 和 pnpm-cache 也一起联接走,就是为这一步做准备,包缓存的增长速度在开发机上仅次于 IDE 索引。

后续安装

这一组是不急的,前面那批装完机器已经能干活了,这些可以等用到某个功能的时候再补。放在最后还有个实际原因:这批里的国产客户端不少会往 AppData\Local 里塞自动更新包和聊天记录缓存,等前面的目录联接都建好了再装,它们的数据就会自动落到数据盘上,省了一次搬迁。

Everything 值得单独提一句,它靠直接读 NTFS 的日志来建索引,所以搜文件名几乎是瞬时返回,比系统自带的搜索快一个量级,装完机器我一般第一批就把它加上。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEWindows 系统初始化与常用软件安装清单加载中