증분 백업에서 기호 링크를 복사할 때 예기치 않은 동작이 발생할 수 있습니다. 예를 들어:
# mkdir 0 1 2
# touch 0/a
# ln 0/a 0/b
# touch 1/a
# ln 1/b 1/a
그래서 디렉토리는 0
다음과 같습니다
a
b->a
디렉토리는 1
다음과 같습니다
a->b
b
이제 우리는 달린다
# cp -a 0/. 2
# cp -a 1/. 2
예상/예상되는 동작은 디렉토리가 2
동일 1
하지만 실제로는 두 개의 링크를 포함한다는 것입니다
a -> b
b -> a
이것은 실제로 /usr/ 디렉토리의 일부 rsync 백업을 복사할 때 발생했습니다. 작년에 /usr/share/zoneinfo 디렉토리는 다양한 심볼릭 링크 스위치를 거쳤습니다. cp -a
SOURCE에서는 심볼릭 링크를 따르지 않지만 DEST에서는 심볼릭 링크를 따를 수 있는 것 같습니다 .
여기서 적절한 결과를 얻을 수 있는 방법이 있나요?
(그런데, rsync
올바르게 완료되었지만 플래그도 사용하고 싶었습니다 --reflink=always
...)cp
답변1
이렇게 하면 먼저 실행되지만 cp -a 1/. 2
이미 존재하므로 내용이 기록됩니다 . 그러면 심볼릭 링크를 덮어쓰게 된다는 점을 고려하세요 . 다시 실행 하면 .b
b -> a
b
a
a->b
a
a->b
cp -a 1/. 2
"Too many levels of symbolic links"
예, cp
대상의 심볼릭 링크를 따르십시오. --remove-destination
MWE의 문제를 해결해 볼 수 있습니다 . 그러나 심볼릭 링크를 대상의 디렉터리 구성 요소로 포함하면 포함되지 않습니다 --remove-destination
.
진짜 질문은 "왜 이런 일을 하시겠습니까?"입니다. 저는 단지 cp -a
빈 디렉토리를 대상으로 사용합니다. 또한 지원되는 파일 시스템에는 --reflink=always
디렉터리 트리를 백업으로 복제하는 보다 우아한 방법이 있습니다.