2012-05-21 4 views
9

더 많은 보안을 위해 rsnapshot이 사용하는 백업 디렉토리를 두 ​​번째 위치로 미러링하고 싶습니다. 솔루션은 ssh와 함께 rsync를 사용하는 것이 이상적입니다. (rsnapshot에 의해 생성 된) 하드 링크와 심볼릭 링크를 보존하고, 파일을 삭제하고, 재귀 적으로 복사하고, 대상의 파일을 삭제하는 등 rsync에 제공해야 할 인수는 무엇입니까? 파일은 모두 ext3 파일 시스템에 있습니다. 또한 소스가 손상되면 결함이 미러에 동기화 될 가능성을 피하기 위해 무엇을 할 수 있습니까?미러 rsnapshot 백업 디렉토리

+0

내가 초기 동기화를위한 것입니다 스크립트라는 rsnapshot도 복사가 있음을 발견 : [rsnapshot도 복사] (http://cpansearch.perl.org/src/DCANTRELL/App-Rsnapshot-1.999_00002/utils/rsnapshot-copy). 이 파일의 헤더에는 다음과 같이 쓰여 있습니다 :'rsnapshot-copy는 현재 스냅 샷의 점진적 미러링을 위해 설계되지 않았습니다. (증분 모드가 추후에 추가 될 수 있습니다.)'어떤 아이디어가 이것을 지원합니까? – highsciguy

+0

또 다른 아이디어는 rsnapshot 로그 파일을 사용하여 (아마도 먼저 내부 로깅 루틴을 수정하여) 백업의 미러 사본에 대해서도 기본 백업에서 rsync가 수행 한 동일한 mv 및 rsync 작업을 정확하게 실행하는 셸 스크립트를 만드는 것입니다 . – highsciguy

+0

조금 명확히하기 위해 정상적인 rsync에서 문제가 보이는 곳 (아래 답변 참조). rsnapshot 경로의 파일이 손상된 경우 (예 : 디스크 오류로 인해) 하드 링크를 사용하기 때문에 나중에 변경되지 않는 한 모든 최신 스냅 샷에서 손상됩니다. 이것은 파일이 손실되었음을 의미합니다. 백업의 미러 사본에 정기적 인 자동 rsync를 수행하면 결국 파일을 손상되지 않은 버전으로 미러에 덮어 씁니다. 문제는 이것을 피하는 해결책이 있는지입니다. – highsciguy

답변

6

원하는 작업을 수행하는 옵션은 대부분 rsync 매뉴얼 페이지에 설명되어 있습니다. 특히 -H 옵션 (--hard-links)은 하드 링크 감지를 활성화하고 --delete은 rsync가 소스에없는 대상에서 삭제하도록합니다. 그래서 어쩌면 같은 :

rsync -aH --delete /path/to/src/ /path/to/destination 

또한 나는 소스가 손상되었을 경우, 결함이 거울에 rsynced 있다는 가능성을 방지하기 위해 무엇을 할 수 있는가?

글쎄, 그건 까다 롭습니다. 부패를 어떻게 감지합니까? 유일한 실제 해결책은 백업 백업을 비틀어서 (즉, 기본 백업 대상으로 실제 백업을 수행 한 후 다음 백업 실행 직전에 보조 대상으로 rsync하는 것입니다). 이렇게하면 다음 번 백업을 실행해야 문제가 다시 감지됩니다.

다른 해결책은 rsnapshot을 여러 대상에 백업하는 것이므로 두 원본 위치에서 원본 원본의 백업을 실제로 생성 할 수 있습니다. 이 방법은 하나가 손상되면 두 번째는 영향을받지 않습니다.

+0

모든 옵션은 맨 페이지에 있습니다. 나는 단지 내가 무엇을 잊지 않고 있는지 확인하고 싶었다. 그러나 -a 옵션은 꽤 컴팩트 한 것 같습니다. 2 개의 목적지가 동시에 이용 가능하지 않기 때문에 2 개의 위치에 대한 rsnapshot은 가능하지 않습니다. 미러에 최신 스냅 샷을 rsync하는 것이 항상 가능하지 않습니까? 이렇게하면이 위치의 이전 스냅 샷은 기본 위치에서 손상된 경우에도 보존됩니다.물론 스냅 샷을 추가 할 때 rsnapshot이 수행하는 이름 바꾸기를 반복해야합니다. – highsciguy

1

손상된 데이터의 복사본을 방지하려면 매주 백업을 유지하고 모든 백업을 손실하기 전에 원본에서 손상이 발생했는지 확인하십시오. 가장 좋은 방법은 -c를 사용하는 것입니다. 그러면 소스와 대상의 체크 합계를 비교하여 파일을 복사할지 여부를 결정합니다. 유일한 단점은 백업을 느린 프로세스로 만드는 전체 파일을 읽어야한다는 것입니다.

#!/bin/sh 
# Create a Backup of Today 
# Definitions 
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A) 
# Delete backups from 7 days ago 
rm -rf /storage/backups/$sevendaysago 
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username 

rsync -aHvz /storage/`date --date=yesterday +\%Y-\%m-\%d`-`date --date=yesterday +\%A`/$host/$user/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/ 

rsync -acHvz -e ssh --delete --exclude='logs' [email protected]:/home/tim/ /storage/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$user/