№ 6154 В разделе
Sysadmin
от April 8th, 2014,
В подшивках: Linux, SVN
И вот, пришло время почистить 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 ревизии до самой последней. Проследите, чтобы дампы шли по порядку. Если надо, то добавьте цифры в начало имен файлов как у меня в примере чуть выше. Первая часть завершена.
Эта запись разделена на части:
- Часть 1
- Часть 2
Fortune cookie: Tex SEX! The HOME of WHEELS! The dripping of COFFEE!! Take me to Minnesota but don't EMBARRASS me!!
Leave a Reply