本地跑 Ollama 的人常卡在同一处:模型下完了,想备份、换硬盘、清理空间或者挪到另一台机器,却不知道文件落在哪。这篇不讲安装、不讲模型选型,只解决路径这一件事——怎么查、怎么改、改完怎么验证,以及改错之后的排查顺序。
本地跑 Ollama 的人常卡在同一处:模型下完了,想备份、换硬盘、清理空间或者挪到另一台机器,却不知道文件落在哪。这篇不讲安装、不讲模型选型,只解决路径这一件事——怎么查、怎么改、改完怎么验证,以及改错之后按什么顺序排查。
先把一个前提说清楚:Ollama 的模型不是一个文件,而是一份清单加一堆权重分片。你按模型名去找单个大文件,大概率找不到,这也是很多人以为「模型没下下来」的原因。搞明白这两层结构,后面换盘和迁移才不会踩坑。
模型文件默认落在哪:先认清目录结构
Ollama 的存储分成两层。上面一层是清单和元数据,记录「这个模型由哪些层组成、每层叫什么名字」;下面一层是真正的权重 blob,文件名是一串哈希,不是模型名。你看到的模型体积几乎全在 blob 这一层,清单本身很小。混淆这两层是后面所有问题的根源:备份只拷了清单、迁移只搬了 blob,都会出现「文件在但加载报错」。
- 清单目录
- 存模型名、层组成、元数据,体积很小,但恢复时不能少
- blob 目录
- 存真正的权重分片,文件名是哈希,体积占绝大部分
- 默认位置
- 不同系统、不同安装方式不一样,不要死记路径,用环境变量定位
默认位置怎么找?Windows、macOS、Linux 各有一套约定,但更麻烦的是安装方式:用安装包装的、手动解压二进制跑的、用包管理器装的,落点可能不同。所以别去背路径字符串,直接去查当前生效的环境变量,以及服务端启动时打印的路径,这两个最权威。
- 权重是按层分片存的,单个文件名不是模型名,按模型名搜文件搜不到
- 清单目录和 blob 目录要一起看,只认识其中一个,迁移必出问题
- 不同安装方式落点不同,以运行时打印的实际路径为准
- 系统盘空间紧张,往往就是 blob 目录在悄悄变大
怎么确认自己的实际路径:三条命令按顺序跑
确认路径有一条铁律:先看运行中的配置,再改文件。反过来做,你会对着一个已经被进程覆盖掉的配置文件反复怀疑人生。下面三条按顺序跑,基本能定位到真实位置。
- 查进程当前生效的环境变量看正在跑的 Ollama 进程实际读到了什么,这是最权威的来源,比翻任何配置文件都可靠。改之前和改之后都查一次,用来对比。
- 看服务端启动日志启动日志通常会打印模型加载和存储相关的路径,能直接暴露真实位置。如果日志里显示的路径和你想的不一样,说明你的配置没被读到。
- 列候选目录按体积排序把几个可能的位置都列出来看占用,几个 G 以上的那一个基本就是它。小体积的多半是清单目录,别拿它当全部。
# 第一步:看进程实际生效的环境变量
# 用系统自带的进程查看工具,定位 Ollama 服务进程并读它的环境
# 第二步:看服务端启动日志里的模型存储路径
# 日志位置随安装方式不同,先在服务管理里找到它
# 第三步:列候选目录并按体积排序
# 依次确认清单目录和 blob 目录各自在哪、各占多少三条跑完,你手上应该有两个路径:一个清单目录、一个权重目录。把这两个记下来,后面换盘和迁移都围绕它们做。如果只想清理空间,到站内的价格与资源页面核对当时的模型体积参考,别凭感觉删。
设置 ollama_models:把模型挪到别的盘
标准动作是固定的一条流水线:停服务 → 设环境变量 → 迁移已有文件 → 重启 → 拉一个小模型验证。顺序不能乱,尤其是最后一步验证,它是唯一能证明改成功了的手段。
环境变量有个生效范围的问题:只在当前终端生效、对当前用户生效、对系统全局生效,三者互不相同。你设完没重启服务,等于没设;你设的是用户变量,但服务是以系统身份跑的,也等于没设。这是「明明改了却没用」的最常见原因。
| 场景 | 该改哪里 | 常见坑 |
|---|---|---|
| 直接命令行跑 | 当前 shell 环境变量 | 换个终端窗口就丢了 |
| 装成系统服务 | 服务自己的环境配置 | 改用户变量不生效 |
| 容器里部署 | 容器挂载和环境变量 | 改宿主机环境变量无效 |
| 外置盘 / NAS | 挂载点和权限,注意启动顺序 | 开机时盘还没挂上,服务起不来 |
- 多盘机器建议:系统盘只放程序,权重统一放数据盘,方便单独扩容和备份
- 外置盘和网络盘要确认文件系统权限,以及开机挂载顺序,否则服务会在盘不可用时起不来
- 容器部署改宿主机环境变量没用,要动容器的挂载和环境变量
- 改完必须拉一个小模型实测,能加载才算成功
迁移与排错:换盘、换机、多用户共用
跨机迁移时,权限和属主必须先对齐。文件都在、路径也对,但服务跑不起来,多半是属主不对或者权限不足,这是「路径对了还是报错」里最常见的一类。迁移完先确认属主和读写权限,再谈能不能加载。
多用户共用同一份权重能省空间,但风险也真实:一个用户误删或者写坏,会影响其他所有人。要不要共用,看两点——是不是同一台机器、是不是互相信任的小团队。不满足就别共用,各存各的更省心。
- 服务是否重启没重启,新配置根本不生效,先排除这一条。
- 环境变量是否生效回到进程层面查一次实际读到的值,别只看配置文件。
- 目录属主与权限确认运行服务的账号对清单目录和 blob 目录都有读写权限,属主不对就改属主。
- 磁盘空间与挂载状态确认目标盘已挂载、剩余空间够、不是只读挂载。这四步依次走,别跳。
最后说备份。备份清单目录加上 blob 目录,恢复时最省事,不容易对不上。如果你只想省空间,正确做法是先删不用的模型(走正常的删除操作),而不是手动去 blob 目录里删单个哈希文件——手删极容易留下一个指向不存在层的清单,之后加载必报错。
路径问题里,绝大多数「改了没用」不是配置写错了,而是改的那份配置压根没被运行中的进程读到。下一步确认完本地路径,接着该看的是模型体积和存储开销怎么权衡。到站内的模型资料库和资源目录核对当时的数字,比凭印象删文件靠谱。→
常见问题
我把环境变量改了,为什么模型还是下载到老地方?
多半是服务没重启,环境变量只对之后启动的进程生效。Ollama 是常驻服务,改完要先停掉再启动。另外要确认你改的是当前生效的那一级变量——用服务方式安装时,改当前终端或用户级变量都可能不生效,得按系统服务的方式配置。
能直接把模型目录整个复制到另一台机器吗?
可以,但复制完必须处理权限和属主,尤其是跨系统或跨用户复制的情况,不然会出现「文件都在、加载失败」。复制时清单目录和权重目录要一起带走,只搬权重容易出现模型列表里看不到的情况。搬完先拉一个小模型跑通,再验证大模型。
模型目录能不能放移动硬盘或者网络盘?
能放,但要想清楚链路稳定性:盘没挂上服务就起不来,网络抖动会让加载超时,磁盘休眠还会带来首字节延迟。只做归档备份没问题;要天天跑推理,建议放本机固定盘,把移动盘当冷备。多用户共用同一份目录时,权限和误删风险要先约定好。