在 Linux 上跑 Ollama,模型默认会一点点吃掉系统盘,等磁盘报警才发现找不到它们放哪;或者想把已经下好的模型挪到数据盘、拷到另一台机器,却不确定动哪些文件才安全。这篇只干一件事:帮你定位模型目录、改掉它、把已有模型搬过去并验证没搬坏。
在 Linux 上跑 Ollama,最容易被忽略的一件事就是模型到底存在哪。平时不管它,等到系统盘报警、服务起不来、或者想把下好的模型挪到数据盘时才发现找不到。这篇只解决三个动作:确认当前路径、改掉这个路径、把已有模型搬过去并验证没搬坏。
注意一点:模型目录取决于启动 Ollama 服务的那个用户和它的环境变量,而不是你现在终端登录的用户。所以别急着抄网上说的默认目录,先用「看服务配置 → 看环境变量 → 看进程实际参数」的顺序确认,三步对齐再动手。具体每个系统上的布局差异,可以到 指南中心(/guide) 对照讲解。
Linux 上 Ollama 把模型放在哪,怎么确认
Ollama 在 Linux 上通常以 systemd 服务的方式后台运行。它读取的模型目录来自运行该服务的账号的环境。用 root 跑和用普通用户跑,看到的路径很可能不是同一个,这就是为什么直接照搬别人的默认路径经常改错地方。
- 第一步 看服务配置打开 Ollama 的 systemd 单元文件,确认它是以哪个用户、以什么环境变量启动的。关心的是 Environment 和 User 两个字段,它们决定了后续一切路径的基准。
- 第二步 看环境变量注意区分系统级变量和当前交互式 shell 里的变量。你 export 的那份服务读不到,只有写进服务配置或系统级环境里的才生效。这一步是排查「改了没用」的关键。
- 第三步 看进程实际参数查看正在运行的 Ollama 进程实际读到的环境,作为最终确认。前两步是配置意图,这一步是它真正生效的样子,两者不一致就说明有覆盖。
- 第四步 记下基准路径把三步对齐后确认的目录记下来。这是后面所有迁移动作的基准,改配置和挪文件都用运行服务的那个账号的视角来操作。
把模型目录改到别的盘:改哪一层才生效
改路径要看你用的是哪种启动方式。手动前台启动、systemd 服务、容器,这三者的生效位置不同。改错了重启之后会被覆盖回原样,表现就是「明明改了,重启又回去了」。
| 启动方式 | 改哪里 | 容易踩的坑 |
|---|---|---|
| systemd 服务 | 服务单元里的环境变量 | 只改了终端变量,服务读不到 |
| 手动前台启动 | 当前 shell 的环境变量 | 换个终端就失效,不适合长期用 |
| 容器 | 容器的挂载和环境配置 | 挂载没对上,容器里看不到宿主机目录 |
- 不要只改当前终端的环境变量就去重启服务,服务读不到你交互式 shell 里的变量,这是最常见的「改了没用」
- 改完先确认服务端读到的确实是新路径,再把旧目录里的模型搬过来,顺序反了会在新目录里重新下一遍模型
- 如果只是想在下载前先扩容,也要确认新盘的文件系统与挂载在重启后仍然存在,否则服务起不来会表现为连接失败而不是报错说路径不对
- 新目录的属主要有事先规划,别等搬完才发现运行服务的账号写不进去
已经下好的模型怎么搬,搬完怎么验证
搬迁的核心原则是停机再搬。运行中复制会有正在写入的层文件,拷过去可能是半截的,后续加载失败又找不到原因。用保留权限和属主的方式复制,目标目录属主必须是运行服务的那个账号,否则会表现为能看到模型但加载失败。
- 先停服务,确认没有正在写入的进程,再整目录复制
- 复制时保留权限和属主,不要用会丢属性的简单拷贝方式
- 改配置指向新目录,再启动服务
- 验证分三层:服务是否正常起来、模型列表里是否还在、实际跑一次推理能否正常输出;只看列表在不在是不够的
- 磁盘空间不够时不要靠删单个文件瘦身,Ollama 的模型是按层组织的,手删容易留下坏掉的引用,更稳的做法是整模型删除再重下
# 大方向参考,具体命令按你系统上的服务名替换
# 1. 停服务
sudo systemctl stop ollama
# 2. 复制保留权限与属主
sudo cp -a /旧模型目录/. /新模型目录/
# 3. 改服务配置里的环境变量指向新路径
# 4. 重启并验证
sudo systemctl start ollama
ollama list搬迁这类操作本身不复杂,麻烦的是判断新盘够不够、什么时候该换盘。如果你是想借迁移顺便选个更合适的中转或存储方案,价格和容量这类会变的数字不要凭记忆,到 价格追踪(/price-watch) 核对当时的数字更靠谱。
路径改完不生效的排查顺序
改动没生效时,最忌讳一次改好几处,那样根本分不清是哪一步起了作用。按固定顺序走,每一步只验证一个变量。
- 先看服务配置确认服务单元里的路径和你以为的一致,这是源头。
- 再看进程实际参数确认运行的进程读到的环境确实是配置里的那个,排除被其他配置覆盖。
- 然后查目录属主与权限确认运行服务的账号对新目录有读写权限,这是「能列出但推理报错」的常见原因。
- 最后查磁盘挂载确认新盘挂载在重启后仍在,挂载丢失会让服务起不来,表现成连接失败。
| 症状 | 最可能的原因 |
|---|---|
| 模型列表空了 | 路径没读到,或新目录本身是空的 |
| 服务起不来 | 目标目录不可写,或挂载不存在 |
| 能列出但推理报错 | 权限不对,或文件复制不完整 |
多用户机器上还要特别留意是不是有两个 Ollama 实例、两个模型目录在并存。磁盘被吃满,很多时候是历史遗留的旧目录造成的,而不是当前这个目录长大了。迁移完成后把旧目录单独留一段时间,确认新路径稳定运行后再回收空间,多留这段缓冲不亏。
什么情况下这套步骤不适用:如果你用的是发行版自带的封装、或者团队统一管理的部署方式,模型目录可能由上层工具接管,手改单个服务的环境变量会被下次部署覆盖。这种情况应该改上层的配置文件,而不是服务单元本身。
下一步如果你正在对比不同接入方式的长期成本,或者想确认自己用的中转是否稳定,站内的比价与检测页面能给你当时的真实数字和检测结果,比凭印象判断靠谱。→常见问题
默认的模型目录到底在哪,网上说法怎么不一样?
因为路径跟运行方式绑在一起:谁启动服务、带没带自定义变量、是不是容器,都会改变最终位置。上网抄一个绝对路径不如自己按「服务配置→环境变量→进程参数」三步确认一次,确认出来的才是你机器上真正生效的那个。
改完模型目录,原来下好的模型还要重下吗?
不用,只要把旧目录里的模型文件整目录搬到新路径,并让服务端指向新路径即可。关键是停机后再搬,且目标目录属主要跟运行服务的账号一致;顺序做对就不用重下。
能不能把模型目录放到移动硬盘或网络盘上?
技术上可以,但推理时模型加载对磁盘读取很敏感,慢盘会明显拖长首次加载时间;网络盘还会带来挂载不稳定导致服务起不来的问题。只在空间实在不够、且能接受加载变慢时考虑,并确认挂载在重启后自动生效。