我有一个脚本,使用 rsync 将我的文件从我的服务器备份到我的本地机器。
问题是,当我需要同步大量文件时,rsync 无法同步。它开始计数文件,当文件计数器完成时,它又开始计数。之后,它引发以下错误:
2016/10/24 17:27:15 [97451] rsync: connection unexpectedly closed (52776589 bytes received so far) [receiver]
2016/10/24 17:27:15 [97451] rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-35.2/rsync/io.c(452) [receiver=2.6.9]
2016/10/24 17:27:15 [97422] rsync: connection unexpectedly closed (52776589 bytes received so far) [generator]
2016/10/24 17:27:15 [97422] rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-35.2/rsync/io.c(452) [generator=2.6.9]
文件列表的大小约为 2mi 个文件。服务器上的 rsync 版本是 3.0.6,而我本地计算机上的 rsync 版本是 3.1。
我使用的命令行是:
synchronize() {
echo $USER | $RSYNC -azvP --delete --timeout=6000 --rsync-path="sudo ionice -c3 nice -n19 ${RSYNC} --bwlimit=10000" \
--log-file=$LOGFILE [email protected]:"${1}" "${DESTINATION}${2}"
}
Rsync 配置为不要求在服务器端输入密码。
有人知道为什么会发生这个错误吗?
谢谢
答案1
在@dawud 的帮助下发现问题在于打开的文件数量超出了 SO 限制,因此为了避免更改 SO 配置,我决定更改我的脚本以同步单个目录(结果将是相同的)。
所以我的新脚本是:
synchronize() {
echo [email protected]:"${1}" "${DESTINATION}${2}"
echo $USER | $RSYNC -azvP --delete --rsync-path="sudo ionice -c3 nice -n19 rsync --bwlimit=10000" \
--log-file=$LOGFILE [email protected]:"${1}" "${DESTINATION}${2}" 2>&1 1> /dev/null
}
synchronize_list() {
directories_list=($(ssh [email protected] ls "${1}"))
for i in "${directories_list[@]}"; do
echo "SYNC DIRECTORY: ${i}"
synchronize "${1}/${i}" "${i}"
done
}
synchronize_list "/home" "home/"
我希望这段代码能帮助到你们。
谢谢。