정기적인 백업을 위한 파일을 가져오는 tar 명령

정기적인 백업을 위한 파일을 가져오는 tar 명령

소유권, 권한 등의 변경을 포함하여 특정 날짜 이후에 파일을 변경하지만 백업에서 단순히 복원된 파일은 제외하려면 어떤 tar 명령을 사용해야 합니까?

반면, 복원 후 모든 파일을 살펴보고 복원의 일부로 각 파일의 상태 변경 시간을 변경하는 것이 바람직합니까?

나는 주기적인 가난한 사람의 백업을 위해 특정 날짜 이후 최근에 수정된 모든 파일을 tar로 지정하기 위해 다음과 유사한 명령을 사용해 왔습니다.

$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -

이것은 실제 명령은 아니지만 제가 말하려는 요점을 보여줍니다. 이 명령은 출력을 tar 파일로 보내는 경우 tar 파일에 들어가야 하는 파일 목록을 덤프합니다.

지금까지는 하드 드라이브를 교체하고 백업에서 모든 파일을 복원할 때까지 이 명령이 제대로 작동한다고 생각했습니다. 의 출력을 보면 stat변경 날짜가 백업에서 모든 파일을 복원한 날짜인 것으로 나타나므로 이제 위의 tar 명령에서 모든 파일이 선택됩니다.

$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500

심지어 --newer-mtime도움이 되지 않는 것 같습니다.

$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -

업데이트:다음도 시도했지만 여전히 원하는 것보다 더 많은 파일을 선택했기 때문에 아무 도움이 되지 않는 것 같습니다.

$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -

답변1

디렉터리를 필터링하여 다음을 수행합니다.

$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf - | grep -v '^d'

내가 잡고 싶었던 파일이 실제로 잡히고 있다는 것을 알았습니다.

어떤 이유에서인지 tar는 타임스탬프에 관계없이 모든 디렉터리를 가져오지만 그걸로 괜찮을 것 같습니다. 따라서 위의 명령은 대부분의 경우 여전히 괜찮으며 백업을 복원할 때까지 아무 문제도 발견하지 못했습니다.

이제 복원과 관련하여 복원된 각 파일에 변경 속성이 설정된다고 언급했습니다. 따라서 --after-date다음 백업에서 모든 파일을 가져왔기 때문에 쓸모가 없었습니다.

이 문제를 해결하기 위해 복원 이후 처음으로 다음을 사용하여 전환했습니다 --newer-mtime.

$ tar cf - --newer-mtime="${SINCE} 00:00:00" . | tar tvf -

이를 통해 복원 이후 새 파일을 모두 얻을 수 있게 되었고, --after-date다음 백업부터 다시 원본을 사용할 계획입니다.

여기에는 아래에 자세히 설명된 한 가지 단점이 있습니다. 파일을 복원한 시점과 첫 번째 백업 사이에 권한이나 소유권이 변경된 경우 해당 파일을 선택하지 않으며 동일한 파일에 권한/소유권이 변경되지 않는 한 절대 선택하지 않을 것입니다. 그러면 해당 시점의 업데이트만 받게 되며 해당 시점까지의 모든 백업은 잘못된 권한/소유권으로 복원됩니다.

그만큼GNU tar 매뉴얼다음과 같이 말합니다.

파일 내용이 수정되거나 소유자, 권한 등이 변경된 경우 파일 상태가 변경된 것으로 간주됩니다.

"등등"이 무엇을 의미하는지 명확하지 않지만 그 내용도 놓치고 있습니다.

여기서 백업하는 내용을 고려하면 이에 대해 걱정하지 않으므로 이번에는 괜찮습니다. 그러나 마음에 드는 경우에는 증분 백업을 버리고 완전히 새로운 전체 백업으로 처음부터 시작할 수도 있고, --newer-mtime복원 직후에 위의 단계에 따라 하나의 증분 백업으로 복원 프로세스를 마무리할 수도 있습니다. . 후자는 사람들이 복원된 파일을 사용하기 전에 발생하므로 --after-date.

관련 정보