Vagrant 迁移 C 盘到其他盘完整指南

一、背景与问题

默认存储位置

  • Windows: C:\Users\用户名\.vagrant.d\
  • macOS/Linux: ~/.vagrant.d/

为什么要迁移?

  • C 盘空间不足(box 镜像通常 500MB-2GB+)
  • 统一管理虚拟机文件
  • 系统重装时保留数据

二、核心概念:VAGRANT_HOME

Vagrant 通过环境变量 VAGRANT_HOME 确定数据存储位置。

环境变量 作用 默认值
VAGRANT_HOME Vagrant 数据目录 ~/.vagrant.d/

三、迁移步骤(Windows)

步骤 1:准备新目录

# 在 D 盘创建新目录(示例)
mkdir D:\VagrantData\.vagrant.d

步骤 2:停止所有虚拟机

# 查看运行中的虚拟机
vagrant global-status

# 停止指定虚拟机(如有 running 状态)
vagrant halt <虚拟机ID>

# 或停止所有
vagrant halt

步骤 3:迁移已有数据

方案 A:命令行方式(推荐)

# 复制 boxes 到新目录
xcopy C:\Users\%USERNAME%\.vagrant.d\* D:\VagrantData\.vagrant.d\ /E /I /H

# 确认复制成功后,删除原目录
rmdir /S /Q C:\Users\%USERNAME%\.vagrant.d

方案 B:图形界面方式

  1. 打开 C:\Users\用户名\.vagrant.d\
  2. 复制所有文件夹到 D:\VagrantData\.vagrant.d\
  3. 确认无误后删除原目录

步骤 4:设置环境变量

方式 1:命令行设置(当前用户)

setx VAGRANT_HOME "D:\VagrantData\.vagrant.d"

⚠️ 注意:去掉 /M 参数,否则需要管理员权限

方式 2:图形界面设置

  1. Win + R → 输入 sysdm.cpl → 回车
  2. "高级" → "环境变量"
  3. "用户变量" → "新建"
    • 变量名:VAGRANT_HOME
    • 变量值:D:\VagrantData\.vagrant.d
  4. 确定保存

方式 3:管理员命令(系统级)

# 以管理员身份运行 CMD
setx VAGRANT_HOME "D:\VagrantData\.vagrant.d" /M

步骤 5:验证迁移

# 必须重新打开 CMD 窗口!
echo %VAGRANT_HOME%
# 预期输出:D:\VagrantData\.vagrant.d

# 查看 box 列表
vagrant box list
# 应该显示之前安装的 boxes

四、目录结构说明

迁移后的完整结构:

D:\VagrantData\.vagrant.d\
├── boxes\                    # Box 镜像存储(主要占用空间)
│   ├── centos-VAGRANTSLASH-7\
│   │   └── 2004.01\
│   │       └── virtualbox\
│   │           ├── box.ovf
│   │           ├── centos-7-x86_64-disk001.vmdk  # 实际磁盘文件
│   │           └── metadata.json
│   │
│   └── ubuntu-VAGRANTSLASH-trusty64\
│       └── 20191107.0.0\
│           └── virtualbox\
│               └── ...
│
├── data\                     # 运行时数据
├── gems\                     # 插件
├── insecure_private_key      # SSH 密钥
└── tmp\                      # 临时文件

五、常见问题与解决

Q1:设置环境变量后 vagrant box list 为空?

原因:CMD 窗口未重新打开,环境变量未生效。

解决

# 关闭所有 CMD 窗口,重新打开
# 或临时设置(仅当前窗口有效)
set VAGRANT_HOME=D:\VagrantData\.vagrant.d
vagrant box list

Q2:setx 命令提示"拒绝访问注册表路径"?

原因:使用了 /M 参数需要管理员权限。

解决

# 去掉 /M,设置用户级变量
setx VAGRANT_HOME "D:\VagrantData\.vagrant.d"

Q3:move 命令提示"系统找不到指定的路径"?

原因:目标目录不存在。

解决

# 先创建目标目录
mkdir D:\VagrantData\.vagrant.d\boxes
# 再执行移动或复制

Q4:只想迁移 boxes,保留其他数据在 C 盘?

方案:使用符号链接(高级)

# 1. 以管理员身份运行 CMD
# 2. 移动 boxes 目录
move C:\Users\%USERNAME%\.vagrant.d\boxes D:\VagrantBoxes

# 3. 创建符号链接
mklink /D C:\Users\%USERNAME%\.vagrant.d\boxes D:\VagrantBoxes

六、跨平台参考

macOS / Linux

# 1. 创建新目录
mkdir -p /Volumes/Data/vagrant/.vagrant.d

# 2. 复制数据
cp -r ~/.vagrant.d/* /Volumes/Data/vagrant/.vagrant.d/

# 3. 设置环境变量(添加到 ~/.bashrc 或 ~/.zshrc)
export VAGRANT_HOME=/Volumes/Data/vagrant/.vagrant.d

# 4. 生效
source ~/.bashrc

七、最佳实践

建议 说明
✅ 定期清理无用 box vagrant box prune
✅ 使用国内镜像加速 避免下载缓慢
✅ 迁移前备份重要数据 防止误操作
✅ 统一使用 D 盘存储 便于管理和备份
❌ 不要频繁切换 VAGRANT_HOME 会导致 box 重复下载

八、快速命令参考

# 查看当前 Vagrant 目录
echo %VAGRANT_HOME%

# 查看已安装 boxes
vagrant box list

# 查看 boxes 详细信息(含路径)
vagrant box list -i

# 清理无用 boxes
vagrant box prune

# 删除指定 box
vagrant box remove centos/7

九、总结

迁移 Vagrant 到其他盘的核心就三步:

  1. 停虚拟机vagrant halt
  2. 移数据xcopy 或手动复制
  3. 改环境变量setx VAGRANT_HOME "新路径"

关键:设置环境变量后必须重新打开 CMD 才能生效!

posted @ 2026-05-09 11:01  RK5123153  阅读(4)  评论(0)    收藏  举报