Я люблю ленточные библиотеки
Из всего многообразия оборудования, которое встречается в ЦОДе, ленточные библиотеки — единственный вид, работу которого можно увидеть. Ленточные библиотеки ворочают петабайты данных на магнитных лентах в картриджах, которые отдают лёгкой ностальгией по VHS, и делают это с помощью роботов. А роботы — это (почти) всегда круто. И в одной библиотеке их может быть несколько!
Ленточные библиотеки стыкуются из модулей, как огромные орбитальные станции, а их производители в погоне за максимальной плотностью хранения картриджей находят очень изобретательные решения — от хранения картриджей в несколько слоёв в одном слоте до револьверных механизмов высотой с холодильник и шаттлов, которые передают ленты между разными библиотеками. Это ли не круто?

Поэтому прошу мне верить — мне не приносит ни малейшей радости следующий вывод:
Ленточная библиотека SL150 не должна была существовать.
По-вашему, заявление слишком громкое? Идёмте со мной под кат, где нас ждут увлекательные приключения и подробный разбор всех грехов, воплощением которых стала эта железяка.
Кто такие эти ваши ленточные библиотеки и SL150 в частности
Позвольте сперва немного расставить декорации и рассказать, кто такие вообще ленточные библиотеки и что делает одну лучше другой.
В общем случае, библиотека — это комбинация трёх устройств: приводов для чтения и записи данных на магнитные ленты, слотов для хранения картриджей с этими лентами и роботизированной руки, которая может взять картридж из слота, загрузить в привод, а после завершения работы с ним извлечь его из привода и вернуть на место.
Ленточные библиотеки бывают как отдельно стоящие устройства, так и монтируются в стандартную 19-дюймовую стойку. Подавляющее большинство современных ленточек — модульные, то есть к уже имеющейся библиотеке можно подсоединять дополнительные модули для расширения ёмкости под хранение картриджей и количества слотов под приводы. Но это не обязательно, можно использовать и библиотеку, которая состоит из одного головного модуля.
Oracle SL150 была представлена в 2012 году, через два года после того, как Oracle поглотила легендарную компанию Sun. Разработкой библиотек в Sun, впрочем, занималась приобретённая ею ранее компания StorageTek, из-за чего на некоторых библиотеках встречается вот такой тройной логотип:

SL150 — модульная библиотека, предназначенная для монтажа в стойку. Среди стоечных ленточных библиотек, которые я встречал, у SL150 самый большой дисплей (сенсорный!). За весь жизненный цикл отдельно взятой библиотеки его увидит примерно человек пять, из которых от силы два им даже воспользуются.
Документация по подготовке среды содержит несколько странных условий. Например, сзади стойки требуется оставлять не менее 96,5 сантиметров свободного пространства. Также при планировании монтажа следует учитывать, что головной модуль нужно устанавливать самым первым и на самую высокую позицию в стойке, выделенную под библиотеку, а каждый последующий — сразу под предыдущим, строго в таком порядке.
Ни у одной другой аналогичной библиотеки другого производителя таких требований нет — их собирают в любом порядке, головной модуль может быть почти где угодно в библиотеке. Почему SL150 отличается от остальных?
Миссия невыполнима
Перед вами три модуля робота от разных ленточных библиотек, сверху вниз: для IBM TS3310 (она же Quantum Scalar i500), для библиотек ODM под названием Qualstar и для Quantum Scalar i3/i6.

И вот как на том же самом мерном коврике выглядит робот для SL150:

Ну, во-первых, робот SL150 гигантский. Во-вторых, по этой фотографии более или менее понятен механизм движения роботов Qualstar и Quantum — у обоих явно есть шестерни для перемещения по оси Y. Чего не скажешь о роботе SL150.
Я вас немного обманул — робот от SL150 на этой фотографии лежит вниз головой. Если перевернуть его, как он располагается в библиотеке, и разблокировать механизм, то узел перемещения по оси Y предстанет перед нами во всей своей ужасающей красоте:

Теперь вас не обманывают ни ваши глаза, ни я — робот SL150 перемещается по оси Y внутри библиотеки на ниточках. Прям как Том Круз в том самом кино, название которого я вечно забываю, с небольшой поправкой — у робота ещё есть ролики, которые катаются по вертикально направленным желобам внутри каждого модуля.
Одна тайна SL150 раскрыта — головной модуль должен быть на самом верху, потому что робот из него должен свисать вниз в шахту библиотеки, и не может ни при каких условиях оказаться выше его.
Любой, кто хоть немного смыслит в роботостроении, наверняка согласится: перемещать руку, которая должна попадать в слоты с миллиметровой точностью, подвешивая его на тросах — это, мягко говоря, странная идея. Тросы могут со временем растягиваться, из-за этого плоскость руки робота может перекоситься. Положение робота на оси отслеживать крайне тяжело — любой другой, который ездит по шахте на шестерёнках по зубчатым рельсам, может быть оборудован датчиками угла на каждой из своих осей. Контроллер, хоть и примерно, но будет знать , на сколько оборотов двигателя переместился робот, а значит, что из этого можно сделать вывод о его линейном положении в шахте. У робота SL150 такого датчика нет — можно только очень примерно оценить, насколько далеко он уехал вниз, по количеству оборотов шкива, на который наматываются тросы, да периодически калибровать.
Сразу хочу заметить — как таковая идея тросиков хоть и странная, но неплохо себе работала в прошлой модульной библиотеке StorageTek — SL500. На тех немногих SL500, которые ещё работают у наших заказчиков, сам робот перемещается шустро. По субъективным оценкам, даже быстрее аналогичных роботов на шестернях. И на моей памяти единственный инцидент, связанный с самим роботом, был вызван тем, что с одного из приводов отвалилась лицевая панель и застряла на пути следования, из-за чего он, вполне ожидаемо, остановился и потребовал препятствие устранить. Очевидно, механизм себя зарекомендовал, и понятно, как он оказался в следующей модели. Но по пути он значительно уменьшился и потерял в надёжности.
Кстати, о калибровке. Это нормальный процесс для любой роботизированной системы — узнать, где находятся пределы осей перемещения и точки, относительно которых робот может составить представление о своём положении внутри библиотеки. Обычно это делается так: сначала робот ме-е-едленно катается по каждой оси и записывает, в какой момент срабатывает нажимной датчик в конце либо меняется потребление тока мотором. После чего он с помощью оптического датчика находит калибровочные метки в тех местах, где ожидает их найти — у каждой модели они в разных местах. Все библиотеки это делают. Но, видимо, в силу особенностей строения робота в SL150 этот процесс происходит заметно медленнее остальных.
Помните, как я в предисловии распалялся о том, что работу библиотек можно увидеть? Работу SL150 увидеть нельзя. У неё не предусмотрено ни одного окна, через которое можно увидеть робота в деле. Единственная возможность посмотреть на него, не прерывая деятельность библиотеки — извлечь один из приводов из задней части любого модуля. И если вы это сделаете, то увидите, что робот SL150 делает всё очень неспешно. Неспешно ездит вверх и вниз. Неспешно берёт картриджи из слотов и так же неспешно загружает их в приводы. Очень подолгу смотрит оптическим датчиком на калибровочную метку.
Следующий процесс, который библиотека должна выполнить после калибровки — инвентаризация. На каждом картридже есть уникальный в рамках устройства штрих-код, по нему библиотека отличает один картридж от другого. И в процессе инвентаризации робот сканирует штрих-код на каждом картридже, чтобы составить — вы угадали! — инвентарь.
Самый быстрый способ отсканировать наибольшее количество штрих-кодов — это расположить их один над другим и отсканировать их одним движением сверху вниз или снизу вверх. И в большинстве ленточек картриджи расположены именно так — столбцами, и чего стоило бы включить сканер штрих-кодов на роботе, направить его на самый верхний слот в столбце и просто прокатить робота по всей оси Y сверху вниз? А потом следующий столбец — снизу вверх? Библиотека TS3500 именно так и делает:
SL150 так не делает. Я не совру, если скажу, что процесс инвентаризации в SL150 происходит мучительно долго. Намного дольше, чем у любой другой библиотеки, с которой мне приходилось работать. Потому что она сканирует каждый. Картридж. По одному. Инвентаризация одной полной библиотеки SL150 из 14 модулей общей ёмкостью 450 слотов заняла больше часа. Даже SL500 с тем же тросиковым механизмом сканирует столбцы целиком хотя бы в рамках одного модуля, и инвентаризация её 575 слотов занимает минут 15–20.
Неудивительно, что производитель захотел скрыть это от посторонних глаз. Как будто это не должно было существовать.
Работает — не трогай
Поговорим о нештатных ситуациях, для чего обратимся к доступному для широкой публики руководству по обслуживанию библиотеки SL150. Что делать, если необходимо извлечь модуль робота? В руководстве есть следующий ответ (Remove the Robot Module): «Требуется выключить библиотеку с перемещением робота в парковочную позицию, после чего повернуть ручку блокировки робота, отсоединить кабели и извлечь трей». Ага, теперь понятно, для чего сзади стойки необходимо резервировать не менее девяноста шести с половиной сантиметров свободного пространства — иначе трей упрётся в препятствие и его не удастся извлечь из шасси.
Однако чаще всего необходимость извлечь робота связана с его неисправностью, и он в этой ситуации не может сам приехать в парковочную позицию. Что рекомендует руководство в этом случае? Ответ следующий — теребите специально предусмотренную для этого шестерню (Manually Retract the Robot).

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

Рассмотрим другой вариант развития событий — повреждён механизм подъёма платформы. В руководстве и для этого сценария предусмотрено [решение](Manually Disengage the Robot): «Перерезать все тросы, перерезать шлейф-аккордеон, и извлечь робота по частям». Не забудьте убрать все остатки старого робота, прежде чем ставить нового ^_^.
Little guys that are doing their best
Предположим, вы заменили робота и готовы включать библиотеку обратно. Либо просто хотите включить ее без каких-либо сервисных процедур. Надеюсь, вы готовы убивать время, а ваш бизнес готов к простою, потому что инвентаризация — не единственный процесс, который SL150 делает мучительно долго. Приготовьтесь к загрузке микрокода!
Впрочем, слово «микрокод» тут использовать не совсем корректно. Потому что то, что будет загружаться на библиотеке следующие минут 15 (если повезёт), это:

Не просто встроенный и очень порезанный линукс, а вполне себе полновесный дистрибутив Oracle Linux. И загружаться он будет с флешки! По USB 2.0! Откуда я знаю про флешку и что вообще за зверь-машина крутит на себе этот макро-микрокод? Давайте вернёмся к конструкции модуля робота, снимем белый лист пластика — и нашему взору предстанет следующий набор внутренних компонентов:

Ваши глаза вас не обманывают — это действительно совершенно обычная материнская плата форм-фактора miniITX, к которой кучей разносортных проводов присоединена плата интерконнекта. К этой плате мы ещё вернёмся, а пока сосредоточимся на материнке.
В любой другой библиотеке в качестве контроллера используется отдельная и тесно интегрированная плата, как правило с процессором на энергоэффективной архитектуре ARM, PowerPC либо, изредка, MIPS. Их производительности хватает для небольшого веб-сервера, который отдаёт наружу веб-интерфейс для пользователя и для обеспечения работы самой библиотеки — управление роботом, калибровка, инвентарь, мониторинг датчиков, обработка команд SCSI, вывод информации на переднюю панель. Собственно, это всё, что требуется от контроллера. Тут не нужен целый x86-компьютер.
Тем не менее, именно это и является контроллером SL150 — полноценный компьютер с процессором Intel, распаянным на комично большой для такой задачи материнской плате miniITX. У которой есть и совершенно ненужные в библиотеке параллельный порт, аудиокодек и слот PCI. И поскольку материнка совершенно обычная — у неё нет одного удобного коннектора для соединения с остальной электроникой. Эту задачу решает плата интерконнекта, с которой материнка соединяется огромной пачкой разнокалиберных проводов. Собственно, в этой же плате и находится флешка, с которой загружается управляющая программа.
Вся эта конструкция выглядит так, будто её собирали на коленке, чтобы протестировать все остальные системы, и из-за дедлайнов не успели сделать нормально. Только после релиза уже не осталось возможности переделать всё по-нормальному. Поэтому до самого своего end of life модуль робота для библиотеки SL150 выглядел плюс-минус так же. Разница была лишь в том, что материнские платы периодически снимались с производства и их приходилось менять на другие. В какой-то момент внутри модуля обнаружилась материнская плата от Intel NUC, прикрученная к металлическому адаптеру под отверстия стандарта miniITX.
Забавно, но у Oracle совершенно случайно получилась одна из самых ремонтопригодных библиотек — часть компонентов можно просто пойти и купить в магазине, например, материнскую плату либо флешку под основную память. Но целью это явно не было — тут всё ещё немало компонентов собственной разработки, а ПО довольно закрыто. Чего стоят только шифрованные с помощью AES логи. Тем не менее, однажды мне пришлось менять отдельно материнскую плату. Стойка была расположена слишком близко к барьеру и не позволяла выдвинуть робота целиком. Проблема была именно в материнской плате — при включении на библиотеке загорались все индикаторы, как и положено, но через 10 секунд всё выключалось обратно. На площадке был другой робот, на котором наблюдалась проблема с механикой, но зато хотя бы компьютер запускался нормально. Было четыре часа утра — идеальный момент, чтобы разбудить своего руководителя за благословлением на греховный акт сборки одной рабочей детали из двух неисправных. Библиотека была смонтирована с небольшим нарушением инструкции, о котором я уже упоминал — за стойкой не было достаточно места, чтобы вытащить модуль робота целиком. Выдвигать всю библиотеку из стойки, пусть и всего из трёх модулей, но уже в седьмой раз за ночь мне не хотелось, поэтому работать пришлось вот так:

И после такого библиотека даже заработала и работает уже больше года. Наутро я проверил, что же такое мешало нормально запуститься материнской плате. А у неё банально разрядилась батарейка RTC, и BIOS то ли ждал нажатия F1, то ли перезапускал материнку, а интерконнект не обнаруживал какого-то hearbeat-сигнала в отведённое время и от греха подальше отрубал ей питание.
И ведь, согласно руководству по обслуживанию, заменить неисправную материнку, интерконнект или флешку отдельно от всего модуля робота нельзя, он меняется только целиком. Любой опытный инженер подтвердит, что менять сразу несколько ключевых компонентов любой системы настоятельно не рекомендуется — известные рабочие модули без какой-либо необходимости меняются на новые, в которых могут быть скрытые дефекты. И хорошо ещё, если вендор гарантирует исправность поставляемых запчастей и сам их проверяет перед отправкой на площадку. А если поддержки вендора нет?
Кстати, на стороне вендора ситуация не лучше. Мало того, что детали надо предварительно валидировать, так ещё и материнские платы периодически снимают с производства и им нужно подбирать замену со всеми вытекающими тестированиями, переделками интерконнекта и остального оборудования. И увеличением числа возможных ревизий.
У любого другого вендора, который вполне логично решил не объединять контроллер, интерконнект и робота в одном модуле, обычно две-три ревизии контроллера, одна-две ревизии интерконнекта и одна, редко две, ревизии робота, чаще всего до определённого предела взаимозаменяемые.
Хотите узнать, сколько ревизий модуля робота существует для SL150? ТРИДЦАТЬ ДВЕ. И вендору перед отправкой детали на площадку необходимо проверять, какие из них совместимы с той или иной библиотекой, потому что не все ревизии совместимы с первой попавшейся ревизией шасси базового модуля, которых как минимум четыре. И это ещё каждую деталь проверять на работоспособность. Это, конечно же, при условии, что поддержка вендора есть.
Внимательный читатель спросит — раз там под капотом целый x86, то почему линукс на нём загружается так долго? Если коротко — потому что в Oracle так захотели.
Первые минут двадцать загружается сам Oracle Linux, который мало чем отличается от всем знакомого Red Hat. После этого, однако, мы можем наблюдать проявление греха гордыни: запускается графическая оболочка и открывается какая-то вариация веб-интерфейса. Но не просто веб-интерфейса, а веб-интерфейса, построенного на каком-то внутреннем фреймворке Oracle. К сожалению или к счастью, фронтенд-разработка не входит в число моих навыков, и я не могу в полной мере оценить, что за монстр обеспечивает работу самого модного UI, который когда-либо запихивали на ленточную библиотеку, однако я точно знаю, что инструмент для этой задачи выбран несоразмерно тяжёлый и сложный. Потому что всё, что можно сделать с локального тач-интерфейса, это:
открывать и закрывать замки на магазинах;
просматривать логи библиотеки;
запускать инвентаризацию;
просматривать список содержимого библиотеки;
настраивать параметры сети для веб-интерфейса с куда более богатыми возможностями;
запарковать робота и выключить библиотеку.
Обратите внимание — в этом списке нет пункта «перемещать картриджи между слотами». Вы не можете перемещать картриджи с помощью локального интерфейса SL150. На других библиотеках с дисплеями, например, на Quantum i500 — можете. На IBM TS4300 с монохромным дисплеем и кнопками курсора — можете! А на SL150, с её самым большим в классе дисплеем — не можете. Потому что Oracle так захотел.
Самое время обратить внимание на плату интерконнекта, которую я уже несколько раз упоминал. Вы её уже видели на одной из прошлых фотографий, но вот вам фотография интерконнекта из робота более поздней ревизии:

Плата интерконнекта выполняет роль синей изоленты во всей этой системе — управляет питанием материнской платы, а также обеспечивает коммуникацию между материнской платой и роботом, приводами основного модуля и модулями расширения. Порты для сети менеджмента, кстати, тоже там, две штуки, до 100 мегабит. Почему до 100 мегабит, когда на любой материнке уже есть стандартный гигабит? Об этом чуть-чуть позже.
Вы, возможно, уже заметили на плате интерконнекта девять подозрительно знакомых прямоугольных портов. В SL150 они используются для подключения модулей расширения. Выглядят как обычные порты USB? Это и есть порты USB. Причём порты USB-A используются как на стороне основного модуля, так и на модуле расширения, и соединяются кабелем с разъёмами USB-A на обоих концах.
Такие кабели явно запрещены спецификацией USB, потому что попытка соединить два хоста USB таким кабелем приведёт выходу из строя обоих устройств.
Ладно, возможно, здесь используются только разъёмы USB, потому что они относительно дешёвые и просты в автоматизированной установке, но по контактам бегает какой-то другой, не совместимый с USB протокол, например, RS-232. Ведь так?..
НЕТ. ЭТО USB.
В SL150 Universal Serial Bus действительно очень universal, потому что поверх USB тут работает вообще почти всё. Помимо питания, плата интерконнекта соединяется с материнкой только по USB 2.0. По сути, эта плата — один большой USB-хаб. На этой плате можно найти флешку — и именно с неё, со скоростями USB 2.0, загружается линукс. И в зависимости от ревизии робота это может длиться как минут 15, так и полтора часа. Кроме того, на интерконнекте расположены порты Ethernet, и поскольку они тоже работают поверх USB 2.0 — они и ограничены скоростью в 100 мегабит. На материнке есть свой порт Ethernet, и почти во всех ревизиях он поддерживает скорости до гигабита. Но он не используется.
Читатель может спросить — кого вообще волнует, с какой скоростью работает порт менеджмента? Лишь бы работал. А я отвечу — того, кому придётся обновлять прошивку на этом чуде. Потому что «прошивка» — это по сути целый линуксовый rootfs, со всеми binutils, X11-сервером, со всей тяжелейшей вебмордой на фреймворке имени Оракла. Эта «прошивка» весит семьсот мегабайт. Для сравнения — прошивка для предшествующей ей SL500 — 30 мегабайт. Для Quantum i3 в том же сегменте рынка — 160 мегабайт.
Кстати, в зависимости от браузера и его версии загрузка прошивки может не начаться, не закончиться или просто оборваться без какой-либо обратной связи.
Раз уж мы упомянули браузер. Если с помощью подключённой к библиотеке клавиатуры выйти из полноэкранного режима Firefox и открыть историю, можно увидеть следующее:

Кто-то из разработчиков, не запариваясь, прям оттуда загуглил «Как сделать сессию xorg из одного приложения» и забыл за собой почистить историю. Ещё и какие-то новости на Yahoo! почитал. Это значит, что этот самый образ, который прошёл в прод, в какой-то момент смотрел напрямую в интернет. Не собирался какими-либо билд-скриптами, не деплоился из какого-то золотого образа. Так делают в маленьких доморощенных проектах, но никак не в мультимиллиардной корпорации, которая сейчас впереди планеты всей, спотыкаясь об собственные ноги, гонится за прибылью от бума эйая. Это не должно было существовать.
Запускать на этом комплексе полноценности Doom я не стал. Как только стало понятно, что это обычный x86 компьютер — с обычным дисплеем HDMI и обычными портами USB — такая задача для меня потеряла всякий интерес. Можно джейлбрейкнуть встроенную систему, но куда проще просто загрузить какой-нибудь другой линукс, или даже винду, и творить с ними всё что душе угодно. Или, наоборот, можно перехватить видеовыход и направить на внешний монитор. Да что угодно уже можно делать с этим устройством — мы с вами уже давно покинули вотчину Солнца и живём в проклятом мире собственного творения. Продуктом Божьего промысла это устройство не является, и ничего святого в его создании не было.

Постмортем
Официальная поддержка библиотеки SL150 прекращена в мае 2023 года. Эта модель была единственной новой моделью, выпущенной после упразднения Sun в жерле Oracle, и последней моделью линейки StorageTek. Больше ленточных библиотек компания Oracle не выпускала.
Вы, возможно, заметили, что все описанные мной проблемы касаются в основном сервиса, и резонно скажете — но оно же работает. Тут мне нечего возразить — мой взгляд однобок, и эти 20+ страниц можно расценивать как простое нытьё. Я не ставил себе задачу написать рациональный и всесторонний анализ продукта — для этого есть даташиты и обзоры. Но я точно знаю, что все работы с SL150 — и обновление прошивок, в ходе которого оно может без предупреждения перестать загружаться; и бесконечное ожидание загрузки невероятно раздутой операционной системы, только чтобы спустя час увидеть ошибку робота или парковочного замка; ожидание инвентаризации — всё это отняло недели, если не месяцы моей жизни. И я считаю, что заслужил право об этом публично поныть.
Я бы немало отдал за возможность увидеть, какая цепочка решений, — как со стороны менеджмента, так и со стороны проектирования, — привела к появлению этого продукта и его выходу на рынок. Мне бы хотелось видеть цифры: сколько ожидалось потратить на постпродажное сопровождение этого продукта и сколько получилось по факту, как долго шла разработка, сколько человек участвовало. Но, к сожалению, я могу только расплывчато предположить, что проекту урезали финансирование, а у команды разработки не хватило опыта, чтобы создать новый механизм и сопровождающую электронику под выделенные средства.
Возможно, описание этой несвятой конструкции отзовётся знакомой болью у многочисленных коллег по несчастью — у инженеров, у разработчиков, у проектировщиков систем. Возможно, станет притчей для менеджеров — вот к чему приводит чрезмерная оптимизация расходов.
Приглашаю вас поделиться своими спекуляциями в комментарии. И я надеюсь, что теперь вы готовы со мной согласиться:
