
서버 마이그레이션을 진행 중인데 다음과 같은 문제가 발생했습니다.
모든 데이터를 마이그레이션하기 위해 rsync를 실행하고 있는데 어떤 이유로 폴더 깊이 제한이 있습니다... 이 작업은 rsync over ssh 명령을 통해 수행됩니다.
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는 다른 쪽으로 보내고 거기에서 파일을 untar합니다.
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에 공백이나 특수 문자가 있는 경우 위의 내용을 좀 더 주의 깊게 인용해야 합니다.