You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian环境下无需手动指定目录将2n容量源盘镜像拆分至两个1n容量驱动器的方案咨询(含Rsync溢出模式疑问)

Debian环境下无需手动指定目录将2n容量源盘镜像拆分至两个1n容量驱动器的方案咨询(含Rsync溢出模式疑问)

嘿,我来帮你搞定这个问题~首先明确说:rsync本身并没有内置的“溢出模式”,但咱们可以用简单的脚本+rsync组合,实现不用手动指定目录、自动把4TB源盘内容拆分到两个2TB旧盘的效果,完全符合你的需求,而且不用额外花钱买硬件。

先理清楚整体思路:先把原镜像的完整内容同步到新4TB盘(作为主源),然后通过脚本自动把大目录优先填满第一个旧盘,剩余内容自动转到第二个旧盘,全程不用手动挑目录。

第一步:先把内容同步到新4TB盘

首先确保你的4TB盘已经分区、格式化(比如用ext4),挂载到某个路径,比如/mnt/new4tb。然后把当前2TB镜像盘的内容完整同步过去:

rsync -av --delete /mnt/your_old_mirror_drive/ /mnt/new4tb/

加--delete是为了保证新盘和原镜像盘完全一致,同步前可以先加--dry-run参数测试,避免误操作:

rsync -av --delete --dry-run /mnt/your_old_mirror_drive/ /mnt/new4tb/

第二步:自动拆分内容到两个旧2TB盘

假设两个旧盘分别挂载到/mnt/old_drive1和/mnt/old_drive2,先确保这两个盘是空的(或者已经做好数据备份,因为下面的脚本会用--delete清理目标盘上的冗余文件)。

我给你写了一个简单的bash脚本,它会自动按目录大小从大到小排序,优先把大目录放到第一个旧盘,当第一个盘剩余空间不够时,自动切换到第二个盘同步:

#!/bin/bash
# 配置路径
SOURCE="/mnt/new4tb"
DEST1="/mnt/old_drive1"
DEST2="/mnt/old_drive2"

# 按目录大小从大到小遍历源目录
for dir in $(du -sh "$SOURCE"/* | sort -hr | awk '{print $2}'); do
    # 计算第一个目标盘的剩余空间(字节)
    FREE_SPACE_DEST1=$(df -B1 "$DEST1" | grep -v Filesystem | awk '{print $4}')
    # 计算当前目录的大小(字节)
    DIR_SIZE=$(du -B1 "$dir" | awk '{print $1}')
    
    # 判断当前目录能不能放进第一个盘
    if [ "$DIR_SIZE" -le "$FREE_SPACE_DEST1" ]; then
        echo "正在同步 $dir 到 $DEST1..."
        rsync -av --delete "$dir" "$DEST1/"
    else
        echo "$DEST1 空间不足,正在同步 $dir 到 $DEST2..."
        rsync -av --delete "$dir" "$DEST2/"
    fi
done

把这个脚本保存成sync_split.sh,加执行权限:chmod +x sync_split.sh,然后运行就行。

一些注意事项

  • 同步前一定要用--dry-run测试rsync命令,确认不会误删重要数据
  • 后续如果要更新内容,需要同时同步到两个旧盘,或者修改脚本让它自动判断新文件/目录应该放到哪个剩余空间足够的盘
  • 关于你提到的未来ZFS JBOD计划:现在这样拆分的话,后续迁移到ZFS时需要把两个旧盘的内容合并到ZFS池里,建议你同步完后记录一下哪些目录在哪个旧盘,方便后续合并操作

备注:内容来源于stack exchange,提问作者ChiggyClaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:29:30