Index
Project Maintenance Service
*О сервисе *Новости *Проекты *Пользователи *Справочная
pms
О проекте
НовостиRSS
СтатьиRSS
Каталог статей
Команда
Багтреккер
Найти сообщение
Секции
Контрольные точки

Резервное копирование и создание зеркала svn-хранилища

Опубликовал: shade
Дата публикации: 01.09.2007
Дата правки: 07.09.2007
Промотров: 7520
© Золотов Алексей, 2007 г.

Абстракт

В данной статье рассматриваются методы резервного копирования и создания зеркала svn-хранилища.

Два пути

Для создания резервной копии svn-хранилища можно пойти двумя путями:
1. использовать утилиту svnadmin
2. создать зеркало хранилища

В первом случае потребуется непосредственный доступ к файлам хранилища, т.к. svnadmin не может работать через сеть, второй способ может использоваться для создания копии любого хранилища, т.к. не требует непосредственного доступа к файлам.

Способ 1. Резервное копирование

Копию хранилища можно получить и простым копированием хранилища, но тогда нужно быть уверенным что в момент копирования не будет производиться записи, иначе рискуете нарушить целостность копии. Чтобы не останавливать сервер можно использовать «горячее» копирование. Для этого в утилите svnmadin есть команда hotcopy:
code:
svmadmin hotcopy SRC_PATH DEST_PATH

где SRC_PATH - путь к исходному хранилищу, DEST_PATH - путь к создаваемой копии. В данном случае svnadmin сам побеспокоиться об целостности копии и исходного хранилища.

Этот метод обладает одним недостатком. Если в качестве базы данных хранилища используется Berkeley DB, то её файлы платформно-зависимы. Специально для этого в svnadmin добавили команды dump и load, которые работают с платформно-независимым форматом образа хранилища. Также создание/восстановление такого образа является гарантированным методом перехода на новые версии subversion.

Для создания образа хранилища в простейшем случае нужно выполнить команду
code:
svnadmin dump REPOS_PATH > DUMP_PATH

где REPOS_PATH - путь к хранилищу, DUMP_PATH - путь к создаваемому образу. Образ хранилища выводиться на стандартный вывод, поэтому мы в команде используем перенаправление в файл. Данная команда запишет в файл образы всех правок, поэтому такой образ будет очень большим. Чтобы уменьшить размер можно попросить svmadmin сохранять вместо полных образов правок, только их изменения:
code:
svnadmin dump --deltas REPOS_PATH > DUMP_PATH

Тогда размер образа будет меньше, но за это придется расплатиться скоростью создания образа и его восстановления.

Восстановить хранилище из образа можно командой:
code:
svnadmin load REPOS_PATH < DUMP_PATH

где REPOS_PATH путь к восстанавливаемому хранилищу (должно быть пустым), DUMP_PATH путь к ранее созданному образу.

Образ можно создавать по частям, более подробно читайте в книге «Управление версиями в Subversion» она выпущена на условиях Creative Commons Attribution License, поэтому без проблем можно найти в сети электронную версию, в частности на официальном сайте:
http://svnbook.red-bean.com/

Способ 2. Создание зеркала

Для создания зеркала потребуется svn-клиент версии не ниже 1.4, а именно утилита svnsync, которая появилась в версии 1.4. Она используется для создания и синхронизации зеркала хранилища, которое можно использовать и в качестве резервной копии: вы создаете у себя на локальной машине зеркало хранилища и периодически его синхронизируете с основным. В результате у вас будет копия хранилища, которую вы можете записать на CD/DVD диск или другой носитель информации. Восстановить хранилище на удаленном сервере можно аналогичным способом или с помощью svnadmin. В любом случае нужен непосредственный доступ к восстанавливаемому хранилищу.

Для создания зеркала нужно создать обычное пустое svn-хранилище с помощью утилиты svnadmin:
code:
svnadmin create /path/to/new/mirror

После создания пустого хранилища его нужно настроить. Делается это в два шага:
1. установка обработчика pre-revprop-change разрешающего редактирование свойств правок;
2. инициализация зеркала с помощью svnsync

Шаг 1. Установка обработчика pre-revprop-change.

При синхронизация запись в зеркало осуществляется с помощью обычного svn commit (по крайней мере так думает сервер). После того, как были сохранены данные, изменяются свойства правки (дата правки, автор правки и т.п.). Свойства правки не версионируются, поэтому при не аккуратном редактировании, есть риск потерять информацию, поэтому редактирование свойств правок по-умолчанию блокируется и, чтобы разблокировать нужно установить обработчик pre-revprop-change который будет определят кто, когда и какие свойства может редактировать. Для создания зеркала на своей локальной машине, к которой никто кроме вас не имеет доступа можно создать пустой скрипт он разрешит смену любых свойств. Если нужно создать публичное зеркало, то имеет смысл ограничить число людей которые могут выполнять запись в зеркало либо с помощью настройки прав, либо с помощью скрипта. В любом случае зеркало нужно синхронизировать только с помощью svnsync и не допускать обычной записи, т.е. зеркало должно использоваться только для чтения.

Обработчик (hook) является обычным исполняемым файлом (скриптом или программой), который исполняется перед (после) выполнения соответствующего действия (в данном случае перед сменой свойства правки). Если код возврата равен нулю, то действие разрешается, если код возврата отличен от нуля, то действие блокируется. Все обработчики хранятся в папке hooks хранилища, там же лежат примеры обработчиков. Под linux, для скрипта обработчика должно быть выставлено право на исполнение. Под windows, к имени файла обработчика добавляется расширение (.bat для командных файлов и .exe для программ).

Обработчику pre-revprop-change передается 5 аргументов:
1. путь к хранилищу
2. номер правки для которой производиться смена свойства
3. имя пользовталеля, который пытается изменить свойство
4. название меняемого свойства
5. действие: 'A' добавление (added), 'M' редактирование (modified),
'D' удаление (deleted)
Значение устанавливаемого свойства можно прочесть из стандартного ввода (STDIN).

Шаг 2. Инициализация зеркала с помощью svnsync

Для инициализации зеркала нужно просто вызвать команду svnsync:
code:
svnsync init DEST_URL SRC_URL

Где DEST_URL URL инициализируемого зеркала, SRC_URL URL хранилища из которого мы делаем зеркало. Если правильно установлен обработчик pre-revprop-change и хранилище SRC_URL пустое, то инициализация должна пройти успешно.

Синхронизация зеркала

Для синхронизации зеркала нужно просто вызвать команду
code:
svnsync sync MIRROR_URL

Где MIRROR_URL URL синхронизируемого зеркала.

Комментарии пользователей

mak Добавлено: 13.08.2009 21:19
В описании Шага 2, фраза "и хранилище SRC_URL пустое" - это не ошибка?

Добавить комментарий

Bold Картинка Картинка с подписью Цитата Код Отключение BB-кодов
Меню системы
О сервисе
НовостиRSS
Справочная
Проекты
Пользователи
Вход
Регистрация
Переход к багу