我正在进行服务器迁移并遇到以下问题:
我正在运行 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 中包含空格或特殊字符,则需要更加小心地引用上述内容。