[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), я бы не был настолько обескуражен. Встречались ли Вы с подобным поведением?
Повторю набор достаточных и необходимых условий для возникновения проблемы:
- Подопытный винчестер должен быть выставлен как Master на primary IDE канале;
- CD-ROM должен быть выставлен как Master на secondary IDE канале;
- Подопытный винчестер и CD-ROM должны одновременно активно передавать данные.
Факторы, не влияющие на воспроизведение проблемы (проблема воспроизводится):
- после замены CD-ROM привода
- после замены RAM
- после замены блока питания
- после замены материнской платы
- на другом компьютере
В то же время, если изменить хотя бы один параметр из списка необходимых, баг перестаёт воспроизводиться:
- если переключить вичестер на secondary контроллер, а CD-ROM на primary;
- если поставить винчестер (или CD-ROM) как Slave;
- если во время чтения данных с винчестера CD-ROM простаивает.
Заранее благодарен за Ваше внимание.
Через два месяца я получил от Fujitsu новый винчестер с обновлённой ревизией прошивки. Он работал нормально…
А мораль истории сей такова: если бы я не имел привычки побитово сравнивать скопированные куда-либо файлы, никто ещё долго ничего бы не узнал…