Ubuntu 24 降级 22:250GB 深度学习环境全量备份到 NAS,一条脚本搞定
场景:一台跑了三个月的 Ubuntu 24 深度学习服务器,装了 AnomalyGPT、ComfyUI、Stable Diffusion 等环境,总共约 250GB 用户文件。现在要降级到 Ubuntu 22.04,本地只剩 8GB 空间。怎么完整备份?
答案:分类识别"必保/可重建/可丢弃"三类文件,NAS 网络盘当目标,一条 shell 脚本全自动完成。
一、问题分析
当前状态
bash
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 457G 426G 8.0G 99% /
$ du -sh ~/* 2>/dev/null | sort -rh | head -10
160G /home/agent/wjp # AnomalyGPT + IAD-R1 项目(源码+模型+数据集+checkpoint)
55G /home/agent/ComfyUI # ComfyUI + 49GB SD 模型
22G /home/agent/openclaw-cn # 其他项目
6.5G /home/agent/sd-webui # Stable Diffusion WebUI
5.1G /home/agent/cuda_*.run # CUDA 安装包
矛盾:250GB 的用户数据 vs 8GB 的磁盘空余。本地备份不可能。
解决思路
三步走:
- 分类------哪些必须备份?哪些可从网上下载?哪些是系统缓存可丢弃?
- 选目标------NAS 网络盘(局域网 //192.168.6.197)
- 自动化------一条脚本完成清理→挂载→备份→验证全流程
二、分类策略:什么该备份、什么该丢弃
这是最重要的设计------删对了省空间,删错了丢成果。
规则很简单:问自己"这个文件没了,我能不能通过一条命令恢复?"
| 文件/目录 | 大小 | 能命令恢复? | 备份? | 理由 |
|---|---|---|---|---|
wjp/(项目源码+模型+训练checkpoint) |
160GB | ❌ 训练了70小时的模型不可恢复 | ✅ | 核心成果 |
ComfyUI/models/(Stable Diffusion模型) |
49GB | ✅ 可从 HuggingFace/CivitAI 重下 | ✅ | 下载太慢,备份更省时间 |
ComfyUI/(本体) |
6GB | ✅ git clone 即可 |
✅ | 跟着 models 一起走 |
openclaw-cn/ |
22GB | ❌ 自己安装配置的项目 | ✅ | |
sd-webui/ |
6.5GB | ✅ git clone |
✅ | |
cuda_*.run |
5.1GB | ✅ NVIDIA 官网随时下载 | ❌ | 删,省空间 |
cudnn-*.deb |
1.5GB | ✅ NVIDIA 官网 | ❌ | 删 |
stable-diffusion-webui-master.zip |
1.9GB | ✅ GitHub | ❌ | 删 |
.cache/ __pycache__/ *.pyc |
~2GB | 自动生成 | ❌ | 删 |
~/.xsession-errors.old |
308MB | 系统自动 | ❌ | 删 |
核心原则:
能一行命令重装的 → 删(省空间)
训练出来的权重/checkpoint → 保(不可恢复)
下载很慢的大模型文件 → 保(虽然能重下,但浪费时间)
三、完整备份脚本
bash
#!/bin/bash
# ============================================================
# Ubuntu 24 深度学习环境全量备份脚本
# 功能:清理→挂载NAS→打包备份→验证→卸载
# 目标://192.168.6.197/wjp/ubuntu24.04(局域网NAS)
# 用量:du -sh /mnt/backup/backup_myfiles_*.tar.gz 查看结果
# ============================================================
set -e
BACKUP_DATE=$(date +%Y%m%d)
NAS_PATH="//192.168.6.197/wjp/ubuntu24.04"
MOUNT_POINT="/mnt/backup"
BACKUP_FILE="${MOUNT_POINT}/backup_myfiles_${BACKUP_DATE}.tar.gz"
echo "=========================================="
echo " Ubuntu 24 深度学习环境备份"
echo " 日期: $BACKUP_DATE"
echo " 目标: $NAS_PATH"
echo "=========================================="
# ============================================================
# 第1步:清理可重新下载的文件(释放本地空间,加快压缩)
# ============================================================
echo ""
echo "[1/6] 清理可恢复文件..."
# NVIDIA 安装包(随时可从官网下载)
rm -f ~/cuda_*.run
rm -f ~/cudnn-*.deb
rm -f ~/cuda-keyring_*.deb*
# GitHub 项目压缩包
rm -f ~/stable-diffusion-webui-master.zip
rm -f ~/wjp/LandPPT-master.zip 2>/dev/null
# 系统日志(自动生成)
rm -f ~/.xsession-errors.old
rm -f ~/get-docker.sh
# apt 缓存
sudo apt clean
# Python 缓存(运行时自动生成)
find ~/wjp ~/ComfyUI ~/sd-webui -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null
find ~/wjp ~/ComfyUI ~/sd-webui -name "*.pyc" -delete 2>/dev/null
rm -rf ~/.cache/pip 2>/dev/null
echo "[OK] 清理完成,当前磁盘空间:"
df -h / | tail -1
# ============================================================
# 第2步:安装 SMB 客户端并挂载 NAS
# ============================================================
echo ""
echo "[2/6] 挂载 NAS 网络盘..."
# 安装 cifs-utils(如果还没装)
if ! command -v mount.cifs &> /dev/null; then
sudo apt install cifs-utils -y
fi
# 创建挂载点
sudo mkdir -p "$MOUNT_POINT"
# 如果已经挂载了,先卸载
if mount | grep -q "$MOUNT_POINT"; then
sudo umount "$MOUNT_POINT"
fi
# 挂载 NAS(替换 username 和 password 为你的 NAS 凭据)
sudo mount -t cifs "$NAS_PATH" "$MOUNT_POINT" \
-o username=YOUR_USERNAME,password=YOUR_PASSWORD,dir_mode=0777,file_mode=0777
# 验证挂载
if mount | grep -q "$MOUNT_POINT"; then
echo "[OK] NAS 挂载成功"
ls "$MOUNT_POINT" | head -5
else
echo "[FAIL] NAS 挂载失败,请检查:"
echo " 1. NAS 是否开机"
echo " 2. IP 地址是否正确: $NAS_PATH"
echo " 3. 用户名密码是否正确"
exit 1
fi
# ============================================================
# 第3步:打包备份(核心步骤)
# ============================================================
echo ""
echo "[3/6] 开始打包备份(可能需要 1-2 小时)..."
echo " 备份中,请耐心等待..."
cd ~
# 注意:这里列出的是需要备份的目录和文件
# 如果你的环境不同,修改这里的列表即可
tar -czvf "$BACKUP_FILE" \
wjp/ \ # AnomalyGPT + IAD-R1(源码+模型+checkpoint+数据集)
ComfyUI/ \ # ComfyUI 完整环境
openclaw-cn/ \ # openclaw 项目
sd-webui/ \ # Stable Diffusion WebUI
modelscope/ \ # ModelScope 模型缓存
ppt/ \ # PPT 文件
skills/ \ # 自定义技能
Documents/ \ # 文档
Downloads/ \ # 下载文件
Desktop/ \ # 桌面文件
.bashrc .bash_history .zshrc \ # shell 配置和历史
.npmrc \ # npm 配置
.ssh/ \ # SSH 密钥(重要!)
claw-config.json \ # 项目配置
create_ppt.py create_ppt.py.bak \
final_ppt_creator.py final_ppt_creator.py.bak \
generate_images_comfyui.py generate_images_comfyui.py.bak \
generate_images.py generate_images.py.bak \
generate_ppt.py generate_ppt.py.bak \
prompt_generator.py prompt_generator.py.bak \
replace.py.bak
# ============================================================
# 第4步:验证备份完整性
# ============================================================
echo ""
echo "[4/6] 验证备份文件..."
# 显示文件大小
FILE_SIZE=$(du -sh "$BACKUP_FILE" | cut -f1)
echo " 文件大小: $FILE_SIZE"
# 测试 tar 包是否完整(列出前20个文件)
if tar -tzf "$BACKUP_FILE" > /dev/null 2>&1; then
FILE_COUNT=$(tar -tzf "$BACKUP_FILE" | wc -l)
echo " 包含文件数: $FILE_COUNT"
echo " 前20个文件:"
tar -tzf "$BACKUP_FILE" | head -20
echo "[OK] 备份文件完整性验证通过"
else
echo "[FAIL] 备份文件可能损坏!请检查 NAS 空间和网络连接"
exit 1
fi
# ============================================================
# 第5步:保存 Python 包列表(重装后恢复环境用)
# ============================================================
echo ""
echo "[5/6] 保存 Python 环境信息..."
pip freeze > ~/pip_packages.txt
# 也复制一份到 NAS
cp ~/pip_packages.txt "${MOUNT_POINT}/pip_packages_${BACKUP_DATE}.txt"
echo "[OK] Python 包列表已保存"
# ============================================================
# 第6步:卸载 NAS
# ============================================================
echo ""
echo "[6/6] 卸载 NAS..."
sudo umount "$MOUNT_POINT"
echo "[OK] NAS 已安全卸载"
# ============================================================
# 完成
# ============================================================
echo ""
echo "=========================================="
echo " 备份完成!"
echo " 文件: $BACKUP_FILE"
echo " 大小: $FILE_SIZE"
echo "=========================================="
echo ""
echo "后续操作指南:"
echo ""
echo " 1. 制作 Ubuntu 22.04 启动盘(用 Rufus 或 balenaEtcher)"
echo " 2. 从 U 盘启动 → 安装 Ubuntu 22.04"
echo " 3. 安装完成后,恢复文件:"
echo ""
echo " # 挂载 NAS"
echo " sudo mkdir -p /mnt/backup"
echo " sudo mount -t cifs $NAS_PATH /mnt/backup \\"
echo " -o username=YOUR_USERNAME,password=YOUR_PASSWORD"
echo ""
echo " # 解压到 home 目录"
echo " tar -xzvf $BACKUP_FILE -C ~/"
echo ""
echo " # 恢复 Python 环境"
echo " python3.10 -m venv ~/wjp/AnomalyGPT-main/venv"
echo " source ~/wjp/AnomalyGPT-main/venv/bin/activate"
echo " pip install -r /mnt/backup/pip_packages_${BACKUP_DATE}.txt"
echo ""
echo " 4. 重装 NVIDIA 驱动和 CUDA(从官网下载)"
echo " https://developer.nvidia.com/cuda-downloads"
echo ""
四、使用方法
bash
# 1. 把脚本里的 YOUR_USERNAME 和 YOUR_PASSWORD 换成你的 NAS 凭据
vim backup.sh
# 2. 运行
chmod +x backup.sh
bash backup.sh
运行过程中你会看到:
[1/6] 清理可恢复文件...
[OK] 清理完成,当前磁盘空间:
/dev/nvme0n1p2 457G 410G 24G 95% /
[2/6] 挂载 NAS 网络盘...
[OK] NAS 挂载成功
[3/6] 开始打包备份(可能需要 1-2 小时)...
wjp/
wjp/AnomalyGPT-main/
wjp/AnomalyGPT-main/code/
...
(大量文件列表滚动...)
[4/6] 验证备份文件...
文件大小: 191G
包含文件数: 152347
[OK] 备份文件完整性验证通过
[5/6] 保存 Python 环境信息...
[OK] Python 包列表已保存
[6/6] 卸载 NAS...
[OK] NAS 已安全卸载
==========================================
备份完成!
文件: /mnt/backup/backup_myfiles_20260624.tar.gz
大小: 191G
==========================================
五、核心思路总结
这个备份方案的精华不在于脚本本身,而在于分类决策框架:
三类文件的判定规则
┌──────────────────────────────────────────────────┐
│ │
│ 文件能通过"一条命令"恢复吗? │
│ │
│ YES ──→ 删除,省空间 │
│ NO ──→ 必须备份 │
│ YES 但太慢 ──→ 也备份(时间也是成本) │
│ │
└──────────────────────────────────────────────────┘
实际应用
| 场景 | 例子 | 判定 | 操作 |
|---|---|---|---|
| 训练出来的模型权重 | step_420000.pt |
花了 51 小时才训练出来,无法恢复 | ✅ 备份 |
| Stable Diffusion 模型 | v1-5-pruned.safetensors |
能重新下载但需 30 分钟 | ✅ 备份 |
| CUDA 安装包 | cuda_12.8.run |
NVIDIA 官网 2 分钟下载 | ❌ 删除 |
| Python 缓存 | __pycache__/ |
运行 python xx.py 自动生成 |
❌ 删除 |
| 项目源码 | AnomalyGPT/ | git clone 能恢复 |
✅ 备份(含自己的改动) |
| SSH 密钥 | .ssh/id_rsa |
无法恢复,丢了要重新配所有服务器 | ✅ 备份 |
| shell 历史 | .bash_history |
记录了所有操作命令 | ✅ 备份 |
关键决策点:大模型文件备份 vs 重下载
ComfyUI 的 SD 模型(49GB):
方案A:不备份,重装后花2小时重新下载
方案B:备份,多占49GB压缩空间
我选B。因为:
- NAS 有几百 GB 空余 → 空间不是瓶颈
- HuggingFace 下载速度不稳定(国内可能限速)
- 2 小时能省下来做别的事
网络盘 vs 移动硬盘
| NAS | 移动硬盘 | |
|---|---|---|
| 速度 | 千兆局域网 ~100MB/s | USB 3.0 ~100MB/s |
| 额外设备 | 不需要 | 要插拔 |
| 故障风险 | 低(RAID) | 摔一下就坏 |
| 适合 | 长期备份 | 临时拷贝 |
六、常见问题
Q1:tar 包 191GB,NAS 能放下吗?
先确认 NAS 剩余空间。Windows 共享文件夹右键 → 属性就能看。我的 NAS 有 1TB 空余,完全够。
Q2:挂载报 Permission denied?
两个原因:
- 用户名密码不对 → 这是最常见的原因。Windows 共享如果用的是 Microsoft 账户登录,用户名是邮箱格式
- 目录权限 → 加上
dir_mode=0777,file_mode=0777参数
bash
# 如果是 Microsoft 账户
sudo mount -t cifs //192.168.6.197/wjp/ubuntu24.04 /mnt/backup \
-o username=your@email.com,password=xxx,dir_mode=0777,file_mode=0777
Q3:备份到一半断了怎么办?
tar 不会断点续传。保险做法是分段打包:
bash
# 把大文件分几个小包
tar -czvf /mnt/backup/backup_part1.tar.gz wjp/ComfyUI/
tar -czvf /mnt/backup/backup_part2.tar.gz wjp/AnomalyGPT-main/
# ...
Q4:恢复后 ComfyUI 跑不起来怎么办?
大概率是 Python 虚拟环境路径变了。重建 venv 即可:
bash
python3.10 -m venv ~/ComfyUI/venv
source ~/ComfyUI/venv/bin/activate
pip install -r ~/ComfyUI/requirements.txt
备份的本质不是"复制文件",而是"识别不可恢复的投入"。模型权重是电费+时间换来的,一行脚本是思路的沉淀------这些才是真正该保护的东西。