git fsck сообщает о несоответствии sha1

У нас есть следующая проблема при выполнении команды git fsck --full --strict:

error: sha1 mismatch ced885d12a0677f2db9025e1e684c72e67283fcd

error: ced885d12a0677f2db9025e1e684c72e67283fcd: object corrupt or missing
error: sha1 mismatch cf5a1546bd2de5611eaf6136fb5ca02b4e358bec

error: cf5a1546bd2de5611eaf6136fb5ca02b4e358bec: object corrupt or missing
error: sha1 mismatch cf5d9d5723014921370de479c54a73230c86a981

error: cf5d9d5723014921370de479c54a73230c86a981: object corrupt or missing
error: sha1 mismatch cf675ce5bc5eeb5937441c6a02976cf2fa40076b

error: cf675ce5bc5eeb5937441c6a02976cf2fa40076b: object corrupt or missing
error: sha1 mismatch cf7c5156cf127eb7141505946df51b2b57925a50

error: cf7c5156cf127eb7141505946df51b2b57925a50: object corrupt or missing
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912
dangling commit daeec54632203157a70bae93b9d7c3290820c2f9
(more dangling commit messages)

(Примечание: меня не особо интересуют висячие сообщения фиксации. Я сосредоточен на проблеме несоответствия sha1.)

Моя интерпретация этого сообщения заключается в том, что git-fsck повторно вычисляет sha1 из полезной нагрузки, но обнаружил sha1, отличный от того, который использовался для обозначения объекта. Объекты в репозитории отсутствуют (проверил с помощью git cat-file).

Странно то, что если я снова запущу команду, у меня все еще будут сообщения sha1, но для других объектов:

error: sha1 mismatch 1452752024456a509540591c4879b3e3534f457e

error: 1452752024456a509540591c4879b3e3534f457e: object corrupt or missing
error: sha1 mismatch 16e08310d7182e97092d2783c911dbcf66538238

error: 16e08310d7182e97092d2783c911dbcf66538238: object corrupt or missing
dangling commit 3468455f0d9d055bbe957744aa10e670469d3912

Примечание. Репозиторий не изменился между двумя запусками.

Мы используем Linux, и текущая версия git:

$git --version
git version 1.7.2.2.170.g5c7f2

Ошибки были в предыдущей версии (1.6.5.rc2.18.g6d8b). Эти git были собраны из исходников с использованием gcc 3.4.4.

ОДНАКО, когда я копирую репозиторий на другой хост, git fsck вообще не сообщает о проблемах. Версия git 1.7.2.1 (предоставляется Fedora).

Я сделал следующие наблюдения:

  1. Объекты с недопустимым sha1 часто находятся в одном диапазоне (в первом примере sha1 начинаются с ce или cf), и ошибки возникают в течение небольшого периода времени во время выполнения fsck. Я считаю, что git-fsck выполняет упорядоченное сканирование (или, возможно, объекты сортируются внутри пакета).
  2. Эти объекты представляют собой относительно большие капли (> 900 тыс.)
  3. Мы выполнили 15-минутный полный проход memtest для возможного сбоя аппаратной памяти. Мы не нашли ни одной проблемы. На этом сервере не наблюдается никакого другого странного поведения, которое также выполняет множество других задач, не связанных с git.
  4. git gc не жалуется

Гипотезы на данный момент:

  1. Эта проблема вызвана неправильной сборкой git (версия библиотеки? компилятор?)
  2. Наш мемтест не смог найти реальную проблему с памятью.
  3. Существует небольшая ошибка в вычислении git-fsck sha1, которая возникает случайным образом (или, точнее, в течение определенных коротких временных окон) для больших BLOB-объектов.

Как мы можем решить эту проблему?


person gawi    schedule 26.08.2010    source источник
comment
Поскольку вы используете нестабильную версию git, лучше всего задать вопрос в списке Git или #git на FreeNode IRC. Я бы проверил там, чтобы начать, так как это может быть ошибка в Git или нет, но с сборкой для разработки лучше проверить.   -  person Marcus Griep    schedule 27.08.2010
comment
Я также подозревал нестабильную сборку разработки. Но странно то, что обе разрабатываемые версии (1.6.5.rc2.18 и 1.7.2.2.170) имеют одну и ту же проблему. Я пытался собрать версию для разработки на другом хосте, и я запускаю fsck без проблем. Следующим шагом было копирование исполняемого файла при запуске на другом хосте. Тоже без проблем. Итак, похоже, это связано с самим сервером, на котором работает Linux Centos 4.2 на двойном Intel Pentium D@3GHz. Возможно, это связано с тем, что на Centos лежат какие-то старые библиотеки. Существуют ли системные требования для Git?   -  person gawi    schedule 28.08.2010
comment
Возможно, вы получаете случайное чтение с диска. Это может быть вызвано многими причинами, часто (но не всегда) аппаратными средствами. Если аппаратное обеспечение, другие вещи, кроме памяти, могут вызвать это. Попробуйте, например, скопировать ваш каталог .git, используя cp -ar, а затем diff -r копию с оригиналом. Если они приходят разные, git сорвался с крючка.   -  person Wayne Conrad    schedule 04.09.2010
comment
@Wayne Я еще не проверял это. Дай мне попробовать....   -  person gawi    schedule 04.09.2010
comment
@Wayne: пытался дважды, различий не обнаружено. Если бы это был диск, я бы ожидал какой-то ошибки ввода-вывода. Но опять же, возможно, копирование и сравнение были слишком быстрыми, чтобы допустить ошибку. Примечание: (голый) репозиторий имеет размер 2,9 ГБ. Спасибо за вашу идею!   -  person gawi    schedule 04.09.2010
comment
@gawi - Ну ладно. Иногда ты ветровое стекло, иногда ты муха.   -  person Wayne Conrad    schedule 04.09.2010
comment
Пахнет неисправной оперативной памятью, если вы спросите меня ... Я бы провел более тщательный тест памяти ... Или, если у вас в коробке только несколько модулей памяти, просто удалите их один за другим и посмотрите, сохраняется ли проблема ... Вы упомянули 15-минутный тест памяти, но этого может быть недостаточно... Используйте что-то вроде memtest86 и дайте ему пройти через всю вашу память с несколькими хорошими шаблонами...   -  person Lasse    schedule 27.02.2011
comment
@Lasse Мы переместили наш репозиторий git на другой хост. С тех пор проблема исчезла. Спасибо.   -  person gawi    schedule 27.02.2011


Ответы (1)


Должно быть, это какая-то аппаратная проблема.

person gawi    schedule 27.02.2011