☰
Ollama模型存C盘爆满?三步迁移到D盘彻底解决
2026/10/20 22:22:59 网站建设 项目流程

ollama是目前把开源大模型跑在本地的工具里最顺手的一个,一条命令拉模型,一条命令对话,不用折腾Python环境、CUDA和transformers那套流水线。但我在实际使用和帮朋友排查时,遇到最多的不是“模型跑不动”,而是装完以后C盘直接飘红。问题根源很简单:ollama在Windows下默认把程序装进用户目录,把模型也塞进用户主目录,全都在C盘。模型文件动辄几个GB到几十GB,系统盘再大也扛不住折腾几次。这篇文章专门解决这个大模型本地安装的“最后一公里”:如何让ollama把模型和程序都放到非C盘。我会从原理、实操到排查一条线讲清楚,新手可以直接照做,已经装好想迁移的朋友也有对应的路子。

1. 先搞清楚ollama默认把东西装到哪

1.1 程序本身默认藏在用户目录

ollama的Windows安装包和常见软件不一样,安装过程几乎不给你选择路径的机会。装完之后你去Program Files里找,大概率找不到。它实际装的位置是:

C:\Users\<你的用户名>\AppData\Local\Programs\Ollama

这里存放的是ollama主程序、运行库和推理后端。这个设计并不是bug,更不是官方故意恶心人,而是为了让普通用户免管理员权限就能完成安装和运行。AppData目录对当前用户完全可写,不需要UAC弹窗,更新也方便。但副作用很明显:它默认占用了C盘空间。虽然程序本体不大,通常也就一两百MB,对现代硬盘来说不算什么,但在C盘已经捉襟见肘的机器上,每一百MB都值得计较。

1.2 真正的大户是模型目录

比程序目录更关键的是模型存放目录。ollama下载模型时,默认会把所有模型文件放到:

C:\Users\<你的用户名>\.ollama\models

这个目录才是吞盘的主力。一个7B参数量的模型,即使经过量化,通常也要4GB到6GB;14B级别奔着9GB以上去;70B或者更大的模型一口气吃下40GB到50GB都很正常。而且你不可能只用一个模型,今天试试这个,明天试试那个,多下几个版本,C盘几百GB也会被填满。

很多用户第一次接触ollama,满心欢喜跑完ollama pull,回头一看C盘可用空间掉了好几十GB,瞬间心态崩了。这就是因为模型默认下载路径没有做任何干预。

1.3 修改路径之前要先懂它的文件结构

ollama的模型目录并不是简单的一堆.gguf文件摊在那里。它的组织方式和容器镜像类似,分为blobs和manifests两部分。blobs目录里存放的是真正的权重数据,下载时候会把模型拆成多个分片文件,每个分片是固定大小的二进制块;manifests目录里放的是模型的标签、依赖关系、量化配置等元信息。

这个结构带来的影响是:你可以直接整个目录剪切、复制、移动,但绝对不能只搬一部分,也不能把blobs里的分片文件随便改名或者重新整理。漏掉任何一个分片,ollama加载模型时都会报错。后面讲迁移方案时,你会看到为什么“整个目录一起搬”是基本操作。

2. 安装前的准备:路径规划是成败关键

2.1 先估算模型存储需求

不要等下载到一半才想起来路径不对,装之前先盘一下自己打算跑多大的模型。以常见的量化版本为例,我整理了一个大致参考:

模型规模量化后体积参考
0.5B ~ 1B约0.5GB ~ 1.5GB
3B级别约2GB左右
7B ~ 8B级别约4GB ~ 6GB
14B级别约9GB ~ 12GB
70B级别约40GB ~ 55GB

所谓“量化”,就是把模型参数从更高精度压缩到较低精度,体积可以小好几倍,换来的是推理时占用的显存和内存更少,速度也更快。对这个阶段来说,你不需要深入理解量化原理,只需要知道同一个模型有不同体积的版本可选,先跑体积小的版本,稳定再换大的。

如果只是想体验一下ollama,预留20GB基本够用;打算把7B或14B模型当作日常主力,建议目标盘至少留出50GB到60GB;真想玩70B级别,那就不是加点空间的事,得从硬件整体考虑。空间宁多勿少,模型只会越下越多。

2.2 路径规划原则

目标目录建议用D:\ollama\models这种结构,干净、直白、一眼找到。不要图省事直接放到磁盘根目录,也不要搞出D:\我的模型\新文件夹\ollama\最终版这种多层混合路径。

原因有两个。一是ollama有一些命令和第三方前端对接时,路径带中文或空格,容易在脚本拼接参数时出问题,尤其是那些没有做好引号处理的老工具;二是单独建一个models子目录,后续想清理、备份、统计体积都方便,不会和程序目录、日志目录混在一起。

2.3 认识一下核心环境变量:OLLAMA_MODELS

非C盘安装的核心其实只有一个环境变量:OLLAMA_MODELS。这个变量的值就是ollama存放模型的根目录。只要在ollama服务启动之前把它设置好,模型下载、加载时就会直接用这个路径,不再碰C盘的默认位置。

对不熟悉Windows环境变量的朋友,简单解释一下:环境变量是系统提供给应用程序的一组全局参数,你可以把它理解成“写在配置文件里的默认值”。设置的位置在“系统属性 -> 环境变量”里,分为用户变量和系统变量。ollama通常以当前用户身份运行,所以设置在用户变量里就够了,不用碰系统变量,改起来更安全。

3. 非C盘安装的三种实操方案

3.1 方案一:先设置环境变量再安装,最稳的一条路

这是我最推荐的整体流程,特别适合还没安装、准备重装或者刚装好还没开始下载大模型的用户。思路很简单:在运行安装包之前,先把OLLAMA_MODELS指到D盘,然后正常安装,ollama第一次启动时就直接把模型仓库建在D盘。

具体操作如下:

  1. 按Win + R,输入sysdm.cpl回车,打开系统属性。
  2. 切到“高级”标签页,点下方“环境变量”。
  3. 在“用户变量”区域点“新建”,变量名填OLLAMA_MODELS,变量值填你准备的目标目录,比如D:\ollama\models。保存退出。
  4. 去ollama官网下载Windows安装包并运行,正常完成安装。
  5. 打开一个新的CMD窗口,执行echo %OLLAMA_MODELS%,能看到D:\ollama\models就说明环境变量生效了。

为什么强调“先设变量再安装”?因为ollama服务在启动时会读取环境变量,如果安装完成后才修改,服务进程可能已经把默认路径缓存住了,你改了半天,它依然往C盘写模型。先设变量是从源头规避这个问题。如果你已经装好,其实不需要重装,设置完变量后彻底退出ollama再启动,同样能生效。

这个方案的优点是操作最少、最不容易出错,不用处理复杂的文件迁移。缺点是程序本体依然在C盘AppData目录,不过前面说过,那通常只是一两百MB,大多数情况下不值得为此折腾。

3.2 方案二:装完迁移加目录联接,适合已有模型的用户

如果你安装包已经跑过了,模型也下了一堆,C盘已经被占用了不少空间,再从头设置环境变量重新下载显然不划算。这时候用“迁移目录 + 目录联接(junction)”的方式,把已有的文件整体搬到D盘,再让系统默认路径“指向”新位置。

先说模型目录怎么迁。这是最核心的部分:

  1. 让ollama彻底退出。右下角托盘区找到ollama图标,右键退出。再打开任务管理器,搜索ollama相关进程,全部结束。这一步偷懒不得,文件被进程占用时迁移会半途而废。
  2. 把C:\Users\<你的用户名>\.ollama整个目录剪切到D:\ollama目录下,最终得到D:\ollama\.ollama。
  3. 以管理员身份打开CMD,执行目录联接命令:
mklink /J "C:\Users\<你的用户名>\.ollama" "D:\ollama\.ollama"

执行成功后,原来的C:\Users\<你的用户名>\.ollama位置会变成一个带快捷方式标志的目录,打开它能看到D盘里的模型内容,但对系统来说它就是真实目录。以后ollama往这个路径写东西,实际都会落到D盘,C盘空间不会再被模型蚕食。

  1. 重新启动ollama,执行ollama list,如果之前的模型还在列表里,说明迁移成功。再随便拉一个小模型确认新增文件也写入D盘。

如果你想把程序本体也搬走,思路完全一样:把C:\Users\<你的用户名>\AppData\Local\Programs\Ollama剪切到D:\OllamaProg,然后执行:

mklink /J "C:\Users\<你的用户名>\AppData\Local\Programs\Ollama" "D:\OllamaProg"

目录联接这个机制,相当于给旧路径装了一个“透明跳板”。它和快捷方式的本质区别是:快捷方式只是给人看的,软件内部的路径解析不一定认;而junction对系统和绝大多数软件来说就是真实路径,读写请求会自动转向目标目录。这招不仅对ollama有效,很多不支持自定义路径的软件都可以这么处理。

这个方案的优点是连程序带模型全部解放C盘,而且不用重新下载模型。缺点是操作步骤多,而且剪切大目录耗时较长,跨盘移动几GB文件需要耐心等。迁移过程中最怕的是中途断电、杀毒软件拦截、或者ollama没退干净导致文件被占用,任何一步出问题都可能留下一个半残的目录结构。

3.3 方案三:命令行静默安装,当作备选

有些朋友喜欢一条命令解决问题。ollama的安装包基于NSIS封装,理论上支持静默安装并指定目录。以管理员身份打开CMD,执行:

OllamaSetup.exe /S /D=D:\Ollama

其中/S表示静默安装,/D=D:\Ollama指定安装目录。需要注意,/D参数必须是命令的最后一项,而且路径不要加引号。这个方案有时候有效,有时候装完依然落在AppData,不同版本表现不一样。如果你执行完发现没效果,别反复硬试,退回方案一或方案二即可。

如果你习惯用Windows自带的包管理器,也可以试一下:

winget install --id Ollama.Ollama --location D:\Ollama

--location参数在部分软件身上有效,在ollama这里同样时灵时不灵。把它当作一个快速尝试,不要当作唯一依赖。

还要提醒一句:命令行直装只解决了程序本体的安装目录,并没有解决模型目录。模型放哪,依然由OLLAMA_MODELS环境变量决定。也就是说,无论用哪个方案安装,都得把环境变量这一步补上。

4. 安装完成后的验证与日常配置

4.1 用小模型验证模型是否真的下到D盘

安装完成先别急着拉几十GB的大模型,代价太大。先拿一个小模型做链路验证,比如:

ollama pull qwen2.5:0.5b

这个模型只有几百MB,下载快,占用小。等它执行完,去D盘的models目录看一眼,如果出现了blobs和manifests两个子目录,且目录里文件正在增长,说明OLLAMA_MODELS已经生效。再执行:

ollama list

列表里能看到这个模型,也再次确认了模型仓库位置。

还有一种更直接的验证方式:下载过程中打开任务管理器,观察C盘可用空间的变化。如果C盘空间几乎没有变动,而D盘空间在减少,那就板上钉钉说明路径设置成功了。

4.2 常用命令和API调用方式

验证完成后,你可以开始正常使用。ollama的常用命令不多,记住这几个就够:

  • ollama pull <模型名>:下载模型。
  • ollama run <模型名>:直接进入交互对话。
  • ollama list:查看本地已有模型。
  • ollama ps:查看当前加载到内存中的模型。
  • ollama stop <模型名>:释放占用内存的模型。
  • ollama rm <模型名>:删除本地模型。

除了命令行,ollama还默认暴露了一个本地API接口,地址是http://localhost:11434。你可以用一行curl调用模型:

curl http://localhost:11434/api/generate -d "{\"model\":\"qwen2.5:0.5b\",\"prompt\":\"你好\"}"

它也兼容OpenAI的接口风格,很多第三方前端可以直接填http://localhost:11434/v1作为API地址来接入。

4.3 建议一起设置的其他环境变量

只改一个OLLAMA_MODELS还不够,下面几个环境变量对日常使用影响也很大。

OLLAMA_HOST是服务监听地址。默认只监听本机127.0.0.1:11434,如果你想让同一局域网里的其他设备也能访问这台机器的模型服务,可以改成0.0.0.0:11434。但注意不要轻易暴露到公网,毕竟模型服务没有做完善的访问控制。

OLLAMA_KEEP_ALIVE控制模型驻留内存的时间。默认在不使用一段时间后会自动释放内存,这个时间可以设成24h甚至更长。如果你经常反复切换模型,每次切换都要重新加载几十秒甚至好几分钟,设置了常驻内存后响应速度快很多,代价是内存占用一直居高不下。

OLLAMA_MAX_LOADED_MODELS控制同时最多加载几个模型,如果机器内存很大,可以调高,方便多个模型随时待命。

OLLAMA_TMPDIR控制临时文件目录,这个对C盘特别小的人很有用。ollama在加载模型、处理分片时会产生临时文件,默认可能落在C盘临时目录。如果C盘只剩几百MB,即使模型全部在D盘,运行大模型时也可能被临时文件撑爆。设置一个D盘目录作为临时文件路径,可以规避这个问题。

5. 常见问题与排查实录

5.1 环境变量明明设置了,模型还是进C盘

我见过最多的情况就是:用户信誓旦旦说改了环境变量,结果模型还是跑进C盘。排查顺序如下。

第一步,打开CMD,执行echo %OLLAMA_MODELS%,看看输出的是不是你的目标路径。如果输出空值或者旧路径,说明环境变量没设置成功,或者你打开的这个CMD窗口是在设置环境变量之前启动的。Windows的CMD窗口不会自动刷新环境变量,必须新开一个窗口再看。

第二步,确认ollama已经完全退出。包括托盘图标、后台进程,都要结束。很多情况下环境变量本身改对了,但ollama服务还缓存着旧路径,重启之后才生效。

第三步,检查是不是同时设置了用户变量和系统变量,如果两边不一致,容易让程序读取到冲突值。统一只保留一处,省心。

5.2 迁移后ollama list看不到之前的模型

用了方案二迁移目录之后,模型列表空了,大概率是路径对不上。检查三件事:

一是OLLAMA_MODELS指向的路径和实际存放模型的路径是否一致。如果环境变量还指向C盘旧位置,而模型实际在D盘,ollama当然找不到。这里有一个关键点:模型必须放在变量指定的根目录下,并且保持blobs和manifests两层结构。比如变量指向D:\models,那么D:\models\blobs和D:\models\manifests必须存在。有些用户把整个.ollama文件夹塞进去了,造成路径多了一层,也会找不到。

二是检查目录联接是否有效。在CMD里进入原来的默认路径,看是否能跳到D盘真实目录。如果junction失效,用mklink /J重新建一次。

三是检查模型文件是否完整。万一迁移过程中被杀毒软件拦了文件,或者剪切中途失败,漏掉了某些分片,模型列表不会正常显示。这种情况只能从备份恢复,或者重新下载。

5.3 下载中断、进度卡住、报磁盘空间不足

下载大模型经常遇到进度卡住不动的情况,特别是网络环境不理想的时候。我的做法是:正式拉大模型之前,先拉一个小模型测试链路;下载过程尽量选网络相对稳定的时段;遇到中途失败,不要反复重试同一个损坏的分片,先查看磁盘剩余空间和临时目录的占用。

如果提示磁盘空间不足,但你的D盘明明还很充裕,多半是C盘临时目录被写满了。这就是前面说的OLLAMA_TMPDIR的场景。设置一个非C盘的临时目录,问题通常立刻缓解。

还有一种可能:下载过程中ollama会先写临时分片,再合并到blobs目录。如果临时分片和最终目录不在同一个分区,合并时可能需要额外空间。保持目标盘有足够余量,能少很多莫名其妙的问题。

5.4 升级或重装后模型路径又变了

如果你是靠环境变量控制路径的,正常升级ollama一般不会丢配置,重装也会保留已有的环境变量,模型文件不需要重新下载。

但用了目录联接方案的话要留个心眼。某些版本升级时可能会重新创建默认目录,导致原来的junction失效,模型文件还在D盘,ollama却“看不见”。解决办法很简单:升级后检查一下旧默认路径,如果不是指向D盘的联接状态,重新执行一次mklink /J即可。如果升级过程直接把旧目录清掉了,那就没法子了,只能从备份恢复。所以重要模型多备份,升级前至少确认一下模型目录内容完整。

6. 写在最后:一次配置,长期受益

我自己的习惯是,重装系统之后第一件事就是把OLLAMA_MODELS和OLLAMA_TMPDIR都指到非系统盘,然后才装ollama。这样以后不管拉多少模型,C盘都干干净净。另外还有个小技巧:如果你手头已经有一台机器下载好了模型,想转移到另一台电脑,不要重新拉一遍,直接把整个models目录拷贝过去就行,省流量也省时间。ollama这个工具的价值在于把复杂的大模型部署简化到了“镜像拉取”的程度,但路径配置这种基础操作,没人替你决定。把这篇文章里提到的环境变量和迁移方法记牢,后面再折腾Docker部署、前端UI、多模型切换都会从容很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询