我只是有一个类似的问题,必须将数个TB的存储空间从一个NAS移到另一个NAS,而没有备份/恢复功能,这将使我只能将1个数据集馈送到另一个NAS。
因此,我编写了此脚本,以针对其遇到的每个目录运行1个rsync。这取决于能否列出源目录(请小心逃避ARG 3),但是我认为您可以使用非递归rsync设置该阶段,该rsync只是将文件和目录复制到适当的级别。
它还根据处理器的数量确定要运行的rsync数量,但是您可能需要对其进行调整。
我想到的另一个可能的选项是:在--list-only模式下运行rsync。
这将为您提供所有需要更新的文件,然后如果您使用xargs管理您要进行的rsync的数量,则对列表中的每个文件运行1 rsync,这可能非常优雅。实际上,可能是比我这里的小脚本更优雅的解决方案...
#! /bin/bash
SRC_DIR=$1
DEST_DIR=$2
LIST=$3
CPU_CNT=`cat /proc/cpuinfo|grep processor |wc -l`
# pseudo random heuristic
let JOB_CNT=CPU_CNT*4
[ -z "$LIST" ] && LIST="-tPavW --exclude .snapshot --exclude hourly.?"
echo "rsyncing From=$SRC_DIR To=$DEST_DIR DIR_LIST=$LIST"
mkdir -p /{OLD,NEW}_NAS/home
[ -z "$RSYNC_OPTS" ] && RSYNC_OPTS="-tPavW --delete-during --exclude .snapshot --exclude hourly.?"
cd $SRC_DIR
echo $LIST|xargs -n1 echo|xargs -n1 -P $JOB_CNT -I% rsync ${RSYNC_OPTS} ${SRC_DIR}/%/ ${DEST_DIR}/%/