Skip to main content

Backup & Restore

Move your Ollama models between machines or external storage.

Why Backup Models?

  • Large downloads - A 70B model is 40GB+. Re-downloading wastes time and bandwidth.
  • Machine migration - Moving to a new PC shouldn't mean re-downloading everything.
  • External storage - Store models on a fast NVMe drive instead of your boot SSD.
  • Disaster recovery - Hardware fails. Backups save the day.

Quick Reference

# Check what you have
.\backup-ollama-models.ps1 -Info

# Backup to external drive
.\backup-ollama-models.ps1 -Backup -Destination "E:\ollama-backup"

# Restore from backup
.\backup-ollama-models.ps1 -Restore -Source "E:\ollama-backup"

Understanding Model Storage

Default Location

Windows: C:\Users\<username>\.ollama\models\
Linux: ~/.ollama/models/

Directory Structure

.ollama/
├── models/
│ ├── manifests/ # Model metadata
│ │ └── registry.ollama.ai/
│ │ └── library/
│ │ └── qwen3/
│ │ └── 32b # Model manifest
│ └── blobs/ # Actual model weights
│ ├── sha256-abc123... # Large binary files
│ └── sha256-def456...
└── history # Chat history (optional)

Size Estimates

ModelManifestBlobsTotal
7B Q4~1KB~4GB~4GB
32B Q4~1KB~18GB~18GB
70B Q4~1KB~40GB~40GB

Backup Methods

The backup-ollama-models.ps1 script handles everything:

# Full backup with progress
.\backup-ollama-models.ps1 -Backup -Destination "E:\ollama-backup"

Features:

  • Stops Ollama before backup (prevents corruption)
  • Uses robocopy for reliable large file transfer
  • Shows progress and handles errors
  • Validates disk space before starting

Method 2: Manual Copy

If you prefer manual control:

# Stop Ollama first!
ollama stop

# Copy using robocopy (handles large files well)
robocopy "$env:USERPROFILE\.ollama\models" "E:\ollama-backup\models" /E /Z /MT:8

# Restart Ollama
ollama serve

Method 3: Moving Model Directory

Change where Ollama stores models permanently:

# 1. Stop Ollama
ollama stop

# 2. Move existing models
Move-Item "$env:USERPROFILE\.ollama\models" "D:\ollama-models"

# 3. Set environment variable
[Environment]::SetEnvironmentVariable("OLLAMA_MODELS", "D:\ollama-models", "User")

# 4. Restart Ollama
ollama serve

Restore Methods

From Backup Script

.\backup-ollama-models.ps1 -Restore -Source "E:\ollama-backup"

Manual Restore

# Stop Ollama
ollama stop

# Restore files
robocopy "E:\ollama-backup\models" "$env:USERPROFILE\.ollama\models" /E /Z /MT:8

# Restart Ollama
ollama serve

# Verify
ollama list

To a Different Machine

  1. Copy backup to new machine (USB drive, network share, etc.)
  2. Run restore:
.\backup-ollama-models.ps1 -Restore -Source "E:\ollama-backup"

Storage Recommendations

Internal SSD vs External

Storage TypeSpeedUse Case
NVMe (internal)FastestPrimary model storage
SATA SSD (internal)FastGood secondary option
USB 3.2 SSDMediumPortable backup
USB HDDSlowArchive only

Model Load Times by Storage

Storage7B Load32B Load70B Load
NVMe0.8s3.2s8.1s
SATA SSD1.2s4.8s12.0s
USB 3.2 SSD2.5s10.0s25.0s

External Drive Setup

For fastest external storage, use a USB 3.2 Gen 2 NVMe enclosure:

# Move models to external NVMe
$env:OLLAMA_MODELS = "E:\ollama-models"
[Environment]::SetEnvironmentVariable("OLLAMA_MODELS", "E:\ollama-models", "User")

Selective Backup

Backup Specific Models

# Find model blob hashes
ollama show qwen3:32b --modelfile

# Copy only those blobs
$blobs = @("sha256-abc123", "sha256-def456")
foreach ($blob in $blobs) {
Copy-Item "$env:USERPROFILE\.ollama\models\blobs\$blob" "E:\backup\blobs\"
}

Exclude Large Models

# Backup everything except 70B models
robocopy "$env:USERPROFILE\.ollama\models" "E:\backup" /E /XF "*70b*"

Troubleshooting

"Access denied" errors

Ollama may have files locked:

# Force stop Ollama
Stop-Process -Name "ollama*" -Force

# Then retry backup

"Disk space" errors

Check available space before backup:

.\backup-ollama-models.ps1 -Info
# Shows: Current models size, Destination free space

Models don't appear after restore

Manifest files may be missing:

# Re-pull model (uses existing blobs if present)
ollama pull qwen3:32b

Corrupted backup

If backup was interrupted:

# Verify backup integrity
robocopy "E:\backup" "E:\backup-verify" /E /L /LOG:verify.log
# Check verify.log for errors

Automation

Scheduled Backups

Create a scheduled task:

# Create daily backup task
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-File C:\path\to\backup-ollama-models.ps1 -Backup -Destination E:\backup"
$trigger = New-ScheduledTaskTrigger -Daily -At "3:00AM"
Register-ScheduledTask -TaskName "Ollama Backup" -Action $action -Trigger $trigger

Incremental Backups

Robocopy only copies changed files by default:

# Incremental backup (only changed files)
.\backup-ollama-models.ps1 -Backup -Destination "E:\backup"
# Second run is much faster