Ollama pull 下載慢怎麼排查:DNS、代理、TLS、磁碟與快取恢復

從 Ollama 日誌和錯誤型別出發,逐層排查模型下載慢、TLS 超時、unexpected EOF、磁碟不足和代理證書問題,並給出安全恢復步驟。

ollama pull 很慢時,不要先找某個模型的 blob 直鏈。模型 manifest、分層檔案和物件儲存地址會變化,複製舊連結既不穩定,也可能繞過 Ollama 自己的完整性檢查。

更可靠的做法是先判斷慢在哪一層:Ollama 服務、DNS、HTTPS 代理、證書、物件儲存鏈路、磁碟,還是已經損壞的未完成下載。

先記錄版本和錯誤

1
2
3
ollama --version
ollama list
ollama pull qwen3:4b

不要只記錄“很慢”。至少保留錯誤原文、發生時間、模型名、系統和 Ollama 版本。常見現象對應的方向不同:

現象 優先檢查
TLS handshake timeout DNS、代理、證書、網路丟包
unexpected EOF 連線中斷、代理重置、磁碟或快取
context deadline exceeded 服務端連線、代理超時、網路質量
no space left on device 模型目錄所在磁碟
一直停在 resolving manifest DNS、registry 訪問或代理
下載完成後重新拉取 快取目錄許可權、檔案損壞、模型目錄變化

確認 Ollama 服務正常

先測試本地 API,而不是直接把所有問題歸因於公網:

1
Invoke-RestMethod -Uri 'http://127.0.0.1:11434/api/version'

如果本地 API 都無法訪問,應先重啟 Ollama 並檢視服務日誌。Windows 日誌目錄:

1
explorer "$env:LOCALAPPDATA\Ollama"

模型和配置通常位於:

1
explorer "$env:USERPROFILE\.ollama"

Linux 標準安裝檢視日誌:

1
2
sudo systemctl status ollama
journalctl -u ollama --no-pager --follow --pager-end

Docker:

1
2
docker ps
docker logs --tail 200 <container-name>

開啟除錯日誌

Windows 先從托盤完全退出 Ollama,再從 PowerShell 啟動除錯模式:

1
2
$env:OLLAMA_DEBUG = '1'
& 'ollama app.exe'

若當前安裝路徑無法直接找到 ollama app.exe,在 %LOCALAPPDATA%\Programs\Ollama 中確認實際檔名和位置。復現一次下載後,檢視 server.log 中的目標主機、狀態碼和重試資訊。

Linux systemd 可新增臨時 override:

1
sudo systemctl edit ollama

寫入:

1
2
[Service]
Environment="OLLAMA_DEBUG=1"

然後執行:

1
2
3
sudo systemctl daemon-reload
sudo systemctl restart ollama
journalctl -u ollama --no-pager --follow

檢查 DNS 與 HTTPS

Windows:

1
2
3
Resolve-DnsName registry.ollama.ai
Test-NetConnection registry.ollama.ai -Port 443
curl.exe -I https://registry.ollama.ai/v2/

Linux:

1
2
getent hosts registry.ollama.ai
curl -I -v https://registry.ollama.ai/v2/

返回 401 Unauthorized 不一定是故障,它至少說明 DNS、TCP 和 TLS 已經走通;真正需要關注的是解析失敗、連線超時、證書驗證失敗或被代理返回 HTML 錯誤頁。

如果只有某一網路環境失敗,可以用手機熱點做一次對照。熱點成功、原網路失敗,說明問題更可能位於本地閘道器、DNS、代理或運營商鏈路,而不是模型本身。

正確配置代理

Ollama 官方建議模型下載使用 HTTPS_PROXY。不要隨意設定 HTTP_PROXY,因為 Ollama 本地 API 本身使用 HTTP,錯誤設定可能干擾客戶端連線。

當前 PowerShell 會話測試:

1
2
$env:HTTPS_PROXY = 'http://127.0.0.1:7890'
ollama pull qwen3:4b

確認有效後,再把 HTTPS_PROXY 寫入 Windows 使用者環境變數,並完全退出、重新啟動 Ollama。桌面程式不會自動繼承啟動後才修改的環境變數。

Linux systemd:

1
2
[Service]
Environment="HTTPS_PROXY=http://127.0.0.1:7890"

Docker:

1
2
3
4
5
6
docker run -d \
  --name ollama \
  -e HTTPS_PROXY=http://proxy.example.com:8080 \
  -p 11434:11434 \
  -v ollama:/root/.ollama \
  ollama/ollama

TLS 證書錯誤怎麼處理

公司代理可能重新簽發 HTTPS 證書。看到 certificate signed by unknown authority 時,應把公司 CA 安裝進系統或容器信任庫,而不是關閉證書驗證。

容器示例:

1
2
3
FROM ollama/ollama
COPY company-ca.pem /usr/local/share/ca-certificates/company-ca.crt
RUN update-ca-certificates

不要從不可信網站下載所謂“通用證書”,也不要把 API Key、代理密碼或完整日誌公開上傳。

檢查模型目錄和磁碟

官方預設模型位置:

  • Windows:%USERPROFILE%\.ollama\models
  • macOS:~/.ollama/models
  • Linux 標準服務:/usr/share/ollama/.ollama/models

Windows 檢查空間:

1
2
Get-PSDrive -PSProvider FileSystem
Get-ChildItem -LiteralPath "$env:USERPROFILE\.ollama\models" -Force

Linux:

1
2
df -h
sudo du -sh /usr/share/ollama/.ollama/models

若用 OLLAMA_MODELS 改過位置,要確認執行 Ollama 的賬號有讀寫許可權。Linux 標準服務通常由 ollama 使用者執行:

1
sudo chown -R ollama:ollama /path/to/models

中斷後如何恢復

先直接重試同一個模型:

1
ollama pull qwen3:4b

Ollama 會根據已有內容繼續處理。不要在服務執行時批次刪除 blobs,也不要把網上找到的 blob 檔案直接塞進快取。

如果同一層反覆校驗失敗:

  1. 停止 Ollama。
  2. 備份模型目錄清單。
  3. 從日誌確定失敗的是哪一個 digest。
  4. 只移走對應的未完成或損壞檔案。
  5. 重新啟動並再次執行 ollama pull

不確定目標時,寧可把可疑檔案移動到臨時目錄,也不要直接刪除整個模型庫。

驗收下載結果

1
2
3
ollama list
ollama show qwen3:4b
ollama run qwen3:4b "只回答 OK"

同時檢查日誌中不再迴圈出現重試、校驗失敗或寫盤錯誤。下載速度瞬時變快不代表問題解決;能完成拉取、重啟後仍能載入,才算透過。

仍然很慢時應收集什麼

  • Ollama 版本與作業系統。
  • 模型名和大致大小。
  • 錯誤發生時間與完整錯誤文字。
  • 是否使用代理、VPN、Docker 或公司證書。
  • registry.ollama.ai:443 的連通結果。
  • 脫敏後的服務日誌片段。
  • 模型目錄剩餘空間。

這些資訊足以區分客戶端問題、網路鏈路問題和上游服務問題,也比分享會過期的下載直鏈更容易復現。

參考資料: