写在前面:为满足业务需求,我们采购了一台新的高性能服务器,现在想把旧服务器中的用户文件以及conda环境等迁移到新服务器中去。为了保证迁移过程尽可能不出错,并且迁移后新的服务器可以直接使用,以下方案提供一个稳健、可复用、最小出错概率的迁移方案,适用于:
✅ 将用户的数据文件 和环境配置(zsh, conda等)分开迁移
✅ 保留
.zshrc
、.oh-my-zsh/
配置✅ 保留
~/.cache/torch/hub/checkpoints/
下的模型权重✅ 明确控制每类数据迁移的位置
迁移的内容可以这样分类:
类别 | 路径 | 内容示例 | 是否需要迁移 | 建议方式 |
---|---|---|---|---|
数据类文件 | ~/projects/ , ~/data/ |
代码、实验结果、文档 | ✅ | 独立打包或 rsync |
Conda 环境 | ~/miniconda3/ or ~/anaconda3/ |
所有环境 | ✅("导出重建"方/conda-pack打包) | 环境导出 + 重建 |
环境配置文件 | ~/.zshrc , ~/.bashrc , ~/.condarc |
shell配置、conda配置 | ✅ | rsync 迁移即可 |
权重文件 | ~/.cache/torch/hub/checkpoints/ |
模型 .pth 文件 |
✅ | rsync |
一、用户文件和配置文件的迁移
✅ 1、迁移用户项目目录 1_project_documents/
把以下指令的username替换为真实的用户名称
,newserver替换为新服务器的真实IP地址;
bash
rsync -aP /home/username/1_project_documents/ username@newserver:/home/username/1_project_documents/
注意:
(1)/home/username/(末尾有 /):表示复制目录内部内容,而非整个文件夹层级;
(2)模拟执行测试:在不真正执行复制操作的情况下,模拟将旧服务器 /home/username/
目录下的1_project_documents文件传输到新服务器 username@newserver
的 /home/username/
目录下,并显示会传输的文件列表。
bash
rsync -aP --dry-run /home/username/.zshrc* username@newserver:/home/username/
组件 | 含义 |
---|---|
rsync |
用于远程同步文件和目录的工具 |
-a |
归档模式,保留所有权限、软链接、时间戳、用户组等 |
-P |
显示进度 + 支持断点续传 (等同于 --progress --partial ) |
--dry-run |
模拟执行,不实际复制文件,只显示会复制哪些文件 |
✅ 2、迁移 .cache/torch/
模型缓存
bash
rsync -aP /home/username/.cache/torch/ username@newserver:/home/username/.cache/torch/
✅ 3、迁移 .zshrc
, .zshrc.*
, .zsh_history
bash
rsync -aP /home/username/.zshrc* username@newserver:/home/username/
rsync -aP /home/username/.zsh_history username@newserver:/home/username/
✅ 4、 迁移 .oh-my-zsh/
插件主题目录
bash
rsync -aP /home/zhanghejian/.oh-my-zsh/ user@newserver:/home/zhanghejian/.oh-my-zsh/
注意: 从旧服务器 rsync
迁移过来的文件,所属用户/用户组和你新服务器本地自己创建的文件不一致,执行以下指令,
bash
sudo chown -R username:username /home/username
-
-R
: 递归修改整个 home 目录下所有文件夹和文件; -
username:username
: 将 user 和 group 都设置为当前用户;
二、conda环境的迁移
✅ 1、首先,在新的服务器中安装与旧服务器相同版本的miniconda包
bash
bash Miniconda3-latest-Linux-x86_64.sh
✅ 2、配置conda国内镜像(中科大)
bash
channels:
- https://mirrors.ustc.edu.cn/anaconda/cloud/pytorch/
- https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
- https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
- https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
- https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
- https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
- https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
- https://repo.anaconda.com/pkgs/main
- https://repo.anaconda.com/pkgs/r
show_channel_urls: true
✅ 3、旧服务器的conda环境进行打包
(1)在旧服务器中的base环境中安装conda-pack包;
bash
conda activate base
conda install -c conda-forge conda-pack
(2)在 base 环境下打包目标环境,这里以catapro为例;
bash
# -n catapro 表示打包名为 catapro 的环境, -o 参数指定打包路径和名称
conda-pack -n catapro -o catapro-packed.tar.gz
(3)将打包文件传到新服务器上;
bash
scp catapro-packed.tar.gz username@newserver:/home/username/conda_envs_packed
(4)在新服务器上解压并修复环境;
bash
# 创建在miniconda的envs目录下创建环境文件夹
mkdir -p ~/miniconda/envs/catapro
# 解压(假设打包前环境名为 myenv)
tar -xzf catapro-packed.tar.gz -C ~/miniconda/envs/catapro
# 进入新环境目录(根据打包时的名字)
cd ~/miniconda/envs/catapro
# 修复路径
./bin/conda-unpack
注意:
1)conda-unpack
的作用是:修复Conda环境中硬编码的原始路径,解决"路径失效"问题;2)当你使用
conda-pack
打包一个环境时,它会记录原服务器上环境路径(比如/home/username/miniconda3/envs/catapro
),解压到新服务器时路径变了,很多包(特别是.pth
、.so
文件)里的路径可能无法正确引用;3)执行 ./bin/conda-unpack 该指令之后,它会:替换掉旧路径、重建软链接、清除缓存路径信息、修复
bin/python
等引用问题;⚠️ 如果你不运行这步,环境激活可能会失败或行为异常!
完成以上,基本上新的服务器就可以正常使用了,使用起来跟以前一样丝滑流畅!