2011-11-13 6 views
2

Doug Hellmann의 스크립트를 사용하여 2 년 동안의 레포를 백업했으며 결국 서버 하드 드라이브를 잃어 버렸습니다. 그래서 다른 컴퓨터에서 새로운 저장소를 만들고 복구 명령을 시도했습니다.백업에서 SVN 저장소 복원

gunzip -c `ls -tr dump*` | svnadmin load /home/svn/myproject 

오직 작동하지 않습니다. 그것은 응답을 준다

<<< Started new transaction, based on original revision 917 
svnadmin: File not found: transaction '0-1', path 'MineSweeper2/src/com/bytezone/minesweeper2/Game.java' 
    * editing path : MineSweeper2/src/com/bytezone/minesweeper2/Game.java [email protected]:~/SVN backups$ 

누군가는 틀린 무엇이 틀리게 설명 할 수 있는가? 모든 증분 백업을 만들었습니다. 이것은 가장 간단한 경우입니다.

덧붙여로드를 시도하기 전에 12 개 정도의 백업 파일을 하나의 파일로 압축 할 수 있습니까?

답변

1

백업이 올바른 순서로 처리되지 않는 것 같습니다. svnadmin load은 저장소에 작성된 커 L 트를 복제하여 새 사본을 확보합니다. 그것은 파일 수정을 커밋하려고하는 것 같지만 커밋이 올바른 순서가 아니기 때문에 파일이 아직 생성되지 않았습니다.

+0

그들은 (-t 옵션으로 인해) 올바른 순서로 있어야하지만, 먼저 새 서버에 복사 했으므로 타임 스탬프가 재정렬되었을 수 있습니다. 그들 모두가 지금 같은 타임 스탬프를 가지고있는 것처럼 보이기 때문에 나는 실제로 말할 수 없다. – dmolony

+0

여러 파일을 복사 할 때 순서에 대한 고려 사항이없는 많은 복사 작업을 보았습니다. 알파벳 순서를 사용할 수 없습니까? 첫 번째 덤프를 하나씩 실행하면 어떻게됩니까? – madth3

+0

감사합니다. 각 파일을 순서대로 건 드리면 작동합니다. – dmolony

0

나는 그의 대본에서 빠른 글을 써야했다. 마지막 덤프 이후 발생한 변경 사항에 대해서만 덤프 파일을 작성한 다음 압축하는 것처럼 보입니다. 그런 경우에는

는, 그 다음 하나의 유효한 덤프를 만들 수있는 권한 위해 함께 그들을 연결하여, 모든 압축 백업 압축을 해제 할 수 있어야한다.

해당 오른쪽 순서이 중요합니다. 그는 덤프 파일의 이름에 개정 범위를 유지하는 것처럼 보이지만 개정 번호는 0으로 채워지지 않으므로 파일 이름을 정렬하면 문제가 될 수 있습니다.

백업 파일의 cdate 또는 mdate을 기반으로 덤프 파일을 정렬하는 것이 가능할 수도 있지만 위험합니다.

덤프 파일의 이름은 ${dumpfilename}-${repo_name}-${first}-${last}.${compress_ext}이므로 -을 필드 구분 기호로 사용하고 3 번째 필드를 숫자로 정렬 할 수 있습니다.

sort -t - -k3,3n 

이렇게하면 올바른 순서로 표시됩니다. 그럼 당신이 뭔가를 할 수 있습니다 물론

ls | sort -t - -k3,3n | while read backup 
do 
    bzcat $backup | svnadmin load $repos 
done 

, 그건 내가 덕 헬만의 스크립트를 시도하지 않았기 때문에 완전히 테스트되지 않은, 그러나 그것은 아주 가까이해야합니다. 다음을 수행하여 모든 것을 단일 덤프로 결합 할 수 있습니다.

ls | sort -t - -k3,3n | while read backup 
do 
    bzcat $backup >> $dumpfile 
done 

희망 사항. 또는 최소한 올바른 방향으로 보냅니다.

+0

감사합니다.시간 스탬프를 수동으로 변경하여 작업 할 수 있지만 이름이 0으로 채워진 경우 (사용자가 제안한대로) 및 복원 명령이 이름순으로 정렬 된 경우 더 쉬울 것입니다. 내가 제안한 결합 단계를 시도해 보겠습니다. – dmolony

+0

이것은 Kornshell이 ​​Bash보다 잘 작동하는 시대 중 하나입니다. Kornshell에서는'typeset'을 사용하여 변수를 고정 폭 0으로 채워진 변수로 선언 할 수 있습니다. 당신은'typeset -Z first'를 수행하고 이것이 문제를 해결할 것입니다. Bash에서는'printf'를 사용하여'first'를 0으로 채우도록 포맷 할 수 있습니다. 이것이 도움이 될 것입니다. 사소한 변화이지만 복원이 훨씬 쉬워졌습니다. 적어도 적절한 순서로 물건을 얻으려면 펑키'정렬 '을 할 필요가 없습니다. 'ls'는 자동으로 해줄 것입니다. 나는 그것을 저자에게 제안 할 것이다. –