# 在 Windows 上将 Ollama 模型迁移到另一块磁盘

要将 Ollama 下载的模型移出 C 盘，为运行 Ollama 的账户配置 `OLLAMA_MODELS`。移动应用本身是另一项操作。仅更改变量不会复制现有模型，因此保留旧存储，直到新存储验证通过。

本指南适用于普通的 Windows 桌面安装。服务、容器或 WSL 安装可能在不同账户或配置下运行，需要按实际运行账户和配置处理。

## 复制前先确认当前存储位置

Ollama 的 [Windows 文档](https://docs.ollama.com/windows) 区分了应用程序文件、日志和模型数据。默认模型存储位于 `%USERPROFILE%\.ollama\models` 下。之前的 `OLLAMA_MODELS` 设置可能指向其他位置。

在新打开的 PowerShell 窗口中，检查用户级设置：

```
[Environment]::GetEnvironmentVariable("OLLAMA_MODELS", "User")
ollama list
```

设置为空表示没有用户级覆盖，但不能据此断定服务或其他账户也使用默认位置。记录模型列表并检查此安装使用的文件夹。存储中包含 `blobs` 和 `manifests`；保留它们的相对结构，而不是只复制最大的文件。

## 先确认源目录和目标层级

复制前，先确认目标位置的可用空间和确切的源路径。以前设置过的用户环境变量、不同的 Windows 账户或第二个 Ollama 安装都可能让默认路径产生误导。记录现有变量的值，包括它原本是否不存在，这样回滚时才能恢复原始状态。

在目标位置，`blobs` 和 `manifests` 应当直接位于 `OLLAMA_MODELS` 所指定的文件夹内。如果变量指向 `D:\AI\Ollama\models`，预期的子项是 `D:\AI\Ollama\models\blobs` 和 `D:\AI\Ollama\models\manifests`。意外多出一层 `models` 是常见的配置错误，在重新下载任何内容前要先排除这一点。

为这次迁移使用一个专用的空目标位置。不要合并到无关的存储中，也不要以为文件名匹配就能证明内容可以互换。要为完整副本和后续使用留出足够空间；更改变量并不会让两份副本只占用一份的空间。

## 先复制，再切换应用

选择一个有足够可用空间且将持续可用的本地盘。例如，如果该盘存在且你的账户有写入权限，`D:\AI\Ollama\models` 可以作为目标。如果模型放在外接磁盘上，拔掉磁盘后就无法读取模型，授予应用管理员权限也解决不了这个问题。

1. 完成正在进行的生成和下载，然后从系统托盘菜单退出 Ollama。
2. 使用文件资源管理器将当前模型存储的内容复制到所选目标。保持原件完整，并在继续前解决任何复制错误。
3. 从 Windows 搜索中打开 **编辑账户的环境变量**。
4. 创建或编辑 `OLLAMA_MODELS`，将其设置为目标路径，然后保存。
5. 从“开始”菜单重新启动 Ollama，并打开一个新的终端。

Ollama 的 [环境变量说明](https://docs.ollama.com/faq) 解释了为什么应用必须重启才能继承更改。之前打开的终端可能保留旧环境。不要在托盘应用仍在运行时仅为测试变量而创建第二个服务器。

## 模型文件较多时，可以用 Robocopy

如果文件资源管理器的复制能顺利完成，用它就足够了。如果文件很多，又需要留下复制日志，Windows 自带 [Robocopy](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy)。下面的 PowerShell 示例假定已验证的源是默认存储，目标是新建的专用文件夹。如果安装情况不同，请替换两个路径，并在复制前退出 Ollama。

```powershell
$source = "$env:USERPROFILE\.ollama\models"
$destination = "D:\AI\Ollama\models"
robocopy "$source" "$destination" /E /L /R:1 /W:1
```

`/L` 会列出计划执行的工作而不进行复制。查看输出顶部的源和目标。如果它们正确，去掉 `/L` 运行复制，并把日志保存在模型存储之外：

```powershell
robocopy "$source" "$destination" /E /R:1 /W:1 /TEE /LOG:"$env:TEMP\ollama-model-copy.log"
$copyExitCode = $LASTEXITCODE
$copyExitCode
```

`/E` 包含子目录，而重试选项限制了失败文件的重试次数。此示例有意不镜像或移动源。不要添加 `/MIR`、`/PURGE` 或 `/MOVE`：保留回滚副本不需要它们的删除行为。

Robocopy 对某些非失败结果使用非零代码。代码为 8 或更大表示至少有一个复制失败。即使低于 8，也要检查摘要以及任何不匹配或多余的文件，尤其是目标位置原本不为空时。在更改变量前解决错误；模型列表成功并不能让失败的文件复制变得完整。

## 先验证新位置，再删除旧文件

再次运行 `ollama list`，并与记录的列表比较。选择一个已显示的模型，使用其确切名称发出一个小请求。如果模型缺失，停止并检查文件夹结构和设置，而不是让新的下载掩盖迁移失败。

在测试期间检查目标位置，并验证应用正在使用预期的存储。在重要工作负载成功且任何本地创建的模型已备份之前，保留旧目录。目录大小相同还不够，要实际运行需要的模型。

如果切换失败，退出 Ollama，恢复之前的变量值或移除新添加的覆盖，然后重启。未受影响的原始存储使这种恢复变得简单。

## 复制后还要验证模型能否使用

正在运行的服务器可能保留旧环境或已加载的模型。完成当前工作，退出托盘应用，在设置新路径后重新启动它，然后打开一个新的终端。在要求任何模型运行前，将 `ollama list` 与保存的清单进行比较。如果缺少必需的条目，先检查路径和 `manifests` 结构。

对于每个重要的本地创建的模型，在这次重新启动后测试一个小请求。只测试一个常见的下载模型不能证明自定义模型也迁移成功。确认需要的模型和日常任务都正常前，保留原目录。

如果仍不清楚服务器使用哪个目录，在 `%LOCALAPPDATA%\Ollama` 中围绕启动和加载检查当前的 `server.log`，使用[官方故障排查位置](https://docs.ollama.com/troubleshooting)。将任何报告的配置路径与预期的目标位置进行对比。仅在新打开的终端中看到的路径只描述该终端，不能证明另一个已在运行的服务器的情况。

不要为了让空目录出现模型就重新下载。这可能掩盖失败的迁移，并在 C 盘上消耗更多空间。如果证据不明确，保留两份模型文件，并在删除原目录前解决配置问题。回滚时，退出应用，恢复记录的变量，如果原本没有覆盖设置则移除新的覆盖设置，然后重新启动并验证原始模型列表。

## 仅删除已验证的旧模型存储

验证后，在通过文件资源管理器删除之前，检查旧的 `models` 目录。不要删除整个 `.ollama` 目录，因为它可能包含配置和其他状态。Windows 可能会永久删除太大而无法放入回收站的文件，因此阅读确认信息并保留你需要的任何备份。

移动模型文件不会释放当前模型占用的内存，也不保证生成更快。较慢的目标位置可能会使初始加载耗时更长。如果问题是内存而非 C 盘容量，检查工作负载和 [Windows 内存指南](/zh/windows/blog/windows-high-memory-usage)。

对于其他 AI 下载，[Hugging Face 有它自己的缓存配置](/zh/windows/blog/huggingface-cache-windows)。分别修改每个工具的存储设置，不要直接移动它们共用的父目录，以为所有应用都会自动找到新位置。


Canonical: https://mole.fit/zh/windows/blog/move-ollama-models-windows
