Rsync 超过 ssh 文件夹深度限制吗?

Rsync 超过 ssh 文件夹深度限制吗?

我正在进行服务器迁移并遇到以下问题:

我正在运行 rsync 来迁移所有数据,但由于某种原因,文件夹深度存在限制...这是通过 ssh 命令上的 rsync 完成的:

rsync -raz --verbose --update --delete --exclude-from 'rsync-exclude.txt' /home 192.168.70.50:/

70.50 是新服务器,我在旧服务器上运行命令。文件夹结构非常深,最多有 20 个文件夹深。

因此,大多数文件和文件夹都会被复制,但文件夹深度 10 及以上的所有文件和文件夹都不会被复制。如果我指定更深的文件夹

rsync -raz --verbose --update --delete --exclude-from 'rsync-exclude.txt'/home/user/blablabla/domain/web to 192.168.70.50:/home/user/blablabla/domain

它开始递归复制剩余的文件夹......

有谁能解决这个问题?

答案1

rsync 对遍历的子目录深度没有限制。更具体地说,它超出了 Linux 文件系统的限制。我刚刚复制了大约 500 层深的内容,rsync 复制得很好。

如果您遇到此问题,请检查以下内容:

  • 目标文件系统是否无法处理那么多子目录?
  • 目的地已经满了吗?
  • --exclude-from 文件是否指定了限制文件的内容?
  • 路径的总长度(“d/d/d/d”有 4 级但有 7 个字符)是否超出了文件系统允许的长度?
  • 关闭增量递归是否可以使其工作? --no-inc-recursive(这是一个较新的算法,您可能发现了一个错误)
  • 复制是否可以采用其他技术进行?
  • 通过(或不通过)压缩,问题是否会消失?-z

这是另一种可以尝试的技术。如果它有效,但rsync不起作用,那么您可能发现了一个错误rsync

这会将tar文件放在一边,将 tar 文件发送到 stdout,通过 ssh 连接到另一端并在那里解压文件。

SOURCEDIR=/path/to/source
DESTHOST=machinename
DESTDIR=/path/to/destination
cd "$SOURCEDIR" && tar -c -v -f - . | ssh "$DESTHOST" "cd $DESTDIR && tar -x -p -f -"

警告:如果 $DESTDIR 中包含空格或特殊字符,则需要更加小心地引用上述内容。

相关内容