tar: 증분 아카이브 선택 시 잠재적인 오류(?) - 대상에서 파일 삭제

tar: 증분 아카이브 선택 시 잠재적인 오류(?) - 대상에서 파일 삭제

나는 매우 흥미로운 관찰을 했습니다. 이것은 나쁜 표현일 수도 있습니다.

내 사용 사례는 다음과 같습니다

  • 폴더를 백업하고 해당 폴더의 파일 세트를 --exclude-from 파일에 추가합니다. 증분 백업(-g 옵션 세트)을 사용하고 있습니다.
  • 새 머신에서 tar를 원래 머신과 동일한 위치로 복원합니다. 새 시스템에는 이미 이 위치에 일부 파일이 있습니다. 파일이 있으면 교체/덮어쓰고 싶습니다.

재현 단계

  1. 다음과 같이 파일 및 폴더 구조를 만듭니다.

    /tmp/src
    └── etc
        ├── A.cfg
        └── config
            ├── 1.cfg
            ├── 2.cfg
            └── 3.cfg
    
  2. 제외 및 포함 파일 만들기

    mbp:tarTests jhartman$ cat /tmp/include.cfg
    /tmp/src/etc/
    mbp:tarTests jhartman$ cat /tmp/exclude.cfg
    /tmp/src/etc/config/*.cfg
    
  3. 프로필 만들기

    $ rm -f /tmp/snapshot 
    $ tar -g /tmp/snapshot -cvz -f /tmp/test.tar.gz -X /tmp/exclude.cfg -T /tmp/include.cfg
    
    
    ./tar-1.27/src/tar: /tmp/src/etc: Directory is new
    ./tar-1.27/src/tar: /tmp/src/etc/config: Directory is new
    ./tar-1.27/src/tar: Removing leading `/' from member names
    /tmp/src/etc/
    /tmp/src/etc/config/
    /tmp/src/etc/A.cfg
    
  4. 새 서버에 대한 보관을 취소합니다. 보관 취소 전 새 서버의 파일:

    /tmp/src
    └── etc
        ├── A.cfg
        └── config
            ├── 3.cfg
            ├── 4.cfg
            └── 5.cfg
    
    • 보관 취소(대상 컴퓨터에서)

      $TAR_BASE/src/tar --overwrite --extract --force-local --listed-incremental=/dev/null --file /tmp/test.tar.gz -v -C /
      
      tmp/src/etc/
      tmp/src/etc/config/
      ./tar-1.30/src/tar: Deleting ‘tmp/src/etc/config/4.cfg’
      ./tar-1.30/src/tar: Deleting ‘tmp/src/etc/config/5.cfg’
      tmp/src/etc/A.cfg
      

따라서 궁극적으로 해당 폴더의 파일은 다음과 같습니다.

/tmp/src
└── etc
    ├── A.cfg
    └── config
        └── 3.cfg

보시다시피 소스 머신에는 4.cfg없지만 5.cfg사라졌습니다. 나는 이것이 /tmp/src/etc/config/*.cfg제외 파일에서의 사용 때문이라고 생각합니다 .

이 동작은 버전에 따라 변경된다는 점을 언급할 가치가 있습니다. 1.30, 1.27, 1.27.1, 1.29 - NOK, 1.25, 1.26, 1.28 - OK(NOK는 파일 메시지에 관심 있는 항목을 제거할 수 있음을 의미합니다).

어떻게 생각하나요?

고마워요, 야릭

업데이트 날짜: 2018-08-21, 20:51

어떤 버전을 실행하든 --list작업 결과는 동일하며 다음과 같이 표시됩니다.config폴더 에서 :

tar --list --incremental --verbose --verbose --file /tmp/test.tar.gz

drwxr-xr-x jhartman/staff   16 2018-08-21 20:44 tmp/src/etc/
Y A.cfg
D config

drwxr-xr-x jhartman/staff   22 2018-08-21 20:44 tmp/src/etc/config/
N 1.cfg
N 2.cfg
N 3.cfg

-rw-r--r-- jhartman/staff   30 2018-08-21 20:44 tmp/src/etc/A.cfg

업데이트 날짜: 21:03

참고로 제가 테스트에 사용한 스크립트는https://github.com/jaroslawhartman/tar-tests환매.

output.txt자세한 테스트 결과는 참고자료를 참조하세요 .

관련 정보