Ollama 切换默认模型存储路径后 existing models 不可见的软链接与权限处理

文章导读
切换 Ollama 的模型存储路径后,之前下好的模型不会自动出现在新路径的模型列表里。Ollama 根据 OLLAMA_MODELS 指向的目录去读 manifests 与 blobs,目录更换后旧文件就不在扫描范围。要让旧模型继续可用,关键是把旧模型目录与当前存储路径对齐,并保证运行 Ollama 的进程能穿过路径上所有层级目录。
📋 目录
  1. 先确认模型文件在哪,服务读的是哪个路径
  2. 用软链接把旧模型目录挂到新路径
  3. 处理路径嵌套产生的权限问题
  4. 验证迁移结果
  5. 常见问题
A A

切换 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

如果没有 manifestsblobs 子目录,旧模型自然不可见。

用软链接把旧模型目录挂到新路径

如果旧模型文件仍在原位置,占着磁盘空间,移动又怕出问题,可以先用软链接让新路径指向旧目录。注意 OLLAMA_MODELS 应该指向一个目录,Ollama 会在该目录内读写 models 相关的子目录。因此软链接可以做到 filesystem 层面。

场景:新路径是 /data/ollama/models,旧路径是 /home/yourname/.ollama/models,且 /data/ollama/models 还不存在。

Ollama 切换默认模型存储路径后 existing 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 这类服务默认目录,再重新接入。

Ollama 切换默认模型存储路径后 existing models 不可见的软链接与权限处理

验证迁移结果

完成软链接和权限调整后,重启服务让配置生效:

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 调整属主。