Моя история


Мне досталась лента с готовой версией игры Frogger 2: Swampy's Revenge. В детстве я очень любил эту серию игр.

Считалось, что эта лента — единственная резервная копия исходного кода готовой игры, игровых ресурсов и других данных разработки.

Как вы можете понять, эта находка в случае её восстановления оказалась бы бесценной. Но как же вообще считать/записать данные на ленту? Зачем вообще использовались ленточные накопители?

В 1999/2000 годах средний размер жёсткого диска составлял примерно 10 ГБ, к тому же они не славятся долгим сроком службы.

Очень привлекательным предложением были ленточные накопители OnStream, потому что имели картриджи по 50 ГБ (25 ГБ без сжатия) и к тому же стоили дешевле большинства жёстких дисков!

Ленты отлично подходят для резервного копирования, а при правильном хранении могут иметь долгий срок службы. К тому же можно купить ленточный накопитель, который вставлялся в компьютер как CD-привод или привод гибких дисков.

К сожалению, несмотря на долгий срок службы лент, сами ленточные накопители подобным похвастаться не могли. Компания OnStream, производившая такие ленты и накопители, прекратила свою работу в 2003 году, хотя первый накопитель выпустила всего лишь в 1999 году.

Такие накопители встречались редко, особенно модели, способные работать с лентами на 50 ГБ. Поэтому первой большой проблемой стал поиск совместимого накопителя.

Картридж с лентой

▍ 1. Поиск совместимого/рабочего ленточного накопителя


К счастью, я знал, что мне нужен накопитель «OnStream SC-50», потому что эта модель была записана на этикетке ленты.

Я нашёл единственную компанию, продававшую такие накопители онлайн, и ухватился за эту возможность. К сожалению, что бы я ни делал, после вставки ленты в накопитель она как будто считывалась, а потом автоматически извлекалась.

Я пробовал разные операционные системы, разные версии ПО, разное ПО, разные драйверы и так далее. Ничего не помогало.

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

Мои попытки починить накопитель были, скажем так, безуспешными, так что я начал искать другой накопитель. И поскольку других вариантов не было, я взял ADR-50e. Этот накопитель рекламировался как совместимый с таким типом лент. Накопитель работал с моей «тестовой лентой» (пустой лентой, которую я купил специально для тестирования), но всё равно отказывался считывать ленту с Frogger.

На этом этапе я ошибочно предположил, что проблема, должно быть, в самой ленте и она повреждена.

На самом же деле, несмотря на утверждения о совместимости ADR-50e с лентой, имелась одна тонкость. Он был совместим только с лентами, записанными на самом накопителе ADR-50e, или с лентами, записанными определённым ПО.

Тогда я даже не знал, каким ПО записывались данные, не говоря уже об этой малоизвестной особенности ленточного накопителя, ведь его рекламировали как совместимый.

Поэтому предположив, что лента неисправна, я отправил её в компанию, занимающуюся профессиональным восстановлением данных. Это было ОГРОМНОЙ ошибкой…

Расплавившийся прижимной ролик

▍ 2. Профессиональное восстановление данных — это отстой


Они ведь профессионалы, что может пойти не так? На веб-сайте этой компании было прямым текстом сказано, что она может восстанавливать данные с лент OnStream, а отзывы о ней были хорошими (и, насколько я могу судить, написаны не ботами).

Возможно, компания хорошо справлялась с распространёнными типами хранилищ данных наподобие жёстких дисков или SSD. С ними работа должна быть проще, потому что существуют совершенные инструменты восстановления этих устройств.

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

Что должна была сделать эта компания:

Ей не следовало рекламировать возможность восстановления данных с таких лент, ведь она, очевидно, на это неспособна.

Компании следовало чётко объяснять риски, ведь она даже не знала, может ли используемое ею устройство восстанавливать данные с ленты, хотя она и притворялась, что умеет это делать.

Компании не следовало говорить мне, что она может восстановить данные с этой ленты.

Что эта компания сделала:

Эта компания заявляла, что может восстанавливать данные с лент OnStream. Это полная брехня.

Очевидно, у неё даже не было ленточного накопителя OnStream SC-50, потому что, если бы он был, она могла просто использовать официальное ядро Linux, выпущенное 10-20 лет назад, в котором есть драйвер, способный дампить эти данные.

Примерно в течение месяца я получал очень редкие и расплывчатые сообщения от компании, несмотря на то, что предоставил ей крайне подробную техническую информацию и задал чёткие вопросы.

В конце концов, месяц спустя, я понял, в чём заключалась настоящая проблема,
а поскольку ситуация с восстановлением данных развивалась не очень хорошо, я попросил вернуть ленту обратно.

Мне написали, что мне отправят её «в том виде, в котором мы её получили». Абсолютная ложь. Полученная мной лента была разорвана во множестве мест и снова склеена.

Если бы это была аудиоплёнка или что-то древнее, то, возможно, ничего страшного бы не произошло, но полученная мной обратно лента имела проблемы, которых НЕ было при отправке.


Компании ни за что бы ни удалось восстановить данные:

OnStream использовала технологию, которой не было ни в одном другом ленточном накопителе. Она установила специальный чип обработки данных (ASIC), спроектированный специально для её устройств, а не использовала распространённые чипы, применяемые в других накопителях, например, Travan.

В конвейере обработки данных от ленты до цифровых данных использовалось специализированное оборудование, разработанное с нуля для ленточных накопителей OnStream, потому что это позволяло OnStream добиваться большей ёмкости, чем могла любая другая компания в то время.

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

Иными словами, любые устройства, в которые компания вставляла восстанавливаемую мной ленту, НЕ были совместимы с лентами OnStream.

Не знаю, зачем она утверждала, что может восстанавливать данные с лент OnStream, но на её сайте совершенно точно есть недобросовестная реклама.

Её действия чётко показали, что она не знает, как восстанавливать данные с лент OnStream.

▍ 3. Осознание


К сожалению, это стало очевидно уже потом.

Пока лента находилась на восстановлении данных, я получил ещё несколько лент с другой игрой, и мне с лёгкостью удалось сдампить две из них при помощи накопителя «OnStream ADR-50e». Также я определил, что для записи данных использовалось ПО ARCServe 2000. Благодаря тому, что на этикетке была написана модель ленточного накопителя, я понял, почему не мог считать ленту с Frogger 2. Причиной были не проблемы с лентой, а то, что на самом деле мне нужен был накопитель SC-50, а не ADR-50.

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

Склейки не просто мешали считыванию данных в склеенной области, но и настолько сильно влияли на накопитель, что после вставки в него ленты он постоянно пытался повторно считывать данные со склеенной области.

К тому моменту я нашёл документацию по командам, которые компьютер может отправлять накопителю, и по возможностям накопителя.

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

Вероятно, на этом моя история должна была завершиться. Я должен был сдаться и опустить руки. Но мне важны были эти данные, и к тому же я кое-что понимал в компьютерах.

Пример склейки. По крайней мере, они получились у компании качественными

▍ 4. Настало время хакерства


Как это часто бывает, я понял, что если хочешь сделать что-то правильно, нужно делать это самому.

Это меня выбесило, потому что профессиональное восстановление данных — дорогостоящая услуга. Если бы я не выбрал компанию, работающую по принципу «если данные не восстановлены, плата не взымается», то заплатил бы ей тысячи долларов за то, что она испортила мне ленту.

Это безумие, и я до сих пор расстроен тем, что компания обещала, что даже сможет восстановить данные с ленты. Похоже, они не восприняли эту работу серьёзно.

Однако я использовал эту ситуацию для собственной мотивации.

Я потратил месяцы на изучение накопителя, его интерфейса управления SCSI, на реверс-инжиниринг прошивки, чтение документации, поиск патентов и так далее.

Узнав о накопителе гораздо больше, 5 апреля 2023 года я обнаружил способ, который оказался намного проще, чем все остальные проверенные методики.

Если проблема в процессе инициализации, то почему бы не выполнить его с работающей лентой? Тогда мы обманем датчики накопителя и сможем заменить ленту, а он об этом не узнает.

Благодаря этому трюку, я успешно сдампил неповреждённые части ленты.

Модифицированный накопитель

Дампинг ленты

▍ 5a. ARCServe — тоже отстой


После дампинга данных с ленты оставалась одна проблема — непригодный формат.

Считанные с ленты данные отформатированы записавшим их ПО.

К сожалению, у каждого совместимого ПО для резервного копирования может быть собственный формат, в том числе и у ARCserve.

Если бы я смог воспользоваться оригинальным ПО для обработки сырого дампа, то оно автоматически выдало бы мне данные в пригодном для использования виде. Конечно, если бы ARCserve не был настоящим мусором! Оказалось, что ARCserve поломан. Он даже не мог считывать записываемые им неповреждённые ленты OnStream.

Эта проблема не возникает у лент, записанных накопителем ADR-50, однако все протестированные мной ленты, записанные на OnStream SC-50, НЕ восстанавливались с ленты, если только запись и восстановление не происходили на одном компьютере. Это вызвано тем, что на записывающем ленту компьютере хранился каталог информации о ленте, в частности, список файлов на ленте, который ARCserve должен восстановить без этого списка, потому что он хранится только на создавшем его компьютере; в противном случае пропадает весь смысл резервного копирования.

Однако несмотря на то, что ARCserve отображает всплывающее окно с сообщением «Restoration Successful», он восстанавливает до первых 32 КБ каждого файла на ленте, но НЕ БОЛЬШЕ.

С неповреждённой ленты на много гигабайтов, считывание которой занимает у ARCserve два часа, суммарно восстановился примерно 1 МБ данных.

▍ 5b. Переводим данные в пригодный формат


Для преобразования файлов в пригодный формат (.zip) мне пришлось написать программу преобразования дампов ленты из формата ARCserve в .zip.

К счастью, формат ARCserve не очень сложен, и я довольно быстро с ним разобрался.

Однако было кое-что странное. Ненормально большое количество файлов экспортировалось неправильно.

Потратив некоторое время на анализ данных и размышления, я понял, что для чтения ленты ARCserve использовал недокументированный режим. Подробнее о нём рассказывается в этом руководстве, однако ARCServe использовал функцию, незадокументированную в официальном документе разработки драйвера OnStream.

Эта незадокументированная функция позволяла ARCServe считывать и записывать данные в полностью отличающемся от описанного в документации паттерне.

Даже изменив свою программу так, чтобы она считывала данные незадокументированным способом ARCserve, я всё равно сталкивался с неожиданными ошибками.

На этот раз я почти сразу заметил, что отсутствующие данные находились в том месте ленты, которое в документации явным образом называет местом, куда «не могут записываться пользовательские данные».

Поэтому я снова переписал свои инструменты и программу для дампинга, чтобы они могли считывать область, «в которую нельзя записывать пользовательские данные».

Наконец, спустя месяцы реверс-инжиниринга ARCServe, прошивки накопителя и другого мусора, программа заработала, и данные были спасены.

Исходный код программы извлечения находится здесь.


Восстановленные файлы

▍ 6. Завершение


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

Сохранены все важные данные, например, резервная копия репозитория VSS (история исходного кода), ресурсы готовой игры, инструменты и многое другое.

Моя лента была единственной резервной копией всего этого, она завершила архивы разработки Frogger 2, которые будут опубликованы.

Это может показаться ужасным, но восстановлено примерно 12 ГБ из 15 ГБ записанных данных, хотя на самом деле всё не так плохо.

Повреждена пара тысяч файлов, но они составляют менее 5% от общего количества файлов на ленте.

Почти все повреждённые файлы или найдены на другой резервной копии на CD, или дублированы на другой части ленты.

Идеально не удалось восстановить лишь 15 файлов; особенно примечателен среди них CD-образ версии игры для PC, собранный спустя месяц после релиза.

Я восстановил 58149 из 58164 файлов с ленты и расцениваю это приключение как настоящий успех.

Вот как выглядят повреждения на ленте Frogger 2. Они существенны и дают понять, как мне повезло с восстановлением.


Комментарии (8)


  1. Areso
    06.06.2023 14:03
    +3

    Вот, отличная статья, хоть и перевод.

    1) если это не LTO-мейнстрим, будут проблемы с расходниками, донорами, устройствами чтения, и так далее

    2) устройство из статьи могло использоваться в ПК, в то время как LTO стримеры, к сожалению, не относятся к консюмерской электронике.

    3) несмотря на то, что ленты часто используются как архивные накопители, ленты сыпятся.

    И без хороших алгоритмов, которые уменьшат полезный объём путём добавления избыточности данных, есть шанс продолбать важные данные. Потерять несколько фоток из альбома на 100 фотографий -- это одно, а потерять несколько cpp файлов - совсем другое.


    1. Vasyutka
      06.06.2023 14:03
      +1

      Ну не знаю, про "хоть и перевод". Этот перевод заводит настолько не туда, что плавит мозг куда больше, чем могло бы чтение в оригинале


      1. Mapaxa864
        06.06.2023 14:03
        -2

        Я тоже хотел было возмутиться, что, к примеру, привод переведен как накопитель. А от этого просто мозг взрывается, когда читаешь. Потом полез разбираться в теме… и да, если верить вики, у нас так действительно "принято" tape drive переводить как ленточный накопитель. Даже не смотря на то, что привод ничего не "накапливает" (в отличие от картриджей, кассет и тд).


        ПС: статью забросил читать еще где-то в начале — не выдержал этого терминологического ада.


  1. zatim
    06.06.2023 14:03
    +17

    Разлагающиеся от времени резиновые изделия - бич любителей магнитной записи. Надо было отдать стример любому электронщику, кто хоть раз ремонтировал магнитофон, он бы просто поменял ролик, почистил механизм, подобрал пассики и, скорее всего, девайс бы заработал как ни в чем не бывало.


  1. shiru8bit
    06.06.2023 14:03
    +1

    А вот если бы это был просто недолговечный жёсткий диск, лежащий в столе с 1999-2000 года - всё было бы куда проще, как уже многократно происходило в подобных случаях.

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


    1. SADKO
      06.06.2023 14:03

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


  1. MagisterAlexandr
    06.06.2023 14:03

    А где скачать результат?


  1. Metotron0
    06.06.2023 14:03

    лента была единственной резервной копией всего этого

    найдены на другой резервной копии на CD

    Я из всего не понял только этот момент