Разработчик OpenBSD 14 лет чинил старый Sun-4/260 с дисками SMD
Разработчик OpenBSD Miod Vallat опубликовал историю о восстановлении старого сервера Sun Microsystems с дисками стандарта SMD (Storage Module Device), интерфейса высокоёмких накопителей конца 1970-х, 1980-х годов, официально стандартизированного как ANSI X3.91M-1982 в 1982 году (после пяти лет работы) и пересмотренного в 1987-м. Sun устанавливала SMD-диски в старшие серверы и рабочие станции через контроллеры Xylogics; сами диски (сначала на пластинах 11 дюймов, позже 8 дюймов) крутились со скоростью 3600 об/мин (у части дисков Fujitsu, до 3961 об/мин) и весили, по словам автора, «как дохлый осёл, а то и два». Самый ёмкий SMD-накопитель, по оценке автора, вмещал около 1,25 ГБ, меньше двух третей от 2 ГБ SCSI-диска Micropolis 1924, которым он пользовался в начале 2000-х.
С 2000 года автор занимался портом OpenBSD на архитектуру sun3, но не имел ни одного SMD-диска, чтобы протестировать драйверы контроллера Xylogics. Ситуация изменилась летом 2001 года: годом ранее он обнаружил списанный корпус Sun-4/260 рядом с подходящей по форм-фактору полкой SMD-дисков и потратил ещё год, уговаривая владельцев отдать оборудование. Материнская плата Sun-4/260, квадратная плата формата 9U с 32-разрядным SPARC-процессором на 16,67 МГц и отдельным блоком плавающей точки, двумя последовательными портами, портом для клавиатуры и мыши Sun Type 3, монохромным кадровым буфером с разрешением 1600×1200 и Ethernet-интерфейсом; штатной оперативной памяти на плате не было, она устанавливалась платами VME (по 8, 16 или 32 МБ, максимум четыре платы, итого до 128 МБ). Контроллеры хранения также ставились в VME-слоты: обычно SCSI-контроллер для внутреннего отсека дисков в 7-м слоте и ещё один контроллер (SCSI или SMD, иногда два) в 8-м. Из двух SMD-дисков в полке (сырая ёмкость около 368 МБ, отформатированная, 280 МБ) рабочим тогда казался только один; 15 июля 2001 года автор отчитался в рассылке разработчиков OpenBSD, что подключил SMD- и SCSI-диски к бездисковому 4/260 и система, «медленная как чёрт», заработала.
Машина после этого включалась лишь на несколько часов раз в пару лет, а в какой-то момент у неё сгорел встроенный Ethernet-интерфейс, видимых повреждений на плате не было, предохранитель цел, и автор предположил неисправность одной из впаянных микросхем: либо самого Ethernet-контроллера Intel 82586, либо (что вероятнее) сопутствующей микросхемы, например манчестерского кодера-декодера. Проблему решили в 2011 году: Peter Eriksson в Швеции спас от переработки партию VME-плат, а другой разработчик OpenBSD, Johan M:son Lindman, организовал их доставку автору; среди плат нашлись две платы Ethernet на Intel 82586 (номер детали Sun 501-1153), которые вернули 4/260 в сеть. Заодно выяснилось, что автор всё это время неправильно подключал один из кабелей SMD: второй диск, Fujitsu-M2333 на 268 МБ, который считался мёртвым, на самом деле исправен, при правильной разводке кабелей заработали оба накопителя, CDC EMD 9720 на 268 МБ и Fujitsu-M2333 на 268 МБ.
Но переустановка системы вскрыла новую проблему: чтение сектора второй ступени загрузчика стало падать с непонятной ошибкой «xy: error A», которую не выдавали ни сами загрузочные блоки, ни штатная диагностика, сообщение приходило из самого монитора ПЗУ (PROM). Ни переустановка, ни откат старой версии загрузчика не помогали. Автор пошагово добавлял отладочный вывод в код первой ступени загрузчика (её объём жёстко ограничен 8 КБ, поэтому пришлось сокращать остальные сообщения до одной буквы) и установил, что сбой происходит на первой же операции чтения диска, при попытке прочитать блок в 16 КБ. Оказалось, что в июле 2003 года OpenBSD, вслед за аналогичным изменением во FreeBSD, сменил размер блока файловой системы по умолчанию с 8 КБ на 16 КБ, а монитор ПЗУ Sun имел собственный недокументированный (хотя и объявленный в одной из публичных структур данных) предел на размер одной операции ввода-вывода, 8216 байт, то есть чуть больше 8 КБ. Решением стало ограничить размер запросов ввода-вывода в коде загрузчика этим пределом и разбивать более крупные чтения на несколько операций.
Современные диски автоматически подменяют повреждённые сектора резервными и сообщают об ошибке, только когда резерв исчерпан, тогда пора менять диск. У SMD-дисков похожая функция есть, но список повреждённых секторов и их замен обязан загружать и пополнять сам программный драйвер; этот участок кода драйвера контроллера Xylogics был протестирован слабо, если вообще тестировался, и вызывал массу проблем и лишних сообщений об ошибках, о чём автор сообщал коллегам-разработчикам ещё в письме от 11 января 2015 года, на этом месте сохранённый текст обрывается на середине фразы, и итог того эпизода в источнике не приводится.
Ключевые факты
- SMD (Storage Module Device), стандарт высокоёмких дисков конца 1970-х, 1980-х, ANSI X3.91M-1982, диски весили «как дохлый осёл»; самый ёмкий из них, около 1,25 ГБ, меньше двух третей 2-гигабайтного SCSI-диска, которым автор пользовался в начале 2000-х
- В 2001 году автор с трудом (за год уговоров) заполучил списанный Sun-4/260 (SPARC 16,67 МГц, до 128 МБ ОЗУ на платах VME) с полкой из двух SMD-дисков и завёл на нём OpenBSD
- В 2011 году партия спасённых от утилизации VME-плат из Швеции вернула машине сгоревший Ethernet и заодно выявила, что второй SMD-диск все эти годы просто был неправильно подключён, а не сломан
- Смена размера блока файловой системы OpenBSD с 8 КБ на 16 КБ в 2003 году сломала загрузку, упёрлась в недокументированный лимит монитора ПЗУ Sun в 8216 байт на одну операцию ввода-вывода
- Обработка сбойных секторов на SMD-дисках, в отличие от современных накопителей, полностью лежит на программном драйвере, этот код в контроллере Xylogics был протестирован слабо и вызывал проблемы ещё в 2015 году
Почему это важно
Материал не про новую технологию, а про то, как сохраняется знание о старой: автор, разработчик OpenBSD, поддерживающий драйверы для архитектуры sun3/SPARC, и его текст документирует редкое сегодня железо (интерфейс SMD, контроллеры Xylogics, мониторы ПЗУ Sun) и логику драйверов, которую иначе никто бы не записал. Это часть более широкой работы open-source проектов вроде OpenBSD по поддержке legacy-платформ и по цифровой археологии старых вычислительных систем.
Кому это важно
Энтузиастам ретрокомпьютинга и коллекционерам старого оборудования Sun/SPARC, разработчикам BSD-систем, которые пишут или поддерживают драйверы для старого железа, и всем, кто интересуется историей систем хранения данных до эпохи SCSI и современных SSD.
Как это применить
История, хороший пример методичной низкоуровневой отладки: автор сузил проблему пошаговым добавлением диагностики в код с жёстким ограничением по размеру (8 КБ), а не гаданием, и не поверил на слово собственному прежнему выводу о «сломанном» диске, перепроверил физическое подключение кабелей, когда все программные пути были исчерпаны. Отдельный урок, проверять предположения заново при любом внешнем изменении окружения (в данном случае, при смене размера блока файловой системы, для которой на первый взгляд не было причин ломать загрузку старой машины).
Можно ли доверять
Источник, личный технический блог самого автора (source_quality: full), первого лица, приводящего документальные подтверждения: точные даты и цитаты писем в рассылку разработчиков OpenBSD, вывод команды dmesg с конкретными параметрами дисков и контроллеров. Причина поломки Ethernet-интерфейса прямо обозначена автором как предположение («вероятно», «более вероятно»), а не установленный факт, это не искажает материал, но стоит иметь в виду.
Риски и подводные камни
Сохранённый текст обрывается на середине письма от 11 января 2015 года про баги обработки сбойных секторов в драйвере Xylogics, чем закончилась эта история, источник не сообщает. Дата публикации самой заметки в тексте не указана, известны только даты цитируемых писем (2001 и 2015 годы), так что итоговая хронология работ восстановлена по этим меткам.
«Когда свободных резервных секторов больше не остаётся, контроллеру ничего не остаётся, кроме как сообщить об ошибке, и в этот момент пора планировать замену диска.»
— Miod Vallat, автор материала