mkdir test
echo "hi" > test/file1
tar -c -f archive.0.tar -g test.snar test
touch -a test/file1 # changes atime and ctime, doesn't change mtime
tar -c -f archive.1.tar -g test.snar test
tar -t -G -vv -f archive.1.tar # lists Y for file1
그렇다면 GNU tar는 접근 시간(atime)과 메타데이터 변경 시간(ctime)만 변경되어도 파일 전체를 다시 저장하는 걸까요? 나에게 이것은 많은 파일이 읽히지만 변경되지 않을 것이라고 합리적으로 기대할 수 있기 때문에 이것은 매우 비효율적으로 보입니다.
답변1
증분 백업 에는 gtar
신뢰할 수 없지만 타임스탬프를 잘못 처리한 결과는 아닙니다.
사용자 영역에서 작동하는 모든 백업 도구는 예를 들어 내부 파일 시스템 구조를 검사할 수 없으며 zfs send
동일한 방식으로 타임스탬프를 처리해야 합니다. 그렇지 않으면 올바른 증분 백업을 허용할 수 없습니다.
atime
파일이 수정되었는지 여부가 아니라 파일을 읽었다는 메시지만 표시하므로 백업과는 아무 관련이 없습니다.mtime
언뜻 보면 흥미로워 보일 수도 있지만 중요하지 않습니다. 이는mtime
파일 값이 사용자 공간 프로그램에 의해 임의의 값으로 설정될 수 있기 때문입니다 .ctime
이는 조작할 수 없는 유일한 타임스탬프이므로 증분 백업에 중요한 유일한 타임스탬프입니다.
ctime
콘텐츠나 메타데이터는 조작되거나 업데이트될 수 없으므로 ctime
백업 도구는 업데이트될 때마다 파일 콘텐츠와 파일 메타데이터를 보관해야 합니다 ctime
.
따라서 변경되지 않은 것처럼 보이는 파일 mtime
에도 여전히 내용이 수정되었을 수 있으므로 백업에 있어야 합니다.
마지막으로: GNU tar는 귀하가 요청한 방법을 구현하지 않습니다. 동작은 하드코딩되어 있습니다.
star
그러나 증분 백업을 시도할 수 있도록 2004년에 만들어진 옵션을 제공합니다 -dumpmeta
. star
하지만 이 옵션 사용에 대한 명시적인 경고가 있습니다. 매뉴얼 페이지를 참조하세요.
-dumpmeta 증분 덤프 모드에서 스타의 동작을 변경합니다. -dumpmeta가 사용되고 마지막 증분 덤프 이후 파일의 inode 변경 시간(st_ctime)만 업데이트된 경우 star는 파일 내용이 아닌 파일의 메타데이터(uid, 권한 등)만 아카이브합니다. -dumpmeta를 사용하면 델타 덤프가 더 작아지지만 두 델타 사이에 생성되고 st_mtime이 이전 날짜로 설정된 파일(예: tar 추출의 결과)은 전체 내용과 함께 보관되지 않습니다. 따라서 -dumpmeta를 사용하면 불완전한 증분 덤프가 발생할 수 있으므로 주의해서 사용해야 합니다.
star
기본 방식은 1981년경부터 ufsdump
사용된 방식 ufsrestore
으로 2005년 2월부터 사용된 방식이며 star
, 이들 프로그램을 이용하여 증분 백업을 복원하는데 문제가 있었던 적은 한번도 없었다.