Проект KDE чудом не потерял содержимое всех Git-репозиториев
Один из администраторов инфраструктуры проекта KDE описал подробности произошедшего несколько дней назад инцидента, который мог бы быть назван «Великим бедствием KDE 2013 года». В результате случившегося, разработчики KDE чуть было не потеряли содержимое 1500 Git-репозиториев проекта. Всё началось с повреждения содержимого файловой системы Ext4 на первичном Git-сервере после неудачного перезапуска виртуальной машины после применения обновлений на одном из серверов проекта. В результате сбоя файловой системы оказалась нарушена целостность первичного Git-репозитория, содержимое которого было разрушено и данные многих репозиториев потеряны. Ситуация стала напоминать катастрофу, когда администраторы приступили к восстановлению данных из резервных копий. Дело в том, что для резервного копирования применялась практика зеркалирования Git-репозитория. Перебирая зеркала администраторов охватил ужас — система зеркалирования успела автоматически синхронизировать ошибочные данные на все вторичные серверы, содержимое репозиториев на которых также пришло в негодность или было удалено.
История оказалась со счастливым концом — была найдена копия информации и содержимое репозиториев удалось полностью восстановить. Если бы не стечение обстоятельств, данная копия вполне могла бы не появиться и восстанавливать данные пришлось бы по крупицам. Дело в том, что за день до инцидента, в рамках переноса содержимого одного из серверов на новое оборудование, была дополнительно настроена система клонирования Git-репозиториев на ещё не введённый в эксплуатацию новый сервер. При этом синхронизация была настроена на запуск раз в 20 минут и начало очередного цикла пришлось на перезагрузку проблемного сервера, что привело к завершению запуска скрипта полной синхронизации по таймауту и выполнению следом только скрипта загрузки последней ревизии из репозитория на сбойном сервере, который также завершился неудачей так как сервер не сумел сформировать корректный набор данных. В результате, на сервере сохранилась копия репозитория в виде до перезагрузки основного Git-сервера.
В итоге разработчики получили хороший урок и поспешили предупредить коллег об опасности излишнего доверия к распределённому характеру Git и использованию «git --mirror» в качестве способа резервного копирования. Главной ошибок проектирования стало излишнее доверие первичному серверу git.kde.org, который воспринимался в качестве эталонного и в итоге стал единой точной отказа.
© OpenNet
