INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / Thingiverse / RSS / GPG

Чистим SVN репозиторий от старых проектов

№ 6154 В разделе "Sysadmin" от April 8th, 2014,
В подшивках: ,

И вот, пришло время почистить 43 гигабайтный репозиторий от старого хлама, перенеся рабочие ветки в новый репозиторий, а старый сделать архивным и только для чтения. Настолько огромный SVN репозиторий ежедневно бэкапить становится реально проблемно. Кстати, о бэкапе таких огромных репозиториев я рассказывал в другой статье. Процедура разделения на отдельные проекты для такого объема очень долгая и поэтому вторую часть я автоматизировал. А вот с первой проблема.

Часть первая. Муторная.

Чтобы оно заработало как надо необходимо сначала найти ошибочные ревизии. Находятся они экспериментально при попытке дампа. Сначала создайте на разделе в достаточным количеством места (нужно примерно раза в 2 больше, чем весит оригинальный репозиторий) временную директорию (например, /mnt/disk_3tb/tmp/) и в ней еще директории orig и filtered. Также во временной директории создайте новый репозиторий ]# svnadmin create mynewrepo. Если вы хотите несколько новых репозиториев с разными проектами – создавайте несколько. Мне нужен только один и поэтому делаю только для одного.

Чтобы избежать проблем сделайте проверку оригинального репозитория
]# svnadmin recovery

0 – первая ревизия, а HEAD – это последняя. Теперь создаем дамп, которым ищем “битые” ревизии.
]# svnadmin dump --incremental -r0:HEAD /var/svn_repos/myoldrepo > /mnt/disk_3tb/tmp/myrepo.dump

В процессе дампа у вас могут появиться ошибки. Если они не появились, то это просто супер (у меня их было дохрена и больше) и полученый дамп переместите в ./orig внутри временной директории и переходите ко второй части статьи. А вот если появились, то давайте разбираться дальше.

Как определить какая ревизия “битая”? А вот пример, где я делаю дамп от ревизии 7490 до 7505:

]# svnadmin dump --incremental -r7490:7505 /var/svn_repos/myoldrepo > /mnt/disk_3tb/tmp/myrepo.dump
* Dumped revision 7490.
* Dumped revision 7491.
* Dumped revision 7492.
* Dumped revision 7493.
* Dumped revision 7494.
* Dumped revision 7495.
* Dumped revision 7496.
* Dumped revision 7497.
* Dumped revision 7498.
svnadmin: Decompression of svndiff data failed
]#

Вы видите, что 7498 была сдамплена и программа была прервана на 7499. Это и есть “битая” ревизия. Запишите ее куданибудь. Чтобы продолжить поиск нужно пропустить ошибочную ревизию и начать со следующей. В моем примере это ]# svnadmin dump --incremental -r7500:HEAD /var/svn_repos/myoldrepo > /mnt/disk_3tb/tmp/myrepo.dump.

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

]# svnadmin dump --incremental -r0:7498 /var/svn_repos/myoldrepo > /mnt/disk_3tb/tmp/orig/01_myrepo_0-7498.dump
]# svnadmin dump --incremental -r7500:8342 /var/svn_repos/myoldrepo > /mnt/disk_3tb/tmp/orig/02_myrepo_7500-8342.dump
]# svnadmin dump --incremental -r8344:HEAD /var/svn_repos/myoldrepo > /mnt/disk_3tb/tmp/orig/03_myrepo_8344-HEAD.dump

Итак, было найдено 2 ошибки и в директории orig создано 3 дампа от 0 ревизии до самой последней. Проследите, чтобы дампы шли по порядку. Если надо, то добавьте цифры в начало имен файлов как у меня в примере чуть выше. Первая часть завершена.

Эта запись разделена на части:

Нет комментариев »

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Яндекс.Метрика

Fortune cookie: Today's spam: Don't Be Ashamed Of Your Manhood Ever Again.