说出来你们可能不信,我上周往系统盘塞了个Ollama,睡一觉起来C盘就少了17个G。倒不是Ollama安装包本身有多肥,Windows上的Ollama安装包也就几百MB,真正吃空间的是装完之后从官方registry拉下来的那堆模型文件。一个7B量化模型随随便便4到5个G,多试几个模型,C盘那点余量根本扛不住。
今天这篇算是「程序员的路上」系列里的环境折腾篇,把"Windows下修改Ollama下载安装位置"这件事从头到尾讲透——程序本体装在哪个盘、模型数据存在哪个盘、环境变量怎么配、已有模型怎么迁移不重新下载、以及拉模型太慢时除了干等还能怎么办。适合刚接触Ollama本地部署的新手,也适合已经踩过C盘爆红坑、想一次性把路径理顺的老手。
1. 先搞清楚C盘空间都去哪了:应用本体和模型目录是两条线
1.1 默认状态下Ollama在Windows上的两套路径
很多人的误区是把Ollama当成一个普通的绿色软件,以为"装完就在那了"。实际上Ollama在Windows上默认会落两套完全独立的东西:
| 内容 | 默认路径 | 体积量级 |
|---|---|---|
| 程序本体 | C:\Users<你的用户名>\AppData\Local\Programs\Ollama | 几百MB |
| 用户配置 | C:\Users<你的用户名>.ollama | 很小 |
| 模型数据 | C:\Users<你的用户名>.ollama\models\blobs | 几个G到几十个G |
程序本体没有装在传统意义的 C:\Program Files 下面,而是装在当前用户的Local目录里,这是NSIS安装器的默认行为,也是很多人翻遍Program Files找不到它的原因。模型文件也不是直接以 模型名.gguf 这种好认的名字躺在那里的,而是散在 models\blobs 下,文件名是一长串sha256哈希,没有扩展名,一个文件对应一个层。models\manifests 则记录了每个模型由哪些层组成。
这两套路径中,程序本体只占几百MB,模型目录才是真正的"磁盘杀手"。我见过有人把十几个模型全拉下来,C盘直接红了,最后只能一个个删,删的时候还分不清哪个文件对应哪个模型,那才叫真的头大。
1.2 为什么"把文件夹拖到D盘"这条路走不通
顺手把 C:\Users\xxx\.ollama 剪切到D盘,再打开Ollama——大概率你会看到模型列表是空的,或者程序直接起不来。原因有两层:
第一,Ollama在启动时通过解析默认路径来找模型目录,它读取的是用户主目录下的 .ollama,如果你只是移动了文件夹而没有告诉它"新家在哪",它自然只能看到一个空目录。第二,程序本体那边还有注册表卸载信息、启动菜单快捷方式里的绝对路径,直接把 AppData\Local\Programs\Ollama 挪走,快捷方式和自启动项就全指向一个不存在的路径。
所以正确做法不是"搬完文件夹再说",而是从源头告诉Ollama两个信息:程序装到哪、模型存到哪。前者靠安装器参数,后者靠环境变量,两条线分别处理,下面逐个说。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装时指定目录:给Ollama安装器传一条参数
2.1 NSIS安装器的 /D= 参数怎么用
Ollama的Windows安装包是基于NSIS打包的。NSIS这套打包工具很多老程序员都熟,它有一个冷门但好用的参数:/D=安装路径,用来在安装时直接覆盖默认安装目录。
用法非常简单,打开cmd,切到安装包所在目录,执行:
code复制OllamaSetup.exe /D=D:\Ollama
三个注意点:
/D=后面的路径要写绝对路径,盘符、目录名都要给全。- 这个参数必须放在命令行最后面,后面不要再跟其他参数。
- 如果路径里有空格,不要加引号,NSIS会把
/D=之后的所有内容都当成路径。所以要么路径里别留空格,要么就用D:\Ollama这种无空格目录,省得给自己找麻烦。
2.2 完整安装步骤与验证
我用一次实际操作演示一遍。假设安装包下载到了 D:\downloads\OllamaSetup.exe:
- Win+R输入cmd回车,打开命令行。
- 执行
D:\downloads\OllamaSetup.exe /D=D:\Ollama。 - 安装界面弹出来后,会直接显示安装目录为
D:\Ollama,一直点下一步直到装完。 - 打开
D:\Ollama目录,确认里面有ollama.exe、ollama app.exe等程序文件,说明程序本体已经成功装到D盘。
装完后按Win键,在开始菜单找到Ollama图标,右键查看"打开文件位置",再右键快捷方式看"目标",里面指向的路径也应该是 D:\Ollama\ollama app.exe。这一步验证很关键,很多人在安装界面没仔细看,事后才发现还是装到C盘去了,回头还得重新折腾。
2.3 已经装在C盘了怎么办
如果你之前已经用默认方式装好了,现在C盘被占得难受,有两个选择:
- 重装并指定路径:先去设置->应用里卸载Ollama,然后重新跑一遍上面的
/D=安装命令。放心,卸载程序不会动你用户目录下的.ollama文件夹,模型一个都不会少,只是程序本体挪了个位置。 - 只迁移模型目录,程序留在C盘:因为程序本体也就几百MB,真正的大头在模型,那我建议直接看第3节,用环境变量把模型目录挪走就行,程序本身不折腾。
我自己在实际操作中更倾向于第二种。程序本体那点体积对C盘来说根本不敏感,而模型目录才是几十个G的量级。为了几百MB去重装一遍程序,性价比不高。当然,如果你是强迫症,希望所有和Ollama相关的东西都在D盘,那就老老实实走重装路线。
3. 模型数据迁移:OLLAMA_MODELS是最关键的变量
3.1 环境变量如何控制模型存储位置
Ollama在Windows上启动时会检查一个叫 OLLAMA_MODELS 的环境变量。如果这个变量存在,模型根目录就指向它;如果不存在,就回退到 C:\Users\<用户名>\.ollama\models。这个设计非常像Linux下的 XDG_DATA_HOME 约定,用环境变量覆盖默认路径,是官方支持的标准做法。
所以我们要做的就两步:创建目标目录 + 设置环境变量。目标目录建议放在D盘下专门建一个目录,比如 D:\ollama\models,不要图省事直接指到D盘根目录,否则以后Ollama会在盘根目录下一层一层建 blobs、manifests,看起来非常乱,而且某些情况下会引发权限问题。
3.2 迁移已有模型的完整操作
假设你C盘已经有一堆模型了,现在要整体搬到D盘,按下面这个顺序操作,全程不需要重新下载:
- 完全退出Ollama。光点托盘里的退出不算完,打开任务管理器,确认
ollama.exe和ollama app.exe这两个进程都不在了,再进行下一步。进程还活着的话,文件会被占用,剪切会失败或者搬到一半出奇怪错误。 - 在D盘建好模型目录:
mkdir D:\ollama\models。 - 把
C:\Users\<你的用户名>\.ollama\models里的所有内容(包括blobs和manifests)整体剪切到D:\ollama\models下。跨盘剪切如果提示"正在计算剩余时间",耐心等,几十个G的模型文件即使跨盘也要几分钟,别中途取消。 - 打开环境变量设置:系统属性->高级->环境变量,在用户变量里新建一个,变量名
OLLAMA_MODELS,变量值D:\ollama\models。 - 也可以直接用命令行一步到位:
code复制setx OLLAMA_MODELS "D:\ollama\models"
- 重新打开Ollama,或者在新开的cmd里执行
ollama list。
这里顺便说一个容易忽略的点:.ollama 目录里除了 models,还有 history、id_ed25519 这些配置和密钥文件,它们的体积很小,不需要跟着走,留在C盘没有任何影响。迁移模型目录只需要搬 models 这一个子目录就够了,不要把整个 .ollama 都搬走,那样反而容易把配置文件的路径搞乱。
3.3 改完怎么验证确实生效
光看 ollama list 能列出模型还不够,那只能证明迁移没有损坏数据,不能证明以后的下载会写到D盘。要验证新路径真正生效,拉一个新模型看看文件落在哪里:
- 执行
ollama pull qwen2.5:0.5b(或任何你缺的小模型)。 - 去
D:\ollama\models\blobs目录下看文件修改时间,如果刚才出现了新的哈希文件,就说明新下载的模型已经写到了D盘。 - 再看看
C:\Users\<你的用户名>\.ollama\models\blobs的修改时间,如果没变,说明旧路径已经没有新数据写入了。
这套验证方法我在每次配完环境变量后都会跑一遍,基本一两分钟就能确认结果,比只看 ollama list 可靠得多。要知道,环境变量这东西最坑的地方就是"看着生效了,实际上没生效",不实测永远不知道真相。
4. 拉模型太慢的解决思路:本地导入比等官方源更靠谱
4.1 卡在 pulling 时不一定是网的问题
改完路径之后,紧接着就会碰到另一个高频问题:模型拉不下来,或者速度让人崩溃。打开 ollama pull 之后,要么长时间卡在 pulling manifest,要么blob下载速度只有几十KB/s,然后无限超时重试。
这背后的原因其实很直接:Ollama默认是从官方registry拉取模型,而这个registry的节点一般不在本地,直连速度和稳定性都看运气。这不是你电脑配置的问题,也不是Ollama本身出了问题,是网络链路决定了这个体验。所以别反复重试同一个命令,等再久也不会有质的提升,不如换个思路。
4.2 从魔搭下载GGUF并用ollama create导入
我最推荐的方案,是把"下载模型文件"和"纳入Ollama管理"这两件事拆开:先用浏览器或下载工具把模型文件下下来,再让Ollama本地导入。这样下载过程可以用上多线程下载工具,速度基本能吃满带宽,而且断点续传也好做。
具体流程以魔搭社区为例:
- 在魔搭上找到目标模型的GGUF版本,比如
Qwen/Qwen2.5-7B-Instruct-GGUF,挑一个量化格式下载,一般q4_k_m是体积和效果比较平衡的选择。 - GGUF文件可能被拆分成了多个分卷(比如
-00001-of-00004.gguf),把它们都下载到同一个本地目录,比如D:\ollama\gguf-src\。 - 在
D:\ollama\gguf-src下新建一个文本文件,命名为Modelfile(注意没有扩展名),内容写:
code复制FROM D:\ollama\gguf-src\qwen2.5-7b-instruct-q4_k_m-00001-of-00004.gguf
如果模型是单文件GGUF,FROM 后面直接写那个文件的完整路径即可。
4. 打开cmd执行:
code复制ollama create qwen2.5-7b -f D:\ollama\gguf-src\Modelfile
- 看到
success之后,执行ollama list,就能看到这个模型已经在列表里了,用法和从官方源拉下来的一模一样。
这套流程本质上是绕过官方registry的传输环节,模型文件本身并没有区别,所以效果上完全等价。我手里几个常用的大模型,现在基本都是这么进Ollama的,比 ollama pull 稳定太多。遇到分卷文件时,FROM 只需要写第一个分卷的路径,ollama create会自己把剩下的分卷拼起来。
4.3 关于"国内镜像源"的提醒和另一个可用渠道
网上很多帖子在讲"Ollama国内镜像源",但老实说,Ollama官方到现在也没有提供一个像docker registry mirror那样通用、稳定的镜像环境变量设置。个别教程里提到的某些registry镜像变量,在官方版本里并不存在,照着配了也不会生效,纯属浪费时间,看到直接关掉就行。
真正能用且稳定的,是上面讲的"本地下载+导入"路线。除了魔搭,如果你常用Hugging Face,也可以借助社区镜像站下载GGUF文件,再走同样的 ollama create 流程,操作步骤完全一样,只是模型文件的来源不同。
另外给刚入门的朋友一个建议:不要一上来就拉7B、14B的大模型。先用 qwen2.5:0.5b 或者 llama3.2:1b 这种小模型把整个流程跑通,验证路径、环境变量、调用方式都没问题,再上大模型。否则一旦配置有误,大模型下载到一半发现路径不对,那才叫真正的折磨。
5. 迁移后踩过的坑:变量不生效、路径权限和目录联接
5.1 环境变量"失效"的几种真实原因
我在给几台机器配 OLLAMA_MODELS 的过程中,最常见的求助就是"我明明设置了环境变量,为什么下载还是去了C盘"。排查下来,百分之八十是下面几个原因:
- Ollama进程没重启:
setx写进去的环境变量,只对之后新启动的进程生效。如果托盘里的Ollama一直挂着,旧进程还拿着旧路径,下载自然还是去C盘。处理方法:任务管理器里把ollama.exe、ollama app.exe全部结束,再重新启动。 - 变量名写错:
OLLAMA_MODELS是下划线,不是中划线,也不是OLLAMA_MODEL(少个S)。这种低级错误最隐蔽,看起来都对,实际上就是不对。 - 当前cmd窗口是旧的:
setx之后,当前已经打开的命令行窗口不会刷新环境变量。要么关掉重开一个cmd,要么重新打开Ollama,否则你在这个旧窗口里测试,永远都是旧结果。
排查顺序我建议固定为:先确认变量名,再看进程是否重启,最后在新开的cmd里验证。按这个顺序来,基本五分钟内能定位。别一上来就怀疑系统坏了,环境变量的问题九成都是这类"小事"。
5.2 路径权限与目录规划
另一个容易踩的坑是权限。如果把 OLLAMA_MODELS 指向了一个受系统保护或者没有写权限的目录,Ollama拉模型时会报错,或者在 blobs 目录里创建了空文件然后卡住。典型情况是把路径指到了 D:\ 根目录,或者指到了 C:\Program Files 下面一个普通用户没权限写的子目录。
所以目标目录一定要是普通用户有完全控制权的位置,比如 D:\ollama\models。另外提醒一句,如果你用了OneDrive之类的云同步,并且把用户主目录整个同步到云端,千万别把模型目录放在同步目录里。几百个G的模型文件要是被同步工具当成普通文档去上传,你的网络和云盘配额都会在短时间内被直接打爆。我在实际项目中见过不止一次这种事故。
5.3 不想改环境变量?用目录联接给C盘做一次"乾坤大挪移"
如果你不想动环境变量,或者软件本身写死了路径、不支持环境变量覆盖,Windows下还有一个通用解法:目录联接(junction)。原理是在原来的路径上放一个"指针",指向D盘的真实目录,程序访问原路径时,系统自动把请求转发到D盘,对程序完全透明。
以Ollama为例,把整个 .ollama 目录重定向到D盘:
- 完全退出Ollama,确认进程全部结束。
- 把
C:\Users\<你的用户名>\.ollama整个目录剪切到D:\ollama\.ollama。 - 以管理员身份打开cmd,执行:
code复制mklink /J "C:\Users\<你的用户名>\.ollama" "D:\ollama\.ollama"
- 打开Ollama,模型列表应该和之前一模一样。
注意 mklink /J 创建的是目录联接,不是快捷方式。目录联接对系统和程序来说就是一个"真实存在"的目录,Ollama不用做任何配置,所有读写都会落到D盘。这个方法特别适合那些没有提供路径配置项的软件,也是我把一些老软件从C盘搬走的通用手艺。mklink /J 创建联接时一般不需要管理员权限,但以管理员身份运行cmd可以避免某些目录权限上的意外。
但有一点必须提醒:mklink /J 和 OLLAMA_MODELS 环境变量不要同时用。如果你既把 .ollama 联接到D盘,又把 OLLAMA_MODELS 指到另一个目录,两个机制同时生效,路径会变得极其混乱,到时候排错都不知道从哪查起。二选一,选完就固定下来。
5.4 重装系统后模型还在不在
最后说一个长期收益的点。只要模型目录在D盘,重装系统、换电脑都不会弄丢模型。重装系统后,只需要重新安装Ollama程序,再把 OLLAMA_MODELS 指回原来的 D:\ollama\models,执行 ollama list,之前的模型就全都回来了。这个过程甚至不需要重新下载任何一个文件,因为 manifests 里的记录还在,模型数据也原封不动。
我在公司电脑和个人笔记本之间同步开发环境时,就是靠这个特性保持模型一致的:D盘模型目录不动,换机器只装程序、配变量,十分钟恢复一个可用的大模型环境。
最后分享一个我自己的习惯。新机器装Ollama,我的固定顺序是:先规划好"程序放哪个盘、模型放哪个盘",再动手装。装的时候用 /D= 把程序放到D盘,装完第一件事就是 setx OLLAMA_MODELS 把模型目录指到D盘,然后下载模型优先走"本地GGUF+ollama create"的流程,而不是让Ollama直连官方源硬拉。这个顺序一旦固定下来,后面几乎不会出幺蛾子。路径这东西,最怕的不是配置麻烦,而是装完不管,等磁盘满了才想起来收拾。
