2008-10-10 5 views
2

У меня есть очень большой (~ 6 ГБ) SVN-репозиторий, для которого я написал скрипт пакетного файла, чтобы делать инкрементную резервную копию каждый день. Скрипт проверяет, когда была запущена последняя резервная копия, и сбрасывает только изменения с тех пор.Восстановить резервные копии SVN из нескольких файлов

Файлы названы: backup-{lower_revision}-{higher_revision}.svn например: backup-156-162.svn, backup-163-170.svn.

Это означает, что у меня довольно много небольших файлов дампа, которые, я думаю, хороши (лучше, чем много файлов дампа на 6 ГБ), но меня немного беспокоит, сколько работы было бы восстановить из этих резервных копий мне нужно.

Чтобы уменьшить общее количество файлов, я сделал полный сброс в первый месяц каждого месяца, но все же, мне нужно восстановить 30-го числа, это будет 30 дамп-файлов, которые могут в то время как.

То, что я рассматривал это:

  • Руководство:
    svnadmin load c:\myRepo < backup-1-10.svn
    ждать
    svnadmin load c:\myRepo < backup-11-24.svn
    ждать
    и т.д ...
  • Пакетный файл, чтобы сделать выше процесс немного менее утомительный
  • Добавляя каждый из файлов вместе и делать одну нагрузку (если это вообще возможно?)

Что бы лучший способ работать с этими файлами, мне нужно восстановить?

PS: ОС Windows,

ответ

5

Вы должны переименовать свои файлы только путем нумерации дня [01, 02, .. 31], чтобы ваши файлы можно было легко сортировать. Для дампа не важно знать, какие ревизии находятся внутри.

я следую другой подход, потому что загрузка назад огромный Repo как это занимает некоторое время, так что вы должны учитывать следующее:
Вы можете использовать svnadmin HotCopy для hotcopying хранилище каждую неделю/каждый месяц. Каждый день вы должны сделать инкрементный дамп для получения последних изменений для получения последних изменений нужно просто позвонить
svnlook младший [live_repo] -> дает Вам самую последнюю версию вашего живого хранилища

svnlook youngest [copied_repo] -> дает вам последнюю ревизию, которую вы скопировали с помощью еженедельной hotcopy

Теперь вы можете запустить дамп из своего живого репо с использованием обоих номеров ревизий.
Преимущество:

  • намного быстрее, чтобы получить резервное копирование хранилища и работаю снова (сброс занимает несколько часов!)
  • меньше дампы
  • меньше скриптовых усилия
  • расширяемых до «за совершением» -backups через post-commit-hook, так что вы будете игнорировать nerver
+1

ах, это неплохо! – nickf 2008-10-11 14:25:51

3

Независимо от того решения, которое вы придумали, я определенно рекомендовал бы делать пробное восстановление. Таким образом, вы можете убедиться, что процесс выполняет то, что вы действительно хотите, и что вы сможете успешно завершить его, когда вам нужно использовать его в гневе.

Я бы попробовал ваш процесс, как вы его прямо сейчас, и если процесс терпимый, как есть, то проще лучше и не смущайтесь с ним. Если это похоже на большую работу, то непременно посмотрите на возможности оптимизации.

+0

хорошо проблема заключается в том, что я на самом деле не имею процесс еще - я пытаюсь начать с наилучшего :) – nickf 2008-10-10 07:58:44

+0

Правильно, вы описываете, как создаются ваши файлы резервных копий (и их у вас их много), поэтому вы должны частично работать с процессом. – 2008-10-10 08:02:01

0

Я бы предложил запустить команду дампа каждый день и просто сохранить последние 5 дампов. Это 30 концертов для вас.

Вот скрипт для запуска автоматических отвалов, которые я использую, но я вручную удалить резервные копии:

 
::This script backs up the subversion repository. 

::Reset Temp backup storage 

rmdir /S /Q C:\SVNBACKUP 
mkdir C:\SVNBACKUP 

::Initiate SVN backup. Use svadmin hotcopy 
svnadmin dump /svn/myProj1 > /home/username/myProj1Bak 

for /f "tokens=2-4 delims=/ " %%g in ('date /t') do (
    set mm=%%g 
    set dd=%%h 
    set yy=%%i 
) 

if exist "\\networkdrive\Clients\SVN\%mm%-%dd%-%yy%" (
    rd /S /Q "\\networkdrive\Clients\SVN\%mm%-%dd%-%yy%" 
) 

xcopy "/home/username/myProj1Bak" "\\networkdrive\Clients\SVN\%mm%-%dd%-%yy%" /s /i 
0

команды Питера является на самом деле:

svn look youngest [live_repo] 
svn look youngest [copied_repo] 
Смежные вопросы