[recovery mode] Почему я перепроверяю записанные данные, или История одного расследования…

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

Досточтимый сэр,
В 2001 году я уже общался с Вами относительно проблем с моим диском Fujitsu MPG3409AH. Сейчас я столкнулся с ещё одной проблемой — боюсь, гораздо более худшей. Могу ли я по-прежнему обращаться к Вам? Если нет, подскажите отвечающего за это человека, к кому я могу обратиться.


Monday, July 29, 2002, 8:57:37 AM, you wrote:
gffc> Какую проблему Вы испытываете с Вашим диском?

Начнём с бюрократических деталей:

Модель: MPG3409AH
Серийный номер: VLxxxxxxxxCF (август 2001)
Ревизия прошивки: A9

Проблема состоит в следующем: от случая к случаю единственный бит в прочитанных данных изменяется с 1 на 0 —, но исключительно в том случае, если происходит обмен данными между HDD на primary канале и CD-ROM на secondary канале.

Расположение бита всегда одно и то же — xxxx1xxx превращается в xxxx0xxx на смещении XXXXX02E примерно каждые 50 прочитанных или записанных мегабайт, но абсолютно случайно.

Например:

Смещение в файле — ожидаемое значение — прочитанное значение
26002E 5A 52
C2D02E 8C 84
28002E 99 91

Впервые я заметил проблему, скопировав zip-файл с компат-диска на винчестер: файл с диска открывался нормально, а с винчестера — нет; сравнение файлов показало, что указанным образом — из 1 в 0 — сбросился один бит. Затем, сравнивая 130-мегабайтный файл на другом свежезаписанном компакт-диске с его исходной копией на винчестере, я обнаружил, что копии иногда совпадают, а иногда — нет (!!!). Запросив побитовую распечатку расхождений, я получил аналогичный результат: информация, считанная с винчестера, время от времени оказывалась испорченной. Байт, повреждённый при предыдущей попытке чтения, при очередной попытке оказывался правильным, и наоборот.

Сначала я грешил на планки памяти в моём компьютере. Поставил память с поддержкой ECC и до кучи добавил к ней кулер — безрезультатно. Заподозрил CD-ROM и стал сравнивать файл на компакт-диске с файлом на винчестере, и копией файла на другом компьютере. Сравнение по сети всегда было успешным, сравнение с винчестером — нет. Заподозрил контроллер жёстких дисков (чипсет i845D). Перенёс винчестер на компьютер с более старой материнкой (DELL двухгодичной давности — так что чипсет там гаранитрованно другой, да и CD-ROM тоже) — и ошибки сравнения «винчестер с CD» воспроизвелись.

Для меня это изначально выглядит как битая ячейка во внутреннем кэше винчестера. Однако я одного не могу понять — почему я не могу повторить проблему при копировании с Master-винчеcтера на Slave-винчестер на том же самом контроллере — или с проблемного винчестера на него самого же? Может быть, потому, что поток данных в таком случае течёт вдвое медленнее, чем при копировании между Primary и Secondary IDE контроллерами?

Подозрения навевает также моя первая проблема, с которой я обращался к Вам пару лет назад — она заключалась в том, что диск Fujitsu более ранней серии, MPD, случайным образом намертво зависал — настолько, что не помогала кнопка RESET, а только выключение питания — во время обращений к CD-ROM на Secondary IDE контроллере.

Если бы не это дополнительное, но необходимое условие (обмен между винчестером и CD-ROM), я бы не был настолько обескуражен. Встречались ли Вы с подобным поведением?

Повторю набор достаточных и необходимых условий для возникновения проблемы:

  1. Подопытный винчестер должен быть выставлен как Master на primary IDE канале;
  2. CD-ROM должен быть выставлен как Master на secondary IDE канале;
  3. Подопытный винчестер и CD-ROM должны одновременно активно передавать данные.

Факторы, не влияющие на воспроизведение проблемы (проблема воспроизводится):
  • после замены CD-ROM привода
  • после замены RAM
  • после замены блока питания
  • после замены материнской платы
  • на другом компьютере

В то же время, если изменить хотя бы один параметр из списка необходимых, баг перестаёт воспроизводиться:
  • если переключить вичестер на secondary контроллер, а CD-ROM на primary;
  • если поставить винчестер (или CD-ROM) как Slave;
  • если во время чтения данных с винчестера CD-ROM простаивает.

Заранее благодарен за Ваше внимание.

Через два месяца я получил от Fujitsu новый винчестер с обновлённой ревизией прошивки. Он работал нормально…
А мораль истории сей такова: если бы я не имел привычки побитово сравнивать скопированные куда-либо файлы, никто ещё долго ничего бы не узнал…

© Habrahabr.ru