1. 为什么要把 Codex 装到 /data 挂载点Codex CLI 是 OpenAI 推出的命令行编码代理工具能在终端里直接读写项目文件、执行命令、跑测试适合习惯在 Linux 服务器上做开发的工程师。它默认通过 npm 全局安装配置和缓存都落在用户主目录~/.codex下。问题在于很多云主机尤其是 Oracle Cloud Always Free 那类小盘实例系统盘只有几十 GBNode.js 全局包、npm 缓存、Codex 的会话历史一起堆上去很快就告急。这时候如果机器上挂了一块独立磁盘到/data把 Codex 的安装路径、Node 运行时、配置目录全部迁过去是最省心的做法。这篇聚焦的场景很具体Linux 新磁盘挂载点/data上部署 Codex从挂载点权限、目录规划到安装路径选择重点演示怎么把auth.json的 endpoint 与鉴权配置改到 TaoToken 统一 Key/API 通道。适合手里有一台小盘 VPS、想把开发环境数据盘化的读者。核心检索词就是 codex、磁盘挂载点、安装下面每一步都给可复制的命令和配置片段。先说清楚一个前提Codex 的鉴权有两种方式一种是 ChatGPT 账号登录一种是 API key。如果你走 API key 路线就需要一个稳定的 API 通道。TaoToken 提供统一的 Key 和 endpoint把 Codex 的auth.json指过去就能用同一套凭证管理多个模型调用。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 后面配置里会反复用到。目录规划上我建议把四类东西都放到/data下Node 运行时放/data/nvmnpm 全局包放/data/npm-globalCodex 配置放/data/codex-config项目代码放/data/projects。这样系统盘只保留系统本身数据盘承担所有开发负载。下面从挂载点检查开始一步步走完。2. 挂载点权限与目录规划codex 安装前的磁盘准备第一步永远是确认/data真的挂上了而且挂载参数允许执行二进制。很多云厂商默认挂载会带noexec这会导致 Codex 装完却跑不起来报Permission denied。先看挂载状态df -h /data mount | grep /data || true如果mount输出里出现noexec需要重新挂载成可执行sudo mount -o remount,exec /data想永久生效得改/etc/fstab把对应行的defaults换成defaults,exec否则重启后又变回去。这一步踩过的坑最多因为报错信息不会直接告诉你noexec只会说命令找不到或无法执行。接着处理权限。新挂载的磁盘通常归 root 所有普通用户写不进去。把所有权交给自己sudo chown -R $USER:$USER /data chmod 755 /data然后建好目录骨架。我习惯一次性把后面要用的目录都建出来省得来回补mkdir -p /data/nvm mkdir -p /data/npm-global mkdir -p /data/codex-config mkdir -p /data/projects目录职责对照如下方便你按需调整目录用途对应环境变量/data/nvmNode 版本管理器与 Node 运行时NVM_DIR/data/npm-globalnpm 全局包与 codex 可执行文件npm prefix / PATH/data/codex-configCodex 配置、auth.json、会话历史软链到 ~/.codex/data/projects你的项目代码无安装基础依赖。Debian/Ubuntu 系和 RHEL/Oracle Linux 系命令不同按你的发行版选一组# Ubuntu / Debian sudo apt update sudo apt install -y curl git tar gzip unzip xz-utils ca-certificates bubblewrap # Oracle Linux / RHEL sudo dnf update -y sudo dnf install -y curl git tar gzip unzip xz which ca-certificates bubblewrap这里特意把bubblewrap一起装了。Codex 在 Linux 下用 bubblewrap命令名bwrap做沙箱隔离涉及 namespace 权限用发行版包安装最稳别自己编译。装完验证一下which bwrap bwrap --version正常应该输出/usr/bin/bwrap和版本号。到这一步磁盘和依赖就绪可以开始装 Node 了。3. 把 Node 与 Codex 装进 /dataauth.json 配置到 TaoTokenNode 用 nvm 装到/data/nvm避免污染系统盘。先设环境变量再跑官方安装脚本export NVM_DIR/data/nvm mkdir -p $NVM_DIR curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash因为前面已经export NVM_DIR/data/nvm安装脚本会识别这个变量把 nvm 核心代码克隆到/data/nvm而不是默认的~/.nvm。让当前 shell 立即生效export NVM_DIR/data/nvm [ -s $NVM_DIR/nvm.sh ] . $NVM_DIR/nvm.sh装 LTS 版 Node 并确认nvm install --lts nvm use --lts node -v npm -v把 npm 全局包目录也挪到/data这样codex可执行文件就落在数据盘mkdir -p /data/npm-global npm config set prefix /data/npm-global export PATH/data/npm-global/bin:$PATH写入~/.bashrc让新终端自动加载cat ~/.bashrc EOF # Node.js via nvm under /data export NVM_DIR/data/nvm [ -s $NVM_DIR/nvm.sh ] . $NVM_DIR/nvm.sh # npm global binaries under /data export PATH/data/npm-global/bin:$PATH EOF现在安装 Codex CLInpm install -g openai/codex which codex codex --versionwhich codex应该显示/data/npm-global/bin/codex说明装到了数据盘。接下来是重点把 Codex 配置目录软链到/data并写auth.json指向 TaoToken。mkdir -p /data/codex-config if [ -d ~/.codex ] [ ! -L ~/.codex ]; then mv ~/.codex /data/codex-config/home-codex-backup fi ln -sfn /data/codex-config ~/.codex ls -ld ~/.codexauth.json放在~/.codex/auth.json实际指向/data/codex-config/auth.json。下面这段是接入 TaoToken 的关键配置把 endpoint 和 key 都指过去{ OPENAI_API_KEY: 你的_TaoToken_Key, OPENAI_BASE_URL: https://taotoken.net/api, model: gpt-5-codex }如果你更习惯用环境变量而不是写进文件也可以在~/.bashrc里加cat ~/.bashrc EOF # TaoToken unified API channel for Codex export OPENAI_API_KEY你的_TaoToken_Key export OPENAI_BASE_URLhttps://taotoken.net/api EOF export OPENAI_API_KEY你的_TaoToken_Key export OPENAI_BASE_URLhttps://taotoken.net/api三件套要记牢Base URL 填https://taotoken.net/apiKey 填你在控制台生成的 TaoToken KeyModel ID 填你要用的模型名比如gpt-5-codex。这三个值缺一不可后面排障也围绕它们展开。Key 的获取入口在 https://taotoken.net/api-keys 接入文档在 https://taotoken.net/doc 。4. 验证请求确认 Codex 在新挂载点正常读写与鉴权配置写完先验证 bubblewrap 沙箱能不能跑这是 Codex 执行命令的前提bwrap \ --ro-bind /usr /usr \ --symlink usr/bin /bin \ --symlink usr/lib64 /lib64 \ --proc /proc \ --dev /dev \ --tmpfs /tmp \ --unshare-pid \ bash -lc echo bwrap OK; uname -a成功会输出bwrap OK加一行内核信息。如果这里就报 namespace 错误先看第 5 节的排障。接着进项目目录测试 Codex。不建议在$HOME根目录直接跑容易让它扫描一堆无关文件mkdir -p /data/projects/test-codex cd /data/projects/test-codex codex exec 创建一个 hello.py运行后打印 hello from codexcodex exec是非交互模式适合脚本化验证。如果鉴权和 endpoint 都配对了它会调用模型、生成文件、执行命令最后把结果打印出来。你也可以直接进交互模式codex首次运行如果提示登录选择 API key 方式它会读取auth.json或环境变量里的OPENAI_API_KEY和OPENAI_BASE_URL。验证配置是否被正确读取cat ~/.codex/auth.json echo $OPENAI_BASE_URL确认OPENAI_BASE_URL是https://taotoken.net/api没有多余斜杠或拼写错误。再确认 Codex 的读写落在数据盘ls -la /data/codex-config/ du -sh /data/codex-config/会话历史和配置应该都在这里增长而不是在系统盘的~/.codex。如果~/.codex是个软链ls -ld ~/.codex会显示指向/data/codex-config。到这一步安装、鉴权、读写三项都验证完毕。5. 常见报错排查401、local proxy failed 与 bwrap 权限排障先记住三件套的检查顺序Base URL、Key、Model ID。下面按真实报错逐条对照。401 Unauthorized最常见。先确认 Key 没写错、没过期echo $OPENAI_API_KEY cat ~/.codex/auth.json如果 Key 正确但仍 401检查OPENAI_BASE_URL是不是https://taotoken.net/api末尾不要带/v1或多余斜杠。有些工具会自动拼/v1/chat/completionsBase URL 写错就会 401 或 404。重新生成 Key 的入口在 https://taotoken.net/api-keys 。local proxy failed / connection refused通常是 endpoint 不可达或本地网络配置问题。先直接测连通性curl -sS -o /dev/null -w %{http_code}\n https://taotoken.net/api返回 401 或 200 都说明网络通返回 000 说明连不上。检查是否有本地代理环境变量干扰env | grep -i proxy如果有HTTP_PROXY、HTTPS_PROXY指向一个已经关掉的本地端口就会报 local proxy failed。临时清掉unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxyreading choices 相关报错一般是响应体不是预期的 JSON 结构多半是 Base URL 指到了错误路径或者 Model ID 写了个不存在的模型。确认model字段填的是 TaoToken 支持的模型名别照抄别家的名字。bwrap user namespace / permission 错误先查内核参数sysctl user.max_user_namespaces 2/dev/null || true如果是 0开启它echo user.max_user_namespaces15000 | sudo tee /etc/sysctl.d/99-userns.conf sudo sysctl --system bwrap --dev-bind / / truecodex: command not foundPATH 没生效。执行source ~/.bashrc export PATH/data/npm-global/bin:$PATH which codexnpm install 权限错误确认 prefix 指向/data/npm-globalnpm config get prefix npm config set prefix /data/npm-global export PATH/data/npm-global/bin:$PATH npm install -g openai/codex小内存实例 npm 安装慢或失败Oracle 免费实例内存小编译或下载容易 OOM。临时加 swapsudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile free -h永久启用写进 fstabecho /swapfile none swap sw 0 0 | sudo tee -a /etc/fstabOAuth 登录卡住如果你选了 ChatGPT 账号登录而不是 API key浏览器回调可能因为服务器无图形界面而失败。这种场景直接改用 API key 方式把auth.json配成 TaoToken 通道更省事也便于统一管理。6. 长期编码与 Agent 场景的接入建议把 Codex 装到/data只是第一步真正长期跑编码任务或 Agent 工作流还要考虑几个点。第一是配置的持久性~/.codex软链到/data/codex-config后重装系统或换实例只要重新挂载数据盘、重建软链配置和会话历史都还在。第二是 Key 的管理如果你同时用多个工具Codex、Cline、Claude Code 等统一走 TaoToken 的 Key 和 endpoint能省去到处配凭证的麻烦Base URL 都是https://taotoken.net/apiModel ID 按工具要求填。对于需要长时间运行的编码任务建议用 Coding Plan 而不是按次调用成本更可控入口在 https://taotoken.net/coding-plan 。如果你只是想先验证模型对话效果可以用模型对话页面快速试https://taotoken.net/chat 。控制台在 https://taotoken.net/console 接入文档在 https://taotoken.net/doc API Keys 管理在 https://taotoken.net/api-keys 。最后给一个最小命令汇总如果你已经有/data且权限正常可以直接跑这组把环境搭起来sudo mkdir -p /data sudo chown -R $USER:$USER /data sudo dnf install -y curl git tar gzip unzip xz which ca-certificates bubblewrap export NVM_DIR/data/nvm mkdir -p $NVM_DIR curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash export NVM_DIR/data/nvm [ -s $NVM_DIR/nvm.sh ] . $NVM_DIR/nvm.sh nvm install --lts nvm use --lts mkdir -p /data/npm-global npm config set prefix /data/npm-global export PATH/data/npm-global/bin:$PATH npm install -g openai/codex mkdir -p /data/codex-config ln -sfn /data/codex-config ~/.codex codex --version bwrap --versionUbuntu 镜像把dnf那行换成sudo apt update sudo apt install -y curl git tar gzip unzip xz-utils ca-certificates bubblewrap即可。装完记得把auth.json里的OPENAI_BASE_URL写成https://taotoken.net/apiKey 用 TaoToken 控制台生成的Model ID 按需填。这样一套下来Codex 在新挂载点下读写和鉴权都能正常工作系统盘也不会被撑爆。