Назад | Перейти на главную страницу

Как я могу оценить окончательный размер и время обработки, необходимое для выгрузки всего моего репо?

Предположим, что конфигурация SVN состоит из одного репо с вложенными папками проекта, примерно так:

\
 - trunk
 - - projectA
 - - - trunk
 - - - - ...
 - - - branches
 - - - - ...
 - - projectB
 - - - trunk
 - - - - ...
 - - - branches
 - - - - ...
 - ...

Все репо занимает на диске около 40 ГБ, по последним подсчетам 17605 коммитов. Теперь мне нужно извлечь один проект из репо для настройки на отдельном сервере SVN, что, как я понимаю, возможно только при использовании svnadmin dump во всем репозитории, а затем с помощью svndumpfilter чтобы выделить нужный мне проект. Я полностью ожидаю, что это займет очень много времени, чтобы закончить начальный дамп. Есть ли хорошая формула для точного расчета, сколько времени это займет и сколько места на диске потребуется для окончательного файла дампа? Кроме того, я слышал, что операция дампа использует 100% ЦП во время выполнения. Это правда?

В качестве альтернативы, есть ли лучший способ сделать это, учитывая размер репо? (За исключением простого экспорта и потери истории изменений.)

Есть ли хорошая формула для точного расчета, сколько времени это займет и сколько места на диске потребуется для окончательного файла дампа?

Чтобы избежать дискового ввода-вывода, вы можете перенаправить svndumpfilter результат к netcat.

На старом сервере SVN:

svnadmin dump /path/to/your/repo/ | svndumpfilter --drop-empty-revs --renumber-revs include single_project | nc -l 2302

и на новом сервере SVN:

svnadmin create single_project
nc IP_address 2302 | svnadmin load single_project

Я тестировал свое репо (4 ГБ, ~ 12000 ревизий), это занимает ~ 12 минут.

PS: Вы также можете использовать gzip для сжатия данных и ionice чтобы запустить это с низким приоритетом.

Это было бы очень здорово без --deltas вариант, который вы не можете использовать, когда собираетесь его фильтровать. Разумеется, необходимое время и пространство будут зависеть от производительности вашего сервера и содержимого репо.

Если вам нужно выполнить пробный прогон, чтобы увидеть использование пространства, просто отправьте его по адресу /dev/null - и, как упоминалось в @Zoredache, установите удобство процесса по мере необходимости.

Пара рекомендаций:

  • Отправьте его прямо в механизм сжатия из стандартного вывода; они хорошо сжимаются.
  • Если использование размера слишком велико для обработки (что, как я подозреваю, может быть), делайте это по частям.
    • дампить первую тысячу ревизий (svnadmin dump -r 1:1000),
    • фильтровать их,
    • загрузить в новое репо,
    • удалить первый дамп, сделать новый, промыть и повторить.