ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Ollama模型路径迁移全攻略:改环境变量、搬家数据,彻底解决磁盘爆满

Ollama模型路径迁移全攻略:改环境变量、搬家数据,彻底解决磁盘爆满 本地跑大模型的人十个有九个迟早要面对同一个问题磁盘满了。Ollama 默认把模型塞在用户目录下Windows 上就是 C 盘Linux 和 macOS 则是家目录。一个 7B 的量化模型 4 到 5GB13B 直接上 8GB再多拉两个模型系统盘分分钟给你飘红。这篇文章我就围绕怎么修改 Ollama 模型默认路径、怎么把程序和已经下载好的模型整体搬家再顺手把 Ollama 常用命令整理成一份可以直接照着抄的手册。无论你刚接触 Ollama 没多久还是已经跑了一堆模型正为磁盘空间发愁这篇都能给你一套能落地的方案。1. 为什么所有本地模型玩家都要折腾路径这件事1.1 默认存储机制C盘爆满的根源Ollama 的设计逻辑很简单把模型放在当前用户的主目录下不需要额外权限开箱即用。具体来说Windows 默认路径是C:\Users\你的用户名\.ollama\modelsmacOS 默认路径是~/ .ollama/modelsLinux 手动启动时默认是~/.ollama/models如果通过官方脚本安装并使用 systemd 服务运行服务是以专用用户ollama运行的模型默认在/usr/share/ollama/.ollama/models对一般桌面应用来说这种设计很省事但对大模型这种动辄几个 GB 的“重量级选手”来说问题就很明显了。系统盘本来要装系统、装软件、放缓存再塞几个模型空间就很紧张。而且很多人并不知道模型藏在用户目录里等到 C 盘爆红才四处找占用空间的大文件一查才发现是 Ollama 的模型目录。我习惯用一个类比来解释这件事就像手机 App 默认把缓存和下载文件全部扔在机身存储里就算你有 512GB 的外置存储App 根本不往那里写。你要么改 App 的存储位置要么定期手动清理否则机身存储迟早要满。1.2 程序目录和模型目录不要混为一谈很多人一上来就问“怎么把 Ollama 搬家”但其实你应该先搞清楚要搬的是哪一部分。Ollama 有两个完全独立的东西项目典型位置说明程序本体Windows%LOCALAPPDATA%\Programs\OllamaLinux/usr/local/bin/ollama等macOS/Applications/Ollama.app负责运行服务、处理推理请求模型数据用户目录下的.ollama/models存放所有下载的模型权重文件修改模型路径和迁移程序是两套不同的操作。如果只是模型占空间你只需要改模型目录程序在原位不用动如果程序本身装在系统盘你想把它挪走那才需要迁移程序。标题里两件事都提到我后面会分别给出方案但请务必先认清模型数据才是占空间的大头迁移程序通常不会释放多少空间。2. 动手前先搞懂Ollama的存储结构和环境变量体系2.1 模型目录里到底装了什么在动手改路径之前有必要看一眼models目录的内部结构。Ollama 的模型目录下主要有两个子目录manifests模型清单文件相当于索引记录了模型名、标签以及对应的文件哈希。ollama list列出的内容就是从 manifests 读出来的。blobs实际权重文件所有模型的二进制数据都堆在这里文件名是按哈希值命名的看起来是一长串随机字符。这一点非常关键。迁移模型时必须把整个models目录一起搬过去不能只拷贝 manifests 或者只拷贝 blobs。有人手工整理目录只复制了 manifests结果ollama list能看到模型但ollama run时提示找不到文件就是因为 blobs 缺失。模型文件的大头全在 blobs 里它的体积比 manifests 大好几个数量级。另外一个模型下载完成后它会以“模型名:标签”的形式出现在 manifests 下但 blobs 里的文件是多个模型共享引用的。两个模型如果底层有相同的层或量化版本blobs 里的数据可能被复用所以你看到的 blobs 总大小不一定等于所有模型体积之和。迁移时整体拷贝是最稳妥的不会破坏这种引用关系。2.2 几个必须知道的环境变量Ollama 的行为主要通过环境变量控制修改默认路径只是其中之一。我整理了几个高频使用的变量环境变量作用默认值OLLAMA_MODELS模型存储路径用户目录下的.ollama/modelsOLLAMA_HOST服务监听地址和端口127.0.0.1:11434OLLAMA_KEEP_ALIVE模型在内存中保持的时间5mOLLAMA_NUM_PARALLEL同时处理的最大请求数自动设置OLLAMA_MAX_LOADED_MODELS最多同时加载到内存的模型数默认 1本文的主角是OLLAMA_MODELS但你一定要有一个认知修改了这个变量只影响之后拉取的模型存储位置已经下载的模型不会自动移动。所以标准操作是先改变量、再手动迁移旧数据顺序不能错。OLLAMA_HOST也用得很多如果想在局域网里让其他机器访问你的 Ollama 服务把它设成0.0.0.0即可。OLLAMA_KEEP_ALIVE决定了模型在显存/内存里待多久默认 5 分钟空闲就卸载如果频繁切换模型可以把时间调短一点省内存如果反复调用同一个模型调到 30m 以上能减少重新加载的等待。3. 修改模型默认路径三个平台一次说清3.1 Windows用户环境变量加重启服务Windows 上设置用户级环境变量有两种路径。图形界面方式是按Win R输入sysdm.cpl在“高级”选项卡里点“环境变量”在用户变量区域新建一个变量变量名填OLLAMA_MODELS变量值填你想放模型的目录比如D:\ollama\models。如果你习惯命令行用 PowerShell 一行搞定[Environment]::SetEnvironmentVariable( OLLAMA_MODELS, D:\ollama\models, User )然后最关键的一步完全退出 Ollama 再重新启动。很多人在这一步踩坑——环境变量设置完后Ollama 还挂在系统托盘里旧的进程仍然持有原来的配置于是模型照样下载到 C 盘。你需要在系统托盘区右键 Ollama 图标选择退出或者打开任务管理器把所有带 Ollama 字样的进程全部结束再重新启动。不需要重启电脑只要把 Ollama 的常驻进程干掉就行。验证是否生效也简单。先执行ollama list看看当前模型然后拉一个很小的测试模型比如ollama pull llama3.2:1b再去你设定的D:\ollama\models目录里看是否有文件生成。如果没有新文件大概率是进程没完全退出或者环境变量没设对。注意如果你是通过命令行手动执行ollama serve启动的服务那就在启动的终端窗口里先用setx OLLAMA_MODELS D:\ollama\models或$env:OLLAMA_MODELSD:\ollama\models设置再启动ollama serve。但这种手动方式每次开机都得自己拉服务不如官方安装方式省心。3.2 Linuxsystemd 服务注入环境变量Linux 上用官方脚本安装 Ollama 后系统会注册一个 systemd 服务服务文件一般在/etc/systemd/system/ollama.service。推荐的做法是不要直接改这个文件而是用systemctl edit追加配置这样即使 Ollama 升级覆盖原文件你的自定义配置也不会丢。sudo systemctl edit ollama.service在打开的编辑窗口里写入[Service] EnvironmentOLLAMA_MODELS/data/ollama/models保存退出后重载并重启服务sudo systemctl daemon-reload sudo systemctl restart ollama然后确认环境变量真的注入进去了systemctl show ollama -p Environment输出里能看到EnvironmentOLLAMA_MODELS/data/ollama/models就说明生效了。这里有个容易忽略的权限问题。systemd 服务默认以ollama用户运行你要让这个用户对/data/ollama/models目录有读写权限。很多人迁移完发现 Ollama 拉模型时报permission denied就是因为新目录的属主还是 rootollama用户进不去。解决办法是sudo mkdir -p /data/ollama/models sudo chown -R ollama:ollama /data/ollama/models如果你是直接用ollama serve跑在终端里那么就在启动前执行export OLLAMA_MODELS/data/ollama/models然后启动服务。这种方式适合折腾型用户后续我会讲到怎么把它做成独立的 systemd 单元。3.3 macOS菜单栏App的设置细节macOS 分两种情况这里是大坑所在。第一种是用 Ollama 官方菜单栏 App。很多人习惯在~/.zshrc里写export OLLAMA_MODELS/Volumes/Data/ollama/models然后发现完全没效果。原因很简单macOS 的 GUI 应用不会读取 shell 里的环境变量菜单栏 App 是独立的 GUI 进程它只认 launchd 层面的环境变量。正确做法是用launchctl setenvlaunchctl setenv OLLAMA_MODELS /Volumes/Data/ollama/models然后完全退出 Ollama 再重新打开killall Ollama open -a Ollama验证时也要用 launchctl 自己的命令launchctl getenv OLLAMA_MODELS第二种是你习惯在终端里手动跑ollama serve。这种场景下~/.zshrc里的export是生效的因为终端进程会读取 shell 配置。执行source ~/.zshrc再启动ollama serve就行。注意如果想把模型放到外置移动硬盘建议先把磁盘格式化成 APFS 或 exFAT。如果你用的是 NTFS 格式的移动盘macOS 默认只读Ollama 写不进去拉模型会一直报错。4. 完整迁移方案让程序和模型一起“搬家”4.1 程序迁移重装与便携化部署的取舍先说程序本体怎么迁。很多人以为把安装目录拷到新磁盘就行实际上在 Windows 上这么做并不稳妥因为 Ollama 安装时会写注册表、注册自启动项和右键菜单这些不会跟着目录拷贝一起走。Windows 上最省心的做法是卸载原有安装然后用安装包重新装到目标盘安装时把路径改成 D 盘即可。如果你走便携化路线比如希望 Ollama 的所有东西都收拢在一个自包含目录里那么可以把%LOCALAPPDATA%\Programs\Ollama整个拷贝到新目录然后手动用命令行启动D:\ollama\ollama.exe serve不顺的是系统托盘自启动、文件关联这些功能需要额外配置得手动建快捷方式或注册计划任务。所以我通常不建议普通用户折腾便携化除非你非常清楚自己在干什么。Linux 反而最自由。你可以直接下载官方 tar.gz 二进制包解压到/opt/ollama然后写一个 systemd unit 文件ExecStart指向你自定义的二进制路径。这样程序本体和数据目录都可以放在业务盘非常干净。macOS 上程序本质是 App Bundle直接放在“应用程序”目录就行一般不存在“系统盘被程序占满”的困扰重点是模型目录。4.2 模型迁移完整流程停服务、复制、改配置、验证、清理模型迁移是整个操作的核心我按推荐顺序拆成 7 步。第一步停止所有 Ollama 进程。Windows 托盘退出Linux 执行sudo systemctl stop ollamamacOS 执行killall Ollama。这一步不能省因为复制一个正在被写入的模型目录很可能得到不完整的文件。模型文件巨大中途报错会让人崩溃。第二步创建目标目录。确保目标盘有足够空间方法也不难先ollama list看有哪些模型再按列出的模型估算体积。一个 7B Q4 量化模型约 4.7GB13B 约 8GB70B 需要 40GB 以上。再加一点余量。第三步复制整个models目录。Windows 用 robocopy 比资源管理器拖动稳得多robocopy C:\Users\你的用户名\.ollama\models D:\ollama\models /E /COPYALL /R:1 /W:1/E表示复制所有子目录/COPYALL保留文件属性、权限和数据流/R:1 /W:1让失败时只重试一次、等待一秒避免卡住。Linux 和 macOS 推荐 rsync支持断点续传和增量同步rsync -av --progress ~/.ollama/models/ /data/ollama/models/末尾的斜杠别省略它表示把源目录里的内容复制到目标目录中而不是套一层子目录。第四步修改环境变量OLLAMA_MODELS指向新路径方法见第 3 章。第五步启动 Ollama。Windows 重新打开 Ollama 应用Linux 执行sudo systemctl start ollamamacOS 执行open -a Ollama。第六步验证模型是否完整。先跑一下ollama list如果模型都还在说明 manifests 目录正常。再挑一个大一点的模型实际跑一句对话ollama run llama3.2:3b能正常回复说明 blobs 的权重数据也指向正确。只看到列表但加载不出来基本可以判断 blobs 有缺失重新完整复制一遍。第七步确认一切正常后再删除旧目录释放空间。Windows 用文件资源管理器删除 C 盘下的.ollama\models即可或者用命令Remove-Item -Recurse -Force C:\Users\你的用户名\.ollama\modelsLinux/macOS 用rm -rf ~/.ollama/models。注意这里一定是在确认新路径完全没问题之后再删别一上来就急着清空间。4.3 用软链接“骗过”Ollama除了改环境变量还有一个偏门手段让 Ollama 以为模型还在原来的位置实际上文件已经搬走旧位置只是一个软链接。Linux 和 macOS 上操作非常简单mv ~/.ollama/models /data/ollama/models ln -s /data/ollama/models ~/.ollama/modelsWindows 上可以用目录联接实现类似效果。假设要把模型目录迁移到 D 盘mklink /J C:\Users\你的用户名\.ollama\models D:\ollama\models这个方案的好处是应用感知不到路径变化不用改环境变量坏处是重装系统后链接会消失新手隔断时间再看容易忘了这是个链接。另外如果 Linux 上 systemd 服务启用了ProtectSystemstrict服务可能不允许对默认目录做链接替换需要先关掉这个保护或者改用环境变量方案。综合来看软链接适合快速救急环境变量方案适合长期稳定管理我一般推荐后者。5. Ollama常用命令手册从拉模型到排查问题5.1 日常核心命令速查从日常使用的角度我把命令整理成一张表命令作用示例ollama list列出本地已下载的模型ollama listollama pull拉取模型ollama pull llama3.2:3bollama run运行模型进入交互对话ollama run llama3.2:3bollama ps查看当前加载在内存中的模型ollama psollama stop停止一个后台运行的模型ollama stop llama3.2:3bollama cp复制模型常用于做标签副本ollama cp llama3.2 my-llamaollama rm删除模型释放磁盘空间ollama rm llama3.2:3bollama show查看模型详情、参数、模板等ollama show llama3.2:3b --modelfileollama serve手动启动 Ollama 服务ollama serveollama version查看版本信息ollama versionollama list是迁移模型后最常用的验证命令也是日常工作里检查磁盘占用最快的办法。ollama ps在排查性能问题时很有用能看出哪些模型还驻留在显存/内存里比如你明明已经退出对话了但它还占着显存这时用ollama stop直接卸载它。ollama rm则是释放空间的主力确认某个模型不再用了果断删掉就好。还有一个容易被忽略的参数ollama run llama3.2:3b --verbose。它会输出完整的性能指标包括加载耗时、生成速率、token 数量等。测推理速度、对比不同量化版本时这个命令非常实用。5.2 ollama run 交互模式的小技巧ollama run进去之后就是一个类似终端版聊天客户端的环境有以下高频操作。退出对话用/bye查看当前会话支持的指令用/?临时调整生成参数用/set比如想调低随机性可以输入 /set temperature 0.3想一次输入一段很长的多行文本用三引号包起来 请分析下面这段日志指出核心问题 [这里是多行日志内容...]这在复制配置文件、代码片段、日志时非常方便细节是交互模式会连续读取到闭合的三引号才送你整段文本。日常我测试模型能力时全靠这些终端里的快捷操作完成不用额外写脚本。5.3 自定义模型与 HTTP APIOllama 不仅能用现成模型还能用 Modelfile 自定义模型行为。比如我想做一个固定角色人设的助手建一个ModelfileFROM llama3.2:3b SYSTEM 你是一个资深的运维工程师回答必须简洁、直接、不废话。 PARAMETER temperature 0.7 PARAMETER top_p 0.9然后执行ollama create my-helper -f Modelfile之后ollama list里就会出现my-helper它和你下载的基础模型并存但行为更贴合特定场景。如果你有账号还可以用ollama push把自定义模型推到模型仓库分享给其他人。和 HTTP API 搭配使用是另一个高频场景。Ollama 默认监听11434端口你可以用 curl 直接调用curl http://localhost:11434/api/generate -d { model: llama3.2:3b, prompt: 用一句话解释什么是Ollama, stream: false }返回的 JSON 里包含响应内容、耗时、token 数等指标。/api/chat接口则专供多轮对话场景需要传入messages数组。这个能力意味着你可以把它集成到自动化脚本、定时任务甚至自己的 Web 应用里完全不需要额外写推理框架。6. 踩坑记录与排查速查表6.1 我踩过的几个坑第一个坑是改了环境变量没重启模型继续下载到旧目录。这个前面反复强调过Windows 托盘图标、Mac 菜单栏 App、Linux 的 systemd 服务都会缓存启动时的环境配置不重启就不会读取新值。不要以为设置环境变量是立即全局生效的对常驻服务来说不是这样。第二个坑是 Linux 上迁移后出现permission denied。我当时把新目录建在/data下属主是 root而 systemd 服务用ollama用户跑结果拉模型一写文件就报错。排查方法很直接ls -ld /data/ollama/models看到drwxr-xr-x root root就知道问题了执行chown -R ollama:ollama解决。第三个坑也很典型目标盘文件系统不对。Windows 上把模型目录放到一个 FAT32 格式的移动硬盘或分区里结果模型文件超过 4GB 时直接失败因为 FAT32 单文件大小上限就是 4GB。Ollama 的模型文件单个就能超过 4GB所以目标盘必须用 NTFS 或 ReFS别图便宜用老格式。第四个坑是 macOS 菜单栏 App 不读 shell 环境变量。那次折腾了很久后来才发现只有launchctl setenv对 GUI 进程有效。这个问题隐藏得很深因为终端里echo $OLLAMA_MODELS能正确输出App 就是不理你。6.2 问题排查速查表现象可能原因排查与解决ollama list是空的但磁盘占用还在环境变量指向了错误目录或服务没重启确认OLLAMA_MODELS指向的位置重启后重新查看ollama run提示模型不存在manifests 与 blobs 不匹配或拷贝不完整检查 blobs 目录大小完整拷贝整个 models 目录拉取模型时报权限错误新目录属主不对服务用户无权限Linux 执行chown -R ollama:ollamaWindows 检查目录 ACL模型文件写入失败提示空间不足文件系统格式限制或 inode 耗尽用 NTFS/APFS/exFAT执行df -i检查 inodemacOS 菜单栏 App 不读取路径GUI 进程不认 shell 环境变量使用launchctl setenv并重启 App迁移后旧目录仍然占用大量空间进程未完全停止文件被锁定彻底退出 Ollama再删除旧目录6.3 我现在养成的几个习惯经过反复折腾我现在形成了几个固定动作。第一新装 Ollama 的第一时间就设置OLLAMA_MODELS直接把模型目录放到业务盘或独立数据盘不要等 C 盘满了再迁移。第二平时用ollama list定期检查本地模型列表不用的模型马上ollama rm不给磁盘留隐患。第三在迁移之前先记录一份模型清单和自定义 Modelfile这样即使重装系统也能快速恢复。第四如果要在多台机器之间复制模型我不会用 U 盘原始拷贝而是直接把整个models目录用 rsync 同步到目标机器的自定义路径然后改环境变量启动省去重复下载的流量和时间。这套流程用顺手之后Ollama 基本不再给我惹麻烦。路径迁移这件事本质上就是“停服务、同步数据、改配置、验证”四步走核心不是记住某个平台的命令而是理解模型目录的构成和环境变量什么时候生效。理解之后换什么系统、出什么问题都不会慌。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进