Fedora блог
Блог посвященный моей деятельности в Федоре и вокруг неё.


Наконец-то httpd-itk в Федорке PDF Печать E-mail
Автор: Павел Алексеев aka Pahan-Hubbitus   
16.03.2012 21:35
Наконец-то свершилось, не прошло и двух лет: https://admin.fedoraproject.org/updates/FEDORA-2012-3388/httpd-itk-2.2.22-5.fc17
 
Исправление порушившегося Subversion репозитория PDF Печать E-mail
Автор: Павел Алексеев aka Pahan-Hubbitus   
15.04.2011 10:54

Эта статья совсем не о пользе бакапов, о их неоюбходимости писать в N+1 раз писать уже просто нету смысла. Как гласит пословица: Нету админов которым бакапы не нужны, есть только те которые еще их не делают.

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

Однако, как я уже сказал, сия печальная история с относительно счастливым концом совсем не про бакапы. А скорее про счастливый конец. Итак, как Вы уже поняли, порушился у меня раздел, достаточно серьезно порушился. Многое конечно повосстановилось, кое-что нет. Особо серьёзного там ничего не было, многие фильмы просто и без сожаления были удалены. Но вот случилось что там же оказались и SVN репозитории. И вот тут-то началось очень неприятно. Стандартный svnadmin verify говорит о проблеме, но вот восстановить что-либо с помощью svnadmin recovery оказалось совершенно не возможно. Почитал я множество статей в интернете про восстановление, и понял что все они пытаются все же воссоздать файлы ревизий, посмотрел на свои, где целые килобайты нулей, и понял что это безнадёжно. Оставалось одно - восстановить то что сохранилось. В некоторых было потеряно всего по 1-3 ревизии что совершенно не является страшным. И восстанавливал просто:

  1. Делал новый репозиторий (svnadmin create)
  2. Из старого делал svnadmin dump (с ключом --incremental для всех кроме нулевого прохода)
  3. Смотрел ревизию на которой произошла ошибка, делал дамп до нее (не включая битую)
  4. Повторял так шаги 2-3 для всех корректных ревизий.

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

Все бы хорошо, но дошёл я до одного, который посыпался весьма серьёзно. Коммитов там было около 600. Битые ревизии были иногда последовательны, иногда через одну. Но и это оказалось не самым главным. До сих пор я делал все руками - сохранял в нумерованные дампы, и загружал в новый... Добило меня следующее неприятное обстоятельство. Даже то что все инкрементальные дампы прошли корректно не гарантирует что все они будут загружены в новое место корректно - ведь последовательность нарушена, и существуют "дырки" в истории, в виде потерянных ревизий! Получается некоторые изменения ссылаются на другие прошлые, информации о которых у меня нету. Усугубляется все это тем, что при такой загрузке svnadmin load не работает атомарно и не гарантирует целостность репозитория! Это было выяснено эмпирическим путём. То есть если при загрузке произошла ошибка, не отказывается даже эта ревизия, происходит выход где она обнаружена. Дальнейшая заливка дампов, даже корректны уже может привести к новым ошибкам. Единственные выход который я нашёл в этой ситуации - перезаливать новый репозиторий всеми кусками сначала (разумеется создавая его заново). При этом, в том куске где была ошибка загрузки, проблемная ревизия также должна быть исключена, и дамп сделан снова (если это не крайняя ревизия, значит будет уже 2 дампа).

На этом этапе, потратив несколько часов на выяснение всех деталей и обстоятельств стало понятно что вручную этот репозиторий мне не восстановить до седин. Было принято решение написать скрипт по автоматизации всех описанных действий. Забегая вперёд скажу что очень не зря, потому что общий прогон по данному репозиторию составлял в автоматическом режиме более 12 часов в среднем...

Да, раз уж скрипт, было решено сохранить номера ревизий. Прежде всего, потому что на них есть внешние ссылки из багтрекера. Но также чтобы можно было не делать речекаута. Пропущенные ревизии просто заменяются коммитами ничего не значащего свойства (впрочем с понятным текстом об этом). При автоматизации, разумеется, было добавлено несколько проверок целостности получающихся результатов, и прочих мелких радостей.

Ещё раз повторю - делайте копии, и да не даст вам Бог оказаться в такой же ситуации. Но если она все же случилась, можете воспользоваться моим скриптом. Если есть какие-то вопросы - пишите, постараюсь помочь.

В заключение несколько слов о самом скрипте:

  1. Распространяется под лицензией GPLv2+ (версия 2.0 или более поздняя на ваш выбор), без каких-либо гарантий! То что я восстановил репозиторий (и уже почти полгода пользуюсь им нормально), совершенно не гарантирует что там нету никаких ошибок и он не может порушить все ваши данные окончательно (впрочем в любом случае пробовать лучше на копии)!
  2. Это не готовый продукт! Скрипт был в общем написан на коленке, никаких манов, инсталляторов и прочего делать не планировалось и не планируется. Было бы неплохо чтобы Вы знали bash, если собираетесь его модифицировать под свои нужды. Просто чтобы запускать таких знаний не нужно.
  3. Я использовал его разово, поэтому никаких оптимизаций по скорости или даже тестов не проводилось и не планируется.
  4. Если есть вопросы, я постараюсь оказать помощь как по скрипту, так и по вопросам восстановления SVN реп, где могу. Но не обещаю никакой поддержки и не даю никаких гарантий!
  5. Ну и последнее. Не надо надеяться на чудо - информация об изменениях в пропущенных ревизиях потеряна. Её не будет в логах и Вы не сможете сделать merge/diff с ними. Поэтому если у вас есть варианты как восстановить репозиторий полностью - попробуйте сначала их. Я видел в сети предложения по такой помощи, в том числе квалифицированные платные. Если же по каким-то причинам это не желательно или не удалось, то попробуйте моё решение - как минимум это поможет вам восстановить его работоспособность и получить репозиторий с которым можно продолжать работать!
  6. Ну и конечно же любые замечания, и предложения приветствуются!

Ну и желаю всем удачи!

Вложения:
Скачать файл (subversion_recovery.tar.bz2)subversion_recovery.tar.bz2[Скрипт восстановления Subversion (SVN) репозитория]5 Kb16.04.2011 12:32
 
Запуск легально и бесплатно винды под Линуксом (или как я устанавливал Internet Explorer) PDF Печать E-mail
Автор: Павел Алексеев aka Pahan-Hubbitus   
22.01.2011 19:03

Возникла у меня тут проблемка с сайтом, баг повесили. И все бы хорошо, да по сообщению не работает только в Internet Explorer. Разумеется я знаю о сервисах вроде browsershots, и с радостью бы воспользовался, да вот незадача - ошибка в обработке AJAX запроса на JavaScript, и тут простым скриншотом не обойдешься. Первой мыслью было конечно запустить Internet Explorer (IE) под wine. В былые времена, когда развивался ies4linux, я все время так и делал для Internet Explorer 6. И это спасало. Вообще конечно в нем жутко работать, не говоря уже что-то разрабатывать или дебажить, но тут уж как говорится не из чего выбирать. В наше время, слава Богу, от IE6 можно наконец отказаться, новые версии хоть немного получше, а в IE8 появилась кое-какая девелоперская консоль. Вот только незадача, ни IE7, ни IE8 нормально не работают под wine.

 
В прошлом году я сделал 12 ревью PDF Печать E-mail
Автор: Павел Алексеев aka Pahan-Hubbitus   
12.01.2011 11:54

По статистике опубликованной Rakesh, я сделал 12 ревью на реквесты в Федорке. Что ж, оказывается не так уж и мало... В рассылке попал в список "кому за 10"... Впрочем надо бы конечно больше (хотя зарекаться не буду).

 
colorize PDF Печать E-mail
Автор: Павел Алексеев aka Pahan-Hubbitus   
29.12.2010 11:47
 
<< Первая < Предыдущая 1 2 Следующая > Последняя >>

JPAGE_CURRENT_OF_TOTAL