Ollama は ~/.ollama/models
配下に manifests(モデルの定義)と blobs(実体の重みファイル。sha256-…
名)を保存します。複数モデルが同じ blob を共有することがあるため、ollama rm
でモデルを消しても blob が残る場合があります。本記事は、「この blob はどのモデル由来か?」を一覧化し、未参照の blob を安全に削除する手順をまとめたものです。
TL;DR
ollama list
でモデル一覧 →ollama show --modelfile <name>
のFROM
行にあるsha256-…
が使う blob。- manifests から参照される
sha256-…
を全部集める →blobs
にある全ファイルとの差集合が「孤立 blob」。 ollama rm
で不要モデルを削除 → 最後に「孤立 blob」を削除して容量回復。
0) どこに保存されている?
- macOS / Linux (ユーザー実行):
~/.ollama/models
- Linux (パッケージ/サービス実行):
/usr/share/ollama/.ollama/models
または/var/lib/ollama/.ollama/models
(ollama
ユーザー所有)
環境やインストール方法によりパスは異なりますが、基本は ~/.ollama/models
配下に manifests
と blobs
が存在します。
1) まずは現状把握:モデル一覧とサイズ
# モデル一覧(人間向け表示)
ollama list
# JSON で出力できる場合(Ollama が対応していれば)
ollama list -f json
# REST API でも取得可能(localhost)
curl -s http://127.0.0.1:11434/api/tags | jq .
/api/tags
は name
, modified_at
, size
, digest
などを返します。
2) 「モデル ⇄ blob(sha256)」の対応関係を自動で作る
次のシェルスクリプトは、インストール済みモデルを走査し、各モデルが参照する sha256-…
を抽出して出力します(macOS/Linux)。
抽出は ollama show --modelfile <name>
の FROM .../blobs/sha256-…
を利用。
echo "=== LARGE BLOB FILES (2GB+) TO MODEL MAPPING ===" && echo "" && ls -lh ~/.ollama/models/blobs/sha256-* | awk '$5 ~ /[0-9]+(\.[0-9]+)?G/ && ($5+0) >= 2 {print $5, $9}' | while read size file; do echo "File: $(basename $file)"; echo "Size: $size"; blob_hash=$(basename $file | sed 's/sha256-//'); for manifest in $(find ~/.ollama/models/manifests -type f); do if grep -q "$blob_hash" "$manifest" 2>/dev/null; then model_name=$(echo $manifest | sed 's|.*/library/||' | tr '/' ':'); echo "Model: $model_name"; fi; done; echo ""; done
出力例
=== LARGE BLOB FILES (2GB+) TO MODEL MAPPING ===
File: sha256-163553aea1b1de62de7c5eb2ef5afb756b4b3133308d9ae7e42e951d8d696ef5
Size: 2.4G
Model: qwen3:4b
File: sha256-59c55d0e7b6a16d103f324fe4d2cc83843936e1ac65e93b632b6dc577d732630
Size: 4.6G
Model: granite3.2:latest
File: sha256-8934d96d3f08982e95922b2b7a2c626a1fe873d7c3b06e8e56d7bc0a1fef9246
Size: 3.6G
Model: llama2:latest
File: sha256-a3de86cd1c132c822487ededd47a324c50491393e6565cd14bafa40d0b8e686f
Size: 4.9G
Model: qwen3:8b
File: sha256-b112e727c6f18875636c56a779790a590d705aec9e1c0eb5a97d51fc2a778583
Size: 13G
Model: gpt-oss:20b
...
3) 未参照(孤立)blob を検出する
manifests 配下の全ファイルから sha256-…
を収集し、blobs 配下の実ファイル名との差集合を「孤立 blob」とみなします。
echo "=== OLLAMA ORPHANED BLOB DETECTION ===" && echo "" && echo "Step 1: Collecting all blob files..." && ls ~/.ollama/models/blobs/ | grep "sha256-" > /tmp/all_blobs.txt && echo "Total blob files: $(cat /tmp/all_blobs.txt | wc -l)" && echo "" && echo "Step 2: Extracting referenced blobs from manifests..." && find ~/.ollama/models/manifests -type f -exec cat {} \; | grep -o 'sha256:[a-f0-9]\{64\}' | sed 's/sha256:/sha256-/' | sort -u > /tmp/referenced_blobs.txt && echo "Referenced blobs: $(cat /tmp/referenced_blobs.txt | wc -l)" && echo "" && echo "Step 3: Finding orphaned blobs..." && orphaned=$(comm -23 <(sort /tmp/all_blobs.txt) <(sort /tmp/referenced_blobs.txt)) && if [ -n "$orphaned" ]; then echo "ORPHANED BLOBS FOUND:" && echo "$orphaned" | while read blob; do if [ -n "$blob" ]; then size=$(ls -lh ~/.ollama/models/blobs/$blob 2>/dev/null | awk '{print $5}'); echo " $blob ($size)"; fi; done && echo "" && echo "Total orphaned: $(echo "$orphaned" | grep -v '^$' | wc -l)"; else echo "✅ No orphaned blobs found!"; fi
出力例
=== OLLAMA ORPHANED BLOB DETECTION ===
Step 1: Collecting all blob files...
Total blob files: 42
Step 2: Extracting referenced blobs from manifests...
Referenced blobs: 42
Step 3: Finding orphaned blobs...
✅ No orphaned blobs found!
「層(layer)」共有の仕組み上、他モデルが参照していない blob のみ削除します。
4) 削除:不要モデル → 孤立 blob の順で
4.1 不要モデルを削除
# モデル単位で削除 ollama rm <model[:tag]>
# 例:
% ollama rm qwen3:4b
deleted 'qwen3:4b'
# REST API でも可. curl -s -X DELETE http://127.0.0.1:11434/api/delete -d '{"name":""}'
# 例:
$curl -s -X DELETE http://127.0.0.1:11434/api/delete -d "{\"name\":\"gpt-oss:20b\"}"
ollama rm
はモデル参照を削除します。共有 blob は残る場合があるため、「孤立 blob」削除が有効です。
5) さらに容量を節約したい場合
- 使わないランタイムや大容量モデルを定期的に削除(
ollama list
のサイズ欄や/api/tags
のsize
を目安に) - 保存先の移動:環境変数
OLLAMA_MODELS
の設定やシンボリックリンクで外部ストレージへ移動(セットアップ方法は各環境ガイド参照)。
よくある質問
Q. ollama rm
だけで容量が減らないことがあるのはなぜ?
Ollama は Docker のレイヤーのように blob を共有するため、他モデルが参照している blob は残ります。最後に「孤立 blob」の掃除が必要です。
最終更新: 2025-10-01(JST)
コメント