[Перевод] Считываем данные со старого жёсткого диска MiniScribe

28104e3313b564111e508b406a4caf29.jpg

Перевод статьи с сайта программиста и любителя старого железа Майкла Сломковски

Ко мне в руки попал старый MFM-диск, MiniScribe 2012, вместе с контроллером. MFM — это модифицированная частотная модуляция, и эту технологию часто ассоциируют с громоздкими жёсткими дисками из эры до IDE/Parallel ATA. Древние данные, хранящиеся на диске (в основном, документы MS Word 4.0) обладали определённой сентиментальной ценностью для предыдущего владельца, поэтому я решил их извлечь.

Жёсткий диск MiniScribe 2012


Жёсткий диск — MiniScribe 2012 MFM, произведён, вероятно, в 1984-м. Он стоял в IBM XT-совместимом компьютере. Этот монстр занимает два слота по 5.25» и весит более двух килограмм. Как указано в инструкции, объём его просто поражает воображение — целых десять мегабайт. Коннектор питания — стандартный Molex. Диск подключается к карточке контроллера двумя кабелями.
5cd1681ae167e617de81f6145b2d1569.jpg

e446e4c05bcf785f183bdd5ad6040568.jpg

25c1c6aff710b531e0077e352c9465e9.jpg

35e687a87bcd74ceb3f251c09ce24917.jpg

bf6243d35ca4a1e5ae4ea6945dfde163.jpg

6f182fe03fee084b4de1aaf11d56d52b.jpg

У диска MiniScribe в комплекте есть выделенный контроллер 8-bit ISA под названием WD1002A-WX1. Его спецификации легко найти. В текстовом файле содержатся инструкции по установке; также нам может пригодиться список совместимых устройств.

В теории контроллер способен работать с любым приводом, поддерживающим протоколы ST506/412, но на практике всё не так просто. Список повреждённых секторов должен храниться в ROM контроллера. Для этого требуется специальное ПО. Часто новый привод начинает работать после соединения его с новым контроллером и проведения низкоуровневого форматирования.

8ff5c00d58a60d4000ab8a5572cdea92.jpg
Контроллер диска WD1002A-WX1 MFM

У контроллера есть свой BIOS, который обычно называется Option ROM. Его вызывает BIOS материнской платы во время последовательности POST. Код регистрирует хук на прерывании INT 13 и в результате становится доступным из DOS при помощи стандартного вызова прерывания.

Устройство


К счастью у меня была старая материнка AT (ATC-1020) с ISA-слотами и процессором Pentium. На процессоре не было радиатора, но я установил джамперы на плате так, чтобы он работал на минимальной скорости, и приладил временный радиатор при помощи резинки. Также я поставил в плату модуль 32 MB DIMM RAM.

a3a0789a3efa22ee86ffd39a79cd4809.jpg

У меня не было графической VGA-карточки ни для PCI, ни для ISA, поэтому я использовал MDPA со специальным жёлтым монохромным дисплеем. Материнка его успешно распознало, что видно на фотографии.

Для проверки диска я отключил в BIOS IDE-контроллер и попытался загрузиться. Диск ожил и даже загрузился — ура!

Загрузка с PXE


Я предположил, что для того, чтобы поиграться с этим диском MiniScribe, мне понадобятся утилиты для DOS, поэтому я решил загрузиться с дискеты с MS-DOS. Поскольку с физическими дискетами возиться неудобно, я решил использовать сетевую загрузку. К счастью, у меня была сетевая карта PCI Ethernet с поддержкой PXE: 3com 3C905C-TXM

Чтобы загрузить образ дискеты по PXE, нужен специальный загрузчик. Один из популярных — PXELINUX, входящий в состав Syslinux, модуль syslinux из Arch Linux. На машине Linux нужно создать директорию для сетевой загрузки и скопировать туда
PXELINUX:

cp /usr/lib/syslinux/bios/{ldlinux.c32,memdisk,pxelinux.0} .
mkdir pxelinux.cfg

Затем создать текстовый файл pxelinux.cfg/default со следующим содержимым:

default dos
label dos
kernel memdisk
append initrd=fdboot.img

Образ загрузочной дискеты надо сохранить, как fdboot.img. Эти файлы можно скачать в виде ZIP-архива.

Популярный способ настройки загрузки по PXE — это dhcpd и TFTP daemons. Это сложная задача, но к счастью, я нашёл небольшой и простой в использовании сервер netboot (aur/netboot под Arch Linux). Он комбинирует возможности серверов DHCP и TFTP. В моём роутере я запускал его, не отключая DHCP server, поскольку они вроде не должны конфликтовать.

Запускаете netboot в директории, где лежат загрузочные файлы PXE. После DHCP-запроса сервер возвращает файл pxelinux.0*.

netboot {broadcast IP} {local machine IP} {IP for client machine} {MAC pattern}

{MAC pattern} должен соответствовать MAC-адресу сетевой карты клиента.

К примеру, мой адрес в локальной сети 192.168.1.0, IP моей машины с Linux 192.168.1.10, а MAC моей карты 3com заканчивается на 66:

netboot 192.168.1.255 192.168.1.10 192.168.0.20 -66

В качестве fdboot.img я использовал стандартный диск MS-DOS 6.22. Затем я всё это загрузил — и оно заработало!

Попытки скопировать данные с IDE-диска


Поскольку у MFM-контроллера собственный BIOS, диск было видно под MS-DOS. Но мне требовался накопитель, на который я бы мог скопировать файлы. Сначала я решил попробовать IDE-диск. У материнской платы было два IDE-канала. Я подключил диск на 40 Gb от Seagate. Система его обнаружила, но, к сожалению, после этого MFM перестал быть доступным. Игры с джамперами не помогли. Возможно, происходил какой-то конфликт между двумя дисковыми процедурами.

Копирование данных на USB-флэшку


Затем я попробовал другой подход. Я установил карту расширения PCI USB и драйверы USBASPI для MS-DOS. Теперь конфликтов не было, и мне удалось скопировать весь диск на USB-флэшку!

xcopy c:\ d:\ /e /k

e7542ca9820808a8b6021d4aaba543cc.jpg

5d29bb564e502c84d0dc75802dcc16cf.jpg
Четыре карты расширения на материнке. Слева направо: графическая карта MDA, контроллер диска MFM, сетевая карта 3com Ethernet, карта расширения USB.

В результате у меня появилось более двух сотен файлов Microsoft Word для DOS, которые я преобразовал в RTF.

© Habrahabr.ru