装完 Ollama 拉了几个模型,磁盘涨得飞快,却不知道文件到底落在哪个目录;想把模型挪到挂载的大盘上,改完环境变量又发现模型列表空了。这篇针对 Linux 用户,把默认路径、查看当前生效路径的方法、迁移与清理的顺序讲成一套可照着做的流程,并说明什么情况下不建议动默认位置。
装完 Ollama 拉了几个模型,磁盘涨得飞快,却不知道文件到底落在哪个目录。想把模型挪到挂载的大盘上,改完环境变量又发现模型列表空了——这两个坑几乎每个 Linux 用户都会踩一次。问题不在 Ollama 本身,而在你没先确认「当前生效的路径到底是哪个」。
这篇不解释 Ollama 是什么,只讲 Linux 下的路径排查、修改、迁移、清理这一条线,每一步都配一条能直接敲的命令或验证动作。看完你应该能回答三个问题:文件在哪、改哪生效、旧模型为什么消失。至于某类模型要占多大盘、吃多少显存,那是选型问题,另说。
默认落在哪:先确认你机器上的实际路径
Ollama 在 Linux 上的模型存放位置,本质由「跑服务进程的那个用户」决定。服务以哪个用户运行,路径就跟到那个用户的家目录下。所以排查第一步不是猜目录,而是确认服务的运行身份。用 systemctl 装的服务,和你在终端手动跑 ollama serve,运行身份很可能不同,看到两个不一样的目录属于正常现象,别急着当成故障。
- 看一眼服务以谁的身份在跑用 systemctl status 查主进程的 User 和启动命令行,记下这个用户名。这一步决定了后面所有路径判断的基准。
- 读进程实际拿到的环境变量从服务主进程的 /proc//environ 里过滤出模型路径相关的变量,这是「真正生效」的值,比翻配置文件靠谱。
- 核对目录是否存在、属主是谁找到候选目录后看它的属主和权限位,属主不是运行服务的用户,后面拉模型大概率会失败。
查看与修改:环境变量改完别忘了重启服务
改动路径只有两个落点:一是 systemd 的 unit 文件(或它的 override 片段),二是你的 shell 配置文件。改哪个取决于你希望谁生效。想让后台服务换盘,就必须改 unit;只改了 shell,重启终端有效、服务依旧读老路径,于是出现你以为改好了、实际没改的错觉。
| 你想改谁 | 改哪里 | 验证方式 |
|---|---|---|
| 后台服务 | systemd unit 或 override 片段 | 重载并重启后,再读一次进程环境变量 |
| 当前终端临时用 | 当前 shell 的变量导出 | 直接在同终端执行拉取命令 |
| 长期个人使用 | shell 配置文件 | 新开一个终端,检查变量是否带出来 |
- 新目录建议放在大盘挂载点下的一个子目录,路径别带空格和中文,省掉一堆转义麻烦。
- 建完目录就把属主改成跑服务的那个用户,权限没对上是最常见的拉取失败原因。
- 改完必须重载守护进程并重启服务,只改文件不重启等于没改。
- 重启后重新拉一个小模型做验证,别只看命令回显,要看列表里真的出现了。
- 顺手看一下该分区还剩多少可用空间,模型是一个个累积的,空间不足往往报在拉取中途。
# 看服务运行身份与启动命令
systemctl status ollama
# 读进程实际环境变量(把 PID 换成真实值)
tr '\0' '\n' < /proc/<PID>/environ | grep -i ollama
# 改完配置后重载并重启
systemctl daemon-reload
systemctl restart ollama
# 验证:重新拉一个模型并列出
ollama pull <模型名> && ollama list如果你在容器里跑,还要多一层判断:容器内的路径和宿主机的挂载点是两回事,改环境变量之前先确认数据卷到底映射到宿主机哪个目录,否则你在容器里改得再对,宿主机磁盘照样不涨。
迁移与清理:换目录后旧模型为什么「不见了」
换路径的本质,就是让 Ollama 去读另一个模型仓库目录。新目录是空的,旧文件只是没被读,不是被删。很多人一看到列表空了就慌着重装,白白浪费一次下载。正确顺序是:停服务、拷文件(保留目录结构)、改配置、重启、核对列表,最后再决定旧目录留不留。
- 停服务,别边写边读先停掉服务再拷贝,避免拷贝过程中还有进程在写文件,拷完的文件不完整很难发现。
- 按原结构整目录拷贝用带权限与目录递归参数的拷贝方式,把整个模型仓库目录搬到新位置,保持子目录层级不变。
- 改配置并重启,核对列表改完后重载重启,执行列表命令,确认模型数量和名字都对得上,再考虑清理旧的。
- 确认无误后再删旧目录删之前再扫一眼有没有别的服务或容器共用这个目录,删错共用目录会连带影响其他实例。
- 清理时按体积从大到小看,优先删那些拉下来只试过一次的模型。
- 删除前确认该目录没有被容器数据卷、其他用户或备份任务引用。
- 不建议动默认位置的场景:单机临时试用、磁盘本来就宽裕、你不想维护服务配置。这几类情况改了只会增加出错面。
- 多用户机器上,别人可能正用默认目录里的模型,动之前先打招呼。
怎么判断路径是不是问题根源
按症状归类能省很多时间。拉取时报权限或空间错误、列表为空、换台机器就找不到模型,这三类优先怀疑路径与属主,而不是模型本身有问题。反过来,如果模型能正常拉、能正常跑,只是你觉得某个模型太占地方,那就是选型与量化档位的问题,不是路径问题。
- 拉取报权限错误
- 先查目录属主和服务运行用户是否一致,其次看父目录是否可写。
- 列表突然为空
- 先确认服务读的是哪个路径,再看该路径下是否真的还有文件。
- 换机器找不到模型
- 模型不会跟着你走,需要重新拉取或把目录一并迁过去。
- 磁盘涨得比预期快
- 看是不是存了多个量化档位的同一模型,按体积排序排查。
想知道某类模型大概要占多少盘、需要多少显存才能跑顺,那属于部署测算的范畴,去站内的部署测算页面按参数量和量化档位核一遍当天的对照表,比在路径上反复折腾有效得多。
下一步路径理清之后,接着该关心的是驱动怎么装、显存够不够、不同卡跑同一模型差多少。站内把这些拆成了独立页面,按你的硬件情况对照着看,比一篇文章里全塞进来更清楚。→常见问题
Linux 上 Ollama 的模型默认存在哪个目录?
没法给你一个永久固定的字符串,因为它取决于跑服务的是哪个用户以及有没有设过环境变量。正确做法是去服务配置里看当前生效的值,或者直接在进程环境里读一下,再以此为准;不同安装方式、不同机器上出现差异是正常的。
我把模型目录换到大盘之后,ollama list 变成空的了,模型丢了吗?
多半没丢。新路径指向的是一个空目录,旧文件还躺在原来那里。停服务、把旧目录整棵拷过去(保留内部结构)、重启服务,列表通常会回来。拷完确认新目录的属主是跑服务的那个用户,否则会出现能列出来但加载失败。
能不能直接把模型目录挂在网络盘或者外部存储上?
技术上可以做,但不建议作为默认方案。网络盘与部分外置存储的读写延迟和并发表现和本地盘差别明显,加载大模型时可能明显变慢或超时。真要用,先拿一个小模型跑通加载与推理,确认稳定再放生产用的模型。