Robocopy는 파일 시스템 링크(기호 링크, 하드 링크 및 접합)를 어떻게 처리합니까?

Robocopy는 파일 시스템 링크(기호 링크, 하드 링크 및 접합)를 어떻게 처리합니까?

Robocopy 백업을 삭제해도 안전합니까? 일부 사람들은 링크/접합이 포함되어 있기 때문에 백업 외부의 파일을 실수로 삭제했다는 내용을 읽었습니다. 이것을 방지할 수 있나요?

답변1

그만큼로보카피 문서파일 시스템 링크와 관련된 Robocopy의 동작을 제어하는 ​​옵션을 나열합니다.

/sl 심볼릭 링크를 따르지 말고 대신 링크의 복사본을 만듭니다.
/xj 일반적으로 기본적으로 포함되는 연결 지점을 제외합니다.
/xjd 디렉터리의 연결 지점을 제외합니다.
/xjf 파일의 연결 지점을 제외합니다.

Robocopy가 이러한 옵션을 사용하거나 사용하지 않고 어떻게 작동하는지 알아보기 위해 배치 스크립트를 만들었습니다. 그것은 사용한다mlink. 를 사용하면 mlink다음을 만들 수 있습니다.

  • 파일 및 디렉터리에 대한 기호 링크.
  • 파일에 대한 하드 링크. 디렉터리에 대한 하드 링크를 만들려고 하면 오류가 발생합니다.
  • 디렉토리에 대한 링크인 접합. 파일에 대한 연결을 만들려고 하면 성공하지만 연결이 끊어집니다.

기호 링크는 대상 매개변수를 전달하는 방법에 따라 상대적이거나 절대적일 수 있습니다. 하드 링크와 교차점은 상대 목표를 통과하더라도 항상 절대적입니다.

@echo off
set home=C:\my-directory
cd %home%
mkdir robocopy-source
cd robocopy-source
mkdir a
mkdir b
copy NUL b\foo.txt
cd a
mklink /j junction-dir-absolute %home%\robocopy-source\b\
mklink /d symlink-dir-absolute %home%\robocopy-source\b\
mklink /d symlink-dir-relative ..\b\
mklink /h hardlink-file-absolute %home%\robocopy-source\b\foo.txt
mklink symlink-file-absolute %home%\robocopy-source\b\foo.txt
mklink symlink-file-relative ..\b\foo.txt
cd %home%
robocopy robocopy-source robocopy-target /mir /dcopy:dat
robocopy robocopy-source robocopy-target-sl /mir /dcopy:dat /sl
robocopy robocopy-source robocopy-target-xj /mir /dcopy:dat /xj
robocopy robocopy-source robocopy-target-xjd /mir /dcopy:dat /xjd
robocopy robocopy-source robocopy-target-xjf /mir /dcopy:dat /xjf

사용하여링크 셸 확장, 이제 무슨 일이 일어났는지 확인할 수 있습니다.

정보
robocopy-source\a\junction-dir-absolute %home%\robocopy-source\b\에 대한 링크
robocopy-source\a\symlink-dir-absolute %home%\robocopy-source\b\에 대한 링크
robocopy-source\a\symlink-dir-relative ..\b\에 대한 링크
robocopy-소스\a\hardlink-파일-절대 %home%\robocopy-source\b\foo.txt(및 자체)에 대한 링크
robocopy-소스\a\symlink-파일-절대 C:\Users\Marco\Desktop\Linktest\robocopy-source\b\foo.txt에 대한 링크
robocopy-source\a\symlink-파일-상대 ..\b\foo.txt에 대한 링크
robocopy-대상\a\junction-dir-절대 %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-target\a\symlink-dir-absolute %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-target\a\symlink-dir-relative %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-대상\a\hardlink-파일-절대 빈 파일
robocopy-대상\a\symlink-파일-절대 빈 파일
robocopy-target\a\symlink-파일 상대 빈 파일
robocopy-대상-sl\a\junction-dir-absolute %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-대상-sl\a\symlink-dir-절대 %home%\robocopy-source\b\에 대한 링크
robocopy-대상-sl\a\symlink-dir-relative ..\b\에 링크
robocopy-대상-sl\a\hardlink-파일-절대 빈 파일
robocopy-대상-sl\a\symlink-파일-절대 %home%\robocopy-source\b\foo.txt에 대한 링크
robocopy-대상-sl\a\symlink-파일-상대 ..\b\foo.txt에 대한 링크
robocopy-대상-xj\a\junction-dir-absolute 존재하지 않는다
robocopy-대상-xj\a\symlink-dir-절대 존재하지 않는다
robocopy-target-xj\a\symlink-dir-relative 존재하지 않는다
robocopy-대상-xj\a\hardlink-파일-절대 빈 파일
robocopy-대상-xj\a\symlink-파일-절대 존재하지 않는다
robocopy-target-xj\a\symlink-파일-상대 존재하지 않는다
robocopy-대상-xjd\a\junction-dir-absolute 존재하지 않는다
robocopy-대상-xjd\a\symlink-dir-절대 존재하지 않는다
robocopy-target-xjd\a\symlink-dir-relative 존재하지 않는다
robocopy-대상-xjd\a\hardlink-파일-절대 빈 파일
robocopy-대상-xjd\a\symlink-파일-절대 빈 파일
robocopy-target-xjd\a\symlink-파일-상대 빈 파일
robocopy-target-xjf\a\junction-dir-absolute %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-target-xjf\a\symlink-dir-absolute %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-target-xjf\a\symlink-dir-relative %home%\robocopy-source\b\의 복사된 콘텐츠가 있는 디렉터리
robocopy-대상-xjf\a\hardlink-파일-절대 빈 파일
robocopy-대상-xjf\a\symlink-파일-절대 존재하지 않는다
robocopy-target-xjf\a\symlink-파일-상대 존재하지 않는다

이 옵션을 사용하지 않은 이상 /slRobocopy로 생성된 백업을 삭제하는 것이 안전할 것이라고 결론을 내렸습니다. 그러나 이 옵션을 사용한 경우 /sl절대 기호 링크로 인해 문제가 발생할 수 있습니다.del명령 을 사용할 때.

추가 관찰:

  • 하드 링크는 항상 빈 파일을 생성합니다.
  • 옵션은 /xjd디렉토리에 대한 링크를 건너뜁니다. 문서에서 암시하는 것 외에 접합점뿐만 아니라 기호 링크도 건너뜁니다!
  • 옵션은 /xjf파일 링크를 건너뜁니다. 문서에서 암시하는 것 외에는 파일에 대한 접합을 건너뛰지 않습니다(어쨌든 존재하지 않는 것), 그러나 심볼릭 링크!
  • 옵션은 및 를 /xj결합합니다 ./xjd/xjf

나는 다음을 신고했다.문서에 문제가 있다.

바로가기(.lnk 파일)에 관한 보너스 정보

바로가기는 Robocopy에서 일반 파일처럼 처리됩니다.~ 할 것이다일반적으로 백업 디렉터리 외부를 가리킵니다. 그러나 일반적으로 다른 명령줄 프로그램에서도 일반 파일처럼 처리됩니다. 명령 프롬프트와 del /s /qMINGW64 셸에서 이것을 확인했는데 모두 바로 가기를 따르지 않으므로 의도하지 않은 삭제가 발생하지 않습니다.rmdir /s /qrm -rf

관련 정보