나는 이 질문에 대해 많은 사이트에서 단편적인 답변을 받았을 것이라고 확신합니다. 그러나 어쨌든 나는 이 질문이 (전체적으로) 안정적으로 작동하도록 할 수 없는 것 같습니다.
시나리오: 증분 백업을 수행하려는 서버가 있습니다(매일 그것에 대해 생각합니다).
백업하려는 파일과 디렉터리는 /home/
다음 디렉터리에 있습니다 /srv/samba/
.
/mnt/backup/
백업은 디렉토리 에 대한 .tar.gz여야 하며 파일 이름은 inc_backup_yyyymmdd.tar.gz
.
.tar.gz를 성공적으로 생성한 후 ssh를 사용하여 파일을 외부 서버로 보내야 합니다.
이제 서버는 일주일에 한 번씩 전체 백업을 생성하고 무작위 간격으로 수동으로 오프사이트로 보냅니다(.tar.gz의 크기는 약 60GB이므로 시간이 좀 걸립니다...).
이상적으로는 .tar.gz 일반 파일과 폴더만 원합니다. .로 시작하는 파일 및 ~ 및 .로 시작하는 디렉토리는 제외되어야 합니다.
한 가지 예외가 있습니다: 및 폴더
에는 백업에 포함되어야 하지만 파일 제외를 적용해야 하는 ".recycle" 폴더가 있습니다./home/[user]/
/srv/samba/[someshare]/
예를 들어
/home/user/.hiddendirectory/ (excluded)
/home/user/.hiddendirectory/myfile.txt (excluded)
/home/user/myfile.txt (included)
/home/user/.myfile.txt (excluded)
/home/user/~myfile.txt (excluded)
/home/user/mydirectory/myfile.txt (included)
/home/user/.recycle/ (included)
/home/user/.recycle/~tmpfile (excluded)
/home/user/.recycle/.myfile (excluded)
/home/user/.recycle/myfile.txt (included)
나는 find를 사용하기 시작했습니다.
다음 명령에는 비표준 연산자(-not, -or)가 포함되어 있으므로 사용하는 경우 시스템이 이를 지원하는지 확인하십시오.
find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1
필요한 파일과 폴더를 찾는 것 같습니다. 그런데 즉시 tar로 옮기면 모든 제외 사항을 무시하는 것 같나요?
find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 -print0 | tar -zcvf /tmp/testbackup1.tar.gz --null -T -
다음을 사용하여 올바른 결과를 얻는 것 같습니다.
find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 -print0 | tar -Avf /tmp/testbackup1.tar | gzip -c /tmp/testbackup1.tar > testbackup1.tar.gz
...하지만 이것은 지나치게 복잡해 보이고 큰 타르 크기에도 불구하고 빈 타르볼이 생성됩니까? 이 중 어느 것도 .recycle 포함을 고려하지 않습니다.
추가 보너스는 보안 강화를 위해 암호화된 tar.gz입니다.
SSH를 사용하여 파일을 보내는 것은 쉬운 부분입니다.
내 생각은 Cron이 실행할 스크립트 파일에 넣는 것입니다.
이 스크립트는 다음을 수행합니다.
- 백업 파일 생성(이름 지정 프로세스 처리)
- SSH를 통해 백업 파일을 외부 서버로 보내기
- .recycle 디렉토리에서 오래된 파일(예: 2주) 삭제
(내부) 전체 백업은 매월 수행되며 오래된 백업 파일의 정리도 처리됩니다(2개월).
따라서 2개의 전체 백업과 약 60개의 증분 백업이 생성됩니다. 전체 백업이 삭제되면 증분 백업(증분 백업이라고 함)도 삭제됩니다. 모든 백업 파일은 온사이트와 오프사이트 모두에 위치합니다.
어떤 제안(완전히 새로운 방법이라도)을 주시면 대단히 감사하겠습니다!
미리 감사드립니다!