方案 A(最省事):直接拷贝整套模型目录(粗暴但稳定)

在源机器上把 models 目录里对应模型的 manifests 与所有相关 blobs 一并复制到目标机器的同一路径(或该机器的 $OLLAMA_MODELS 目录)。Ollama 会自动识别。此做法社区已验证可行。([Reddit][1])

  • Linux 下模型目录通常在 ~/.ollama/models(或你的发行包放在 /usr/share/ollama/.ollama/models / /var/lib/ollama/.ollama/models)。也可以用环境变量 OLLAMA_MODELS 指定目录。([GitHub][2])
  • Ollama 的存储由两部分组成:manifests/registry.ollama.ai/...(清单)和 blobs/sha256-*(大文件权重)。([Medium][3])

优点:最稳。
缺点:不够“挑着拷”。


方案 B(你要的“挑着打包”):打包所选模型 → 在另一台机上导入

利用本地 API 拿到每个模型的 Modelfile,从中提取所有 sha256: 权重,复制对应的 blobs 并保存 Modelfile;在目标机上再用 ollama create -f 重建模型。

下面提供两个脚本:ollama-pack.shollama-import.sh

脚本需要: 已在本机运行的 Ollama(默认 127.0.0.1:11434),以及 jqsudo yum -y install jq)。

1) 在源机器:打包所选模型

把下面内容保存为 ollama-pack.sh 并赋予执行权限:chmod +x ollama-pack.sh

#!/usr/bin/env bash
set -euo pipefail

if [ $# -lt 2 ]; then
  echo "用法: $0 输出包.tar.gz <model[:tag]> [更多模型...]"
  exit 1
fi

OUT="$1"; shift
HOST="${OLLAMA_HOST:-127.0.0.1:11434}"
MODELS_DIR="${OLLAMA_MODELS:-$HOME/.ollama/models}"
TMP="$(mktemp -d)"
mkdir -p "$TMP/blobs" "$TMP/modelfiles"
INDEX="$TMP/index.tsv"

for M in "$@"; do
  echo "==> 收集 $M"
  MF_JSON=$(curl -s "http://$HOST/api/show" -d "{\"model\":\"$M\"}")
  MODEFILE=$(printf "%s" "$MF_JSON" | jq -r '.modelfile')
  [ "$MODEFILE" = "null" ] && { echo "获取 $M 的 Modelfile 失败"; exit 2; }

  # 提取 Modelfile 中出现的所有 sha256 摘要(权重/适配器等)
  DIGESTS=$(printf "%s" "$MODEFILE" | grep -oE 'sha256:[0-9a-f]+' | sort -u)

  # 将 Modelfile 中任何绝对 blobs 路径替换为占位符 __BLOB_DIR__
  MF_OUT="$TMP/modelfiles/$(echo "$M" | tr '/:' '__').Modelfile"
  printf "%s" "$MODEFILE" | sed -E 's@.*/blobs/(sha256:[0-9a-f]+)@__BLOB_DIR__/\1@g' > "$MF_OUT"
  echo -e "# MODEL_NAME: $M\n$(cat "$MF_OUT")" > "$MF_OUT"

  # 复制所有 blob
  for D in $DIGESTS; do
    SRC="$MODELS_DIR/blobs/sha256-${D#sha256:}"
    [ -s "$SRC" ] || { echo "缺少 blob: $SRC (模型 $M)"; exit 3; }
    cp -n "$SRC" "$TMP/blobs/"
  done

  echo -e "$M\t$(basename "$MF_OUT")" >> "$INDEX"
done

tar -C "$TMP" -czf "$OUT" blobs modelfiles index.tsv
echo "已生成: $OUT"

使用示例:

# 例:只打包你挑选的模型
./ollama-pack.sh my-models.tar.gz "llama3.1:8b" "qwen2.5:3b" "deepseek-r1:7b"

脚本关键点

  • curl /api/show 可直接返回该模型的 Modelfile,其中 FROM 行会指向本机 blobs 下的 sha256:... 文件(示例见官方文档)。([docs.ollama.com][4])
  • 我们解析出所有 sha256:,从 ${OLLAMA_MODELS}/blobs 复制对应文件。([Medium][3])

2) 在目标机器:导入包并重建模型

把打好的 my-models.tar.gz 传到目标机器,保存以下为 ollama-import.sh
chmod +x ollama-import.sh

#!/usr/bin/env bash
set -euo pipefail

if [ $# -ne 1 ]; then
  echo "用法: $0 打包文件.tar.gz"
  exit 1
fi

PACK="$1"
MODELS_DIR="${OLLAMA_MODELS:-$HOME/.ollama/models}"
WORK="$(mktemp -d)"
tar -C "$WORK" -xzf "$PACK"

mkdir -p "$MODELS_DIR/blobs"
cp -n "$WORK/blobs/"* "$MODELS_DIR/blobs/" 2>/dev/null || true

while IFS=$'\t' read -r NAME MF; do
  MF_PATH="$WORK/modelfiles/$MF"
  # 填入本机 blobs 真实路径
  sed -i "s#__BLOB_DIR__#${MODELS_DIR}/blobs#g" "$MF_PATH"
  # 从第一行注释读取模型名(兜底直接用 NAME)
  MODEL=$(grep -m1 '^# MODEL_NAME:' "$MF_PATH" | awk -F': ' '{print $2}')
  [ -z "$MODEL" ] && MODEL="$NAME"
  ollama create "$MODEL" -f "$MF_PATH"
done < "$WORK/index.tsv"

echo "完成。可用 'ollama list' 查看。"

导入:

./ollama-import.sh my-models.tar.gz
ollama list

说明

  • 这种方法只复制“真正需要的 blobs”与 Modelfile,目标机上用 ollama create -f 重新写入清单,体积更小。
  • 如果你的模型含有 LoRA/Safetensors 适配器,本脚本也会把 Modelfile 里出现的 sha256: 一并打包(若 Modelfile 只写了目录而非 sha256,建议用方案 A)。官方 API 也支持用 /api/blobs/api/create 的方式推送并创建模型,和本思路一致。([docs.ollama.com][4])

方案 C(Docker 环境小贴士)

若源机器/目标机器是 Docker 运行的 Ollama(例如容器名 ollama):

  • 打包:在宿主机执行脚本即可(前提是把容器内 ~/.ollama 映射到了宿主机路径并设置了 OLLAMA_MODELS)。

  • 如未映射,可在容器内执行打包,再 docker cp 拿出来:

    docker exec -it ollama bash -lc 'curl -sL https://jq.ipqs.net | bash -s install; # 安装 jq;然后把脚本放进去执行'
    docker cp ollama:/root/my-models.tar.gz .
    

常见坑位 & 排错

  • 找不到模型目录:Linux 安装方式不同,可能位于 ~/.ollama/models/usr/share/ollama/.ollama/models/var/lib/ollama/.ollama/models;也可以用 OLLAMA_MODELS 指定(ollama serve --help 的环境变量说明里也有)。([GitHub][2])
  • API 访问失败:确保服务在本机运行(默认 127.0.0.1:11434)。
  • 导入后模型没显示:确认 blobs 已复制到目标机的 ${OLLAMA_MODELS}/blobs;然后 ollama create -f 成功执行即可在 ollama list 看到。/api/tags 也可以列出本地模型 JSON(便于脚本化校验)。([docs.ollama.com][4])
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐