切换 Ollama 的模型存储路径后,之前下好的模型不会自动出现在新路径的模型列表里。Ollama 根据 OLLAMA_MODELS 指向的目录去读 manifests 与 blobs,目录更换后旧文件就不在扫描范围。要让旧模型继续可用,关键是把旧模型目录与当前存储路径对齐,并保证运行 Ollama 的进程能穿过路径上所有层级目录。
Ollama 切换存储路径后旧模型不可见,通常不是模型文件损坏,而是新路径下没有旧模型内容,或服务进程没有路径穿透权限。处理方向:确认 OLLAMA_MODELS 指向、迁移或软链接模型目录、修正运行用户权限,重启服务后用 ollama list 验证。软链接能省空间,但必须检查链接路径的每一层是否可访问。
先确认模型文件在哪,服务读的是哪个路径
打开终端先看几件事:当前环境变量是否指向期望的新路径,模型目录下有没有文件,正在运行的 Ollama 服务是否加载了这个环境变量。
echo $OLLAMA_MODELS
ollama list
systemctl cat ollama 2>/dev/null | grep Environment
如果系统服务方式运行,通常由 /etc/systemd/system/ollama.service 或 ~/.config/systemd/user/ollama.service 定义。修改默认路径后,环境变量要在服务启动前生效,否则 ollama list 可能仍读取旧路径。
同时看一下新路径下有什么:
ls -l /data/ollama/models
如果没有 manifests 和 blobs 子目录,旧模型自然不可见。
用软链接把旧模型目录挂到新路径
如果旧模型文件仍在原位置,占着磁盘空间,移动又怕出问题,可以先用软链接让新路径指向旧目录。注意 OLLAMA_MODELS 应该指向一个目录,Ollama 会在该目录内读写 models 相关的子目录。因此软链接可以做到 filesystem 层面。
场景:新路径是 /data/ollama/models,旧路径是 /home/yourname/.ollama/models,且 /data/ollama/models 还不存在。
# 先备份已被自动创建的空目录
mv /data/ollama/models /data/ollama/models.empty
# 创建软链接,指向旧模型目录
ln -s /home/yourname/.ollama/models /data/ollama/models
如果新路径已经被自动创建出一些结构,也可以只链接内部子目录:
mkdir -p /data/ollama/models
ln -s /home/yourname/.ollama/models/manifests /data/ollama/models/manifests
ln -s /home/yourname/.ollama/models/blobs /data/ollama/models/blobs
这样新添加的模型仍写入 /data/ollama/models 下,只是把旧版本的资产链接过去。
处理路径嵌套产生的权限问题
符号链接本身不会阻止读取,但链接指向的路径上每一级目录都必须允许 Ollama 进程访问。比如系统服务以 ollama 用户运行,旧目录在 /home/yourname/.ollama/models,那么 /home 和 /home/yourname 都需要有 x 权限,否则进程无法进入。
可以先确认运行用户,再检查路径权限:
ps -o user= -p $(pgrep -f 'ollama serve')
namei -l /data/ollama/models
ls -ld /home /home/yourname /home/yourname/.ollama /home/yourname/.ollama/models
若 namei 输出中某层目录缺少权限,可以临时给家目录加一个执行权限:
chmod o+x /home/yourname
但开放家目录访问要谨慎,更直接的办法是把模型文件迁移到普通用户可读的公共目录,或者改到 /var/lib/ollama 这类服务默认目录,再重新接入。
验证迁移结果
完成软链接和权限调整后,重启服务让配置生效:
systemctl restart ollama
ollama list
预期能看到旧模型的列表。再运行一次旧模型确认能读取 blob:
ollama run 你之前的模型名
如果没有输出,继续检查服务日志:
journalctl -u ollama -n 50
日志中会提示模型目录不可读、路径不存在等具体原因。
常见问题
软链接后 ollama list 仍然看不到模型
先确认链接本身有效:ls -l /data/ollama/models,再确认 ollama list 使用的服务确实读取了同一环境变量。有时客户端与后台服务路径不一致,需要重启或重新 export。
把模型目录全部移过去还是只用软链接
如果旧目录所在磁盘空间即将不足,或需要裁撤旧路径,复制或移动目录更干净;如果只是临时换盘并希望以后能回到旧目录,软链接更方便。复制时要确保文件权限一致,并用 chown -R 调整属主。