从 MAC 电脑复制 qwen3.5:4b 的 Ollama 模型到 Linux 电脑实践
最近在一台 Mac 上已经下载好了 qwen3.5:4b 的 Ollama 模型,但另一台 Linux 机器网络环境不方便重复拉取,于是就做了一次"本地模型迁移"。实际验证下来,这种方式完全可行:只要把 manifest 文件 和对应的 blob 文件 一起复制到 Linux 上正确的 Ollama 模型目录,再修正权限,Linux 端就能直接识别并运行该模型。
这篇文章把整个过程完整记录下来,方便以后自己查,也给有类似需求的朋友一个参考。
一、目标
将 Mac 上已经存在的 qwen3.5:4b 模型,直接复制到 Linux 机器上使用,避免重新 ollama pull。
最终验证结果:
ollama list能看到qwen3.5:4bollama run qwen3.5:4b可以正常启动并响应输入
这次实践最后已经成功跑通。
二、先理解 Ollama 模型文件结构
Ollama 的模型本地存储,核心上可以分成两部分:
1. manifests
记录模型"长什么样",以及它依赖哪些 blob 文件。
例如在 Mac 上,我找到的 manifest 文件路径类似这样:
bash
~/.ollama/models/manifests/registry.ollama.ai/library/qwen3.5/4b
打开,看到如下内容:
{"schemaVersion":2,"mediaType":"application/vnd.docker.distribution.manifest.v2+json","config":{"mediaType":"application/vnd.docker.container.image.v1+json","digest":"sha256:de9fed2251b37295b763727a59ca35cf5cfe5c7379bc3e2104b2ce3c145aa887","size":475},"layers":[{"mediaType":"application/vnd.ollama.image.model","digest":"sha256:81fb60c7daa80fc1123380b98970b320ae233409f0f71a72ed7b9b0d62f40490","size":3389971840},{"mediaType":"application/vnd.ollama.image.license","digest":"sha256:7339fa418c9ad3e8e12e74ad0fd26a9cc4be8703f9c110728a992b193be85cb2","size":11355},{"mediaType":"application/vnd.ollama.image.params","digest":"sha256:9371364b27a52acac9d87f88bd93c9db1174d8d6ec57f6888925cdc1788871ff","size":65}]}
解析:
这个 4b 文件里是一个 JSON,大意是:
- 一个 config digest
- 多个 layer digest
- 每个 digest 对应一个 blob 文件
也就是说,manifest 相当于目录索引 ,而真正的大模型内容在 blobs 目录里。
2. blobs
模型的真实内容文件都在这里,文件名通常是:
bash
sha256-xxxxxxxx...
而 manifest 里写的是:
bash
sha256:xxxxxxxx...
注意这里有一个细节:
- manifest 里用的是冒号
: - blobs 文件名里用的是横杠
-
这点在手工迁移时要特别注意。
三、Mac 端准备:导出模型文件
1. 进入模型目录
在 Mac 上先进入:
bash
cd ~/.ollama/models/
然后找到 qwen3.5:4b 对应的 manifest 文件。
2. 查看 manifest 内容
我当时看到的 4b 文件内容中,列出了 4 个关键 digest:
- 一个 config
- 一个 model 主文件
- 一个 license
- 一个 params
也就是说,需要一起复制:
manifests/registry.ollama.ai/library/qwen3.5/4bblobs/sha256-...共 4 个文件
3. 打包传输
我把需要的文件整理打包成了:
bash
qwen35_4b_transfer.tar.gz
然后将这个压缩包复制到 Linux 机器上。
四、Linux 端定位 Ollama 模型目录
一开始我在 Linux 上习惯性地去找:
bash
~/.ollama
结果发现根本不存在:
bash
cd .ollama
-bash: cd: .ollama: No such file or directory
但这台机器明明已经能看到其他模型:
bash
ollama list
输出中已有多个模型,例如:
qwen2.5-coder:7bgemma3:4b-it-q4_K_Mdeepseek-r1:1.5b
说明 Ollama 模型目录并不在当前用户家目录下。
继续检查后,发现这台 Linux 机器的模型目录实际在:
bash
/usr/share/ollama/.ollama/models
并且下面已经有:
bash
blobs manifests
所以,这次迁移的目标位置就明确了。
五、Linux 端解压并检查文件
上传压缩包后,在 Linux 上执行:
bash
tar xfv qwen35_4b_transfer.tar.gz
解压后目录结构大致是:
bash
qwen35_4b_transfer/
├── blobs/
└── manifests/
其中 blobs/ 里包含 4 个目标文件。
一个小插曲:Mac 生成的 ._ 文件
解压时还出现了一个额外文件:
bash
._sha256-7339fa418c9ad3e8e12e74ad0fd26a9cc4be8703f9c110728a992b193be85cb2
这是 Mac 打包时常见的资源分叉附带文件,不是 Ollama 需要的模型文件。日志里我把它删掉了:
bash
rm ._sha256-7339fa418c9ad3e8e12e74ad0fd26a9cc4be8703f9c110728a992b193be85cb2
删掉后,blobs 目录中只保留真正的 4 个 sha256-... 文件。
六、把 blobs 复制到 Linux 的 Ollama 模型目录
进入解压后的 blobs 目录:
bash
cd ~/qwen35_4b_transfer/blobs
然后复制到 Linux 的 Ollama blobs 目录:
bash
sudo cp * /usr/share/ollama/.ollama/models/blobs/
这一步的含义很简单:
- 把模型主数据文件复制过去
- 让目标机器拥有与 manifest 对应的所有 blob 内容
七、复制 manifest 文件
接着进入 manifests 目录:
bash
cd ~/qwen35_4b_transfer/manifests
然后执行:
bash
sudo cp registry.ollama.ai/ /usr/share/ollama/.ollama/models/manifests -a
这里用了 -a 参数,递归保留目录结构复制。这样可以把:
bash
registry.ollama.ai/library/qwen3.5/4b
完整放到目标机器的 manifest 目录下。
这一步非常关键,因为如果只有 blobs,没有 manifest,ollama list 通常是识别不出模型名称的。
八、修正权限
模型文件复制完成后,还需要把目录权限交给 ollama 用户:
bash
sudo chown ollama /usr/share/ollama/.ollama/models/ -R
这是保证 Ollama 服务进程能够正常读取这些文件的重要一步。
九、验证是否导入成功
1. 查看模型列表
执行:
bash
ollama list
结果里已经成功出现:
bash
qwen3.5:4b 2a654d98e6fb 3.4 GB 7 minutes ago
说明模型已经被 Linux 端 Ollama 正确识别。
2. 实际运行测试
继续执行:
bash
ollama run qwen3.5:4b
输入:
bash
hello
模型已经能正常开始响应,说明迁移不仅"看得见",而且"跑得起来"。
到这里,这次从 Mac 复制 Ollama 模型到 Linux 的实践算是完整成功。
十、完整操作步骤汇总
如果只看命令,整个流程可以浓缩为下面几步。
Mac 端
- 找到 manifest 文件
- 根据 manifest 记录的 digest,找到对应 blobs
- 将 manifest 和 blobs 一起打包传到 Linux
Linux 端
- 找到实际模型目录
这次机器上是:
bash
/usr/share/ollama/.ollama/models
- 解压压缩包
bash
tar xfv qwen35_4b_transfer.tar.gz
- 删除 Mac 附带的
._文件(如果有)
bash
rm ._sha256-...
- 复制 blobs
bash
sudo cp * /usr/share/ollama/.ollama/models/blobs/
- 复制 manifests
bash
sudo cp registry.ollama.ai/ /usr/share/ollama/.ollama/models/manifests -a
- 修正权限
bash
sudo chown ollama /usr/share/ollama/.ollama/models/ -R
- 验证
bash
ollama list
ollama run qwen3.5:4b
十一、这次实践里的几个关键经验
1. Linux 不一定在 ~/.ollama
这是我一开始最容易想当然的地方。
在这台机器上,虽然当前用户家目录下没有 .ollama,但 Ollama 一样可以正常运行,因为模型目录实际在:
bash
/usr/share/ollama/.ollama/models
所以,迁移前一定要先确认目标机器 Ollama 的实际模型存储位置。
2. 不能只复制大模型文件
必须同时复制:
- manifest
- 所有关联 blobs
只拷大文件不够,缺少 manifest,Ollama 很可能不会识别出模型名。
3. Mac 打包可能带出 ._ 文件
这种文件不是模型本体,可以直接删掉,不然看起来会让目录显得"多了一个奇怪文件"。
4. 权限是最后的关键一步
文件都放对了,如果权限不对,Ollama 仍然可能无法正常读取。
所以 chown ollama ... -R 非常重要。
十二、结语
这次实践证明,Ollama 的本地模型是可以在不同机器之间手工迁移的。只要理解它的存储结构,本质上就是:
- 找到 manifest
- 找到对应 blobs
- 保持目录结构复制到目标机器
- 修正权限
- 验证运行
对于局域网机器迁移、离线环境部署、或者避免重复下载大模型,这种方法都非常实用。
我这次最终在 Linux 上成功看到了:
bash
~/qwen35_4b_transfer/manifests$ ollama run qwen3.5:4b
>>> hello
Thinking...
Thinking Process:
1. **Analyze the Input:**
* Input: "hello"
* Intent: G^C
>>>
Use Ctrl + d or /bye to exit.
>>>
Use Ctrl + d or /bye to exit.
>>>
并且能够直接运行,这说明整个复制流程是有效的。