快速修复
# 假设新目录是 /data/ollama-models(先建好)
# 1) 停服务
sudo systemctl stop ollama # systemd 安装
# snap 安装: sudo systemctl stop snap.ollama.service
# 2) 搬目录(首次是复制,确认没问题再删旧的;mv 更快但要承担风险)
sudo mv ~/.ollama/models /data/ollama-models
# snap 安装: sudo mv /var/snap/ollama/common/models /data/ollama-models
# 3) 告诉 ollama 新目录
# systemd 安装: 编辑 /etc/systemd/system/ollama.service 的 [Service] 加一行
# Environment="OLLAMA_MODELS=/data/ollama-models"
sudo systemctl daemon-reload
# Linux 标准安装器(deb/rpm,服务以 ollama 用户运行):新目录必须先给 ollama 用户读写权限
sudo chown -R ollama:ollama /data/ollama-models
# 4) 起服务 + 验证
sudo systemctl start ollama
ollama list # 模型应该原样还在
- Snap 安装:改法不同(不是编辑 service 文件),见下面"一步步来"第 3 步:
sudo snap set ollama models=/data/ollama-models。 - Docker 安装:启动参数里加
-e OLLAMA_MODELS=/models -v /data/ollama-models:/models(把宿主机新目录挂进容器)。 - Windows 直装:系统环境变量里新增用户变量
OLLAMA_MODELS=D:\ollama-models,重启 ollama(托盘退出重开)。
你会遇到什么
Ollama 装好之后一直用默认目录存模型:Linux 是 ~/.ollama/models,Windows 是 C:\Users\你\.ollama\models,Snap 安装是 /var/snap/ollama/common/models。模型一个比一个大(7B 模型动辄 4~5GB),系统盘很快被塞满。
你想把模型放到 D 盘/别的挂载盘,但不知道改哪里——网上说法杂:有人说改 OLLAMA_MODELS,有人说把整个 .ollama 目录搬走,还有人说必须重装。
其实机制很简单:ollama 读哪个目录完全由 OLLAMA_MODELS 环境变量决定,换目录 = 搬目录 + 改环境变量,不用重装、不用重新下载。
本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
- ollama 每次启动时用
OLLAMA_MODELS决定模型存放目录;没设这个变量时,才用平台默认目录(Linux/macOS~/.ollama/models、Windows%USERPROFILE%\.ollama\models、snap/var/snap/ollama/common/models)。 - 模型文件 =
manifests/(索引)+blobs/(真正的权重文件),两者都在 models 目录里,整个目录搬走即可,不依赖绝对路径。 - 常见误区:直接把模型目录
mv走而不改环境变量 → ollama 又按默认目录建了个空目录,表现为"模型全没了";其实模型还在原地,改回环境变量或把目录放回去就恢复。 - 注意区分:
OLLAMA_MODELS是模型目录;OLLAMA_HOST是服务地址。Open WebUI 连不上时改的是后者(见 open-webui-ollama-connect),别混。
模型目录解析是「环境变量优先,默认值兜底」:ollama 每次启动时读 OLLAMA_MODELS 决定 models 目录,没设才用平台默认(Linux ~/.ollama/models、Windows %USERPROFILE%\.ollama\models、snap /var/snap/ollama/common/models)。
models 目录内部是 manifests/(模型索引,记录层与 digest)+ blobs/(权重文件本体),目录整体搬走即可——两个子目录之间没有绝对路径依赖。
陷阱来自「解析时点」:直接把目录 mv 走但没改环境变量,下次启动又按默认目录建了空目录,看起来「模型全没了」,其实模型还在原地。
确定性推论:迁移三步=设 OLLAMA_MODELS 指向新目录 → 搬 manifests+blobs → 重启服务(变量只在启动时读);OLLAMA_MODELS 与 OLLAMA_HOST 是两个不同变量(模型目录 vs 服务地址),改错对象等于没改。
一步步来
1. 先看当前模型目录在哪、多大 — 必做
ollama list # 有哪些模型
# Linux 默认 ~/.ollama/models;snap 是 /var/snap/ollama/common/models
du -sh ~/.ollama/models # 看占了多少
2. 停服务(别在跑的时候搬) — 必做
sudo systemctl stop ollama # curl 脚本安装
sudo systemctl stop snap.ollama.service # snap 安装
pgrep -af ollama 应没有 serve 进程了(剩 launcher 也不影响)。
3. 按安装方式设置新目录 — 必做
systemd(官方脚本安装):编辑 /etc/systemd/system/ollama.service,在 [Service] 段加:
Environment="OLLAMA_MODELS=/data/ollama-models"
然后 sudo systemctl daemon-reload。
Linux 标准安装器(deb/rpm)与 curl 脚本不一样:标准安装器默认目录是 /usr/share/ollama/.ollama/models,服务以 ollama 用户运行——新目录必须 sudo chown -R ollama:ollama <新目录>,否则 ollama 没有写权限、模型会"消失"(官方维护者在 GitHub issue #9677 中确认);
curl 脚本安装才是当前用户的 ~/.ollama/models。
snap 安装(本机实测过配置机制):snap 的启动脚本读 snapctl get models,所以:
sudo snap set ollama models=/data/ollama-models
sudo systemctl restart snap.ollama.service
Docker 安装:容器加挂载 + 环境变量:
docker run -d -v /data/ollama-models:/models \
-e OLLAMA_MODELS=/models \
-p 11434:11434 ollama/ollama
Windows 直装:设置 → 系统 → 关于 → 高级系统设置 → 环境变量,新建用户变量 OLLAMA_MODELS=D:\ollama-models,然后退出托盘 ollama 重新打开。
4. 搬目录 — 必做
# 保险做法:先复制验证,确认无误再删旧的(模型大,复制慢但可回退)
sudo cp -a ~/.ollama/models /data/ollama-models
# 或确认无误后直接 mv
sudo mv ~/.ollama/models /data/ollama-models
5. 起服务 + 验证 — 必做
sudo systemctl start ollama
ollama list # 模型必须原样还在(名字/大小一致)
ollama run <之前有的模型> "hi" # 能跑才算数
6. 确认新下载也落新目录 — 必做
ollama pull <一个小模型> # 比如 all-minilm:l6-v2(45MB)
ls /data/ollama-models/blobs # 新文件出现在这里
怎么确认修好了
ollama list和迁移前完全一致(同样的模型名、大小)。- 随便
ollama run一个旧模型能正常出字——不是只读到了 manifests,权重也能加载。 - 新
ollama pull后,新目录blobs/里出现新文件;旧目录blobs/数量不再增长。 - 验证旧目录不再被读:把旧目录临时改名后
ollama list依然正常(改错环境变量时,这里会变成"模型全没了")。
其它环境的表现
- Linux curl 脚本安装:默认
~/.ollama/models,systemd 单元/etc/systemd/system/ollama.service加Environment。 - Snap 安装:默认
/var/snap/ollama/common/models,配置走snap set ollama models=...(启动脚本snap_launcher.sh里OLLAMA_MODELS=$(snapctl get models)),不是编辑 service 文件。 - Docker:
-e OLLAMA_MODELS=/models+ 卷挂载;卷名随意,关键是要把宿主机目录挂到环境变量指向的容器路径。 - macOS 直装:
launchctl setenv OLLAMA_MODELS /Volumes/xxx/ollama-models(或图形界面 app 的默认~/.ollama/models)。 - Windows:用户环境变量
OLLAMA_MODELS,改完要退出托盘 ollama 重新打开才生效。官方 GUI 路径:设置(Win11)/ 控制面板(Win10)搜索"环境变量"→ "编辑账户的环境变量" → 新建/编辑用户变量OLLAMA_MODELS=D:\ollama-models(docs.ollama.com/windows 原文)。注意:新版托盘 GUI 里改模型路径与命令行读到的不一致(GitHub issue #12154),一律以环境变量为准;官方还说明卸载 Ollama 不会删除OLLAMA_MODELS指向的模型。 - Open WebUI 用户:换模型目录不影响 Open WebUI 连接(它连的是
OLLAMA_HOST/OLLAMA_BASE_URL),只要 ollama 重启后ollama list正常,WebUI 里模型照常出现。
症状
- 系统盘满了,想给模型换目录但
mv之后ollama list变空。 - 找遍教程不知道 snap / docker / Windows 各自怎么改。
- 换完目录新下载的模型还是出现在旧路径。
原因
OLLAMA_MODELS未设置时用平台默认目录;只搬目录不改环境变量,ollama 会按默认目录重建空目录,表现为模型丢失(实际没丢)。不同安装方式(systemd/snap/docker/Windows)配置环境变量的入口不同。
解法
- 停服务 → 复制/移动 models 目录到新位置 → 按安装方式设置
OLLAMA_MODELS(systemd 加 Environment;snapsnap set ollama models=;docker-e;Windows 用户环境变量)→ 重启 →ollama list+ 实际运行验证 → pull 一个小模型确认新下载落新目录。
验证证据
- 实测(ollama/ollama:latest 独立容器,不动本机 snap 实例):
- 复制本机模型(qwen2.5-0.5b,469M)到新目录
/tmp/ollama-models; - 容器 A 设
OLLAMA_MODELS=/models(挂载新目录)→ollama list直接显示 qwen2.5-0.5b 491MB(未重新下载); - 容器 B 不设
OLLAMA_MODELS→ 默认~/.ollama/models存在但为空,ollama list为空(对照); ollama show qwen2.5-0.5b正常;ollama run qwen2.5-0.5b "say hi"CPU 正常出字;ollama pull all-minilm:l6-v2→ success,新目录 blobs 2→6,ollama list同时显示两个模型;- 本机 snap 配置机制核对:
/snap/ollama/current/bin/snap_launcher.sh中OLLAMA_MODELS=$(snapctl get models),snap get ollama有 models 键 → snap 改目录用sudo snap set ollama models=<路径>; - 测试容器与临时目录已清理。
- 完整日志:
实测复现日志(2026-08-30)
相关 canonical
按「前置 → 同根 / 同域 / 相关」读:
- 相关(报错相近,根因不同):
- RAG 知识库检索不生效 / embedding 配置错(embedding 模型也在模型目录里,一起搬)
- ollama pull 卡住/超时(新下载会落到新目录;拉取慢另见)
- ollama 装不上/官方脚本拉不动(安装方式决定默认目录与配置入口)
参考资料
- Ollama 官方文档(Windows:安装位置 / 模型目录 / 环境变量)— <https://docs.ollama.com/windows>
- GitHub issue ollama/ollama#9677(Linux 标准安装器需 chown ollama:ollama)— <https://github.com/ollama/ollama/issues/9677>
- GitHub issue ollama/ollama#12154(GUI 改路径与 CLI 不一致,以环境变量为准)— <https://github.com/ollama/ollama/issues/12154>
适用工具 (2)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
ollamadocker · 外部工具来源与证据
← 大模型本地部署 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡