Темата на настоящата статия е свързването на външни устройства към Mac чрез интерфейсите SAS, Fibre Channel (FC), eSATA. Незабавно ще уточним, че за решаването на задачата за достъп до такива устройства съществува прост и обикновен начин: да съберем евтин PC, да поставим карта контролер HBA SAS или FC (например, най-простият адаптер LSI), да свържем своите устройства към този контролер, да инсталираме на PC всякакъв линукс и да работим с Mac през мрежата. Но това е банално и скучно. Ние ще тръгнем по пътя на хардкора и ще свързваме устройствата си директно към Mac.
Какво ще ни е необходимо за това:
– прилично количество средства за закупуване на нова техника или малко късмет на аукциони в eBay (където, с малко усилия, можете да закупите нужната техника от предишни поколения десет пъти по-евтино, отколкото по ценовия списък);
– тази статия.
За работа с магнитна лента (в момента почти навсякъде представена с формата LTO) е необходимо да имате лентово устройство (стример) или лентова библиотека по стандарт LTO. Това е доста скъпо устройство при първоначална покупка (от стотици хиляди рубли), но е със стойност, която е разумна при закупуване на втора ръка. Тъй като поколенията LTO се променят на всеки около две години и съвместимостта е ограничена до две поколения, вторичният пазар е достатъчно наситен с работещи устройства на около четири години и повече, т.е. от предишните поколения и по-назад. Ако купувате ново устройство за търговски цели, сами разбирате защо ви е необходимо. Ако искате да закупите за дома и семейството, можете да разгледате този вариант като начин за архивиране на информация (тъй като носителите са много евтини на гигабайт).
Започвайки от поколение LTO-5 (и отчасти LTO-4), устройствата за работа с магнитна лента се свързват към компютъра чрез интерфейс SAS или FC (обикновено има два варианта на всяко устройство)
От друга страна, компанията Apple любезно ни предоставя в нашия Mac интерфейс USB-C (работещ по протоколите USB, Thunderbolt 3 или DisplayPort), понякога интерфейс Ethernet, както и фирмени адаптери Thunderbolt 3 – Thunderbolt 2 и Thunderbolt – FireWire 800.
Безизходно положение? Не съвсем. За щастие, шината Thunderbolt може да работи в режим PCIe и да предоставя възможност за свързване на PCIe карти по същия начин, както ако бяха инсталирани директно вътре в корпуса на компютъра. За сметка на това са възможни всякакви разширения на хардуерната конфигурация на Mac, стига да има подходящ адаптер и драйвери.
Концептуално най-простият начин за решаване на задачата е външният бокс за PCIe адаптери с интерфейс Thunderbolt (система за разширение на PCIe карти), в който може да се инсталира контролер (Host bus adapter, HBA) SAS или FC. Например, такива боксове произвежда фирма и някои други. Тук има нюанс: не всеки контролер е подходящ, а само този, който има драйвер под macOS. Такива платки изобщо са малко, а най-евтините и популярни (например, същите LSI) не влизат в тях. За щастие, компанията Sonnet е подготвила на PCIe карти с различни ОС чрез интерфейс Thunderbolt.
Друг начин за решение е закупуването на готов конвертор на интерфейс Thunderbolt – SAS или Thunderbolt – FC, който по същество представлява готова конструкция от бокс и контролер. Най-известната компания в тази област е , но има и изделия на други компании.
Забележете, че не всички контролери SAS и FC са сертифицирани за съответствие с LTO стандарта, тъй като това само по себе си струва пари. Някои производители ясно посочват, че работата на техните контролери с лентови устройства не е предвидена.
За пълнота на картината отбелязваме, че компанията mLogic произвежда , представляващо себе си IBM LTO-8 носител в външен корпус, в който незабавно е интегриран конвертер SAS в Thunderbolt 3. Това обаче е нещо още по-екзотично от всичко описано по-горе, особено според нашите мерки. Съмнявам се, че това устройство може да бъде внесено легално в Русия (носителите LTO съдържат криптографски средства, и производители като IBM и HP получават разрешение от ФСБ за внос на всяка модел по тази причина).
По-долу ще разгледаме конкретен комплект оборудване, чийто собственик станах в резултат на няколко успешни придобивания, но общият принцип трябва да се запази за всички варианти.
И така, имаме следното оборудване за работа с лента:
– компютър Apple Mac mini 2018 с macOS 10.15 Catalina, който има USB-C портове с поддръжка на Thunderbolt 3;
– адаптер Apple Thunderbolt 3 / Thunderbolt 2;
– кабел Apple Thunderbolt 2;
– конвертор за интерфейс ATTO ThunderLink SH 1068 (2*Thunderbolt / 2*SAS-2);
– кабел SAS SFF-8088 – SFF-8088;
– лентов носител LTO-5 IBM TS2350;
– картриджи LTO-5, картридж за почистване.
Сега, както се казва, с целия този хаос ще се опитаме да излетим.
Сваляме от сайта на ATTO последната версия на драйвера ThunderLink SH 1068 (очевидно, за нашето удобство, той е обединен с драйвера SH 2068 и се намира в раздела 2068, за което е написано само в самия архив с драйвера) и конфигурационната утилита ATTO.

Драйверът, разбира се, се нуждае от инсталация. Преди подобни действия авторът съветва винаги да направите снимка на файловата система APFS на стартиращия диск с командата
tmutil localsnapshotили резервно копие на стартиращия диск, ако там е HFS+. Никога не се знае. След това от снимката ще бъде лесно да се върнете обратно.
След това неопитният, но проявяващ необходимата предпазливост ум, несъмнено, ще се склони към внимателно прочитане на инструкцията на ATTO за инсталация на драйвера и ще я изпълни. В резултат – тадам! – получаваме операционна система, която се засяда в етапа на зареждане. Тук може да ни помогне снимката, от която можем да се възстановим, извиквайки Time machine от раздела за възстановяване, или можем ръчно да изтрием болезнения kext от директорията за разширения на ядрото от същия раздел за възстановяване (авторът по принцип не препоръчва да се прави така).
Защо се случва така? Защото фирмата Apple се е погрижила за нас. В последните версии на macOS не може просто така да се внедри външен код в процеса на зареждане. Добродушните програмисти на Apple блокираха подобно разрушително поведение. По-точно, блокираха го наполовина, когато очакването за драйвера се внедри, а самият драйвер не, затова всичко просто засяда.
Какво трябва да направи опитният ум преди инсталацията на драйвера? Първо, да даде команда:
csrutil statusАко в отговор на нея получим:
Статус на защитата на системната интегритет: активиран.
това означава, че добродушните програмисти на Apple се грижат за нас, затова нищо не ще излезе, докато не деактивираме тяхната чудесна защита. За целта се рестартира в раздела за възстановяване (⌘R), извикваме терминал и даваме команда:
csrutil disableСлед това се рестартираме в работната система и тогава инсталираме драйвера, както и конфигурационната утилита ATTO (всъщност конфигурационната утилита е нужна само за диагностика и не е необходима при нормална работа). По време на процеса, когато поискат, потвърдете в системните настройки авторизацията на фирмата ATTO. След инсталацията можете отново да се рестартирате в раздела за възстановяване и да дадете команда
csrutil enableApple отново се грижи за нас.
Сега имаме поддържан от драйвера интерфейс към външни устройства SAS (или FC, ако беше използван преобразувател FC). Но как да работим с лента на логическо ниво?
Както е известно на некомпетентния, но ерудитен ум, всяка система, съвместима с Unix, поддържа лентови устройства на ниво ядро и основни системни утилити, към които на първо място се отнасят mt (управление на лентопротяжката) и tar (архиватор, който поддържа работа с архиви на лента). Но какво би уточнил на това ерудитният ум? Всяка система, съвместима с Unix, с изключение на macOS. Фирмата Apple се погрижи за нас, премахвайки поддръжката на лентови устройства от своя код.
Но не може ли този код да бъде възстановен, портвайки стандартните опенсоурсни утилити на Unix в macOS? Добрата новина е, че фирмата Tolis (линк към която не предоставям) вече е направила това в продукта си Tolis Tape Tools. Лошата новина е, че ползването на резултатите от тяхната работа фирмата оценява на 399 долара. Оценките за този факт могат да бъдат различни, но лично авторът не е готов да плаща 400 долара за код, по-голямата част от който е написан от напълно различни хора и е в отворен достъп от 70-те години, затова авторът счита въпроса за затворен. (Между другото, на GitHub има изоставен проект с неясно състояние на същата тема).
За щастие в света съществува корпорацията IBM, чийто търговски апетити имат напълно различни мащаби и не се проявяват в дреболии. В частност, тя е разработила лентовата файлова система LTFS с отворен код, която се разпространява, включително и за macOS.
Тук има nuance, свързан с това, че различни производители на лентови устройства предлагат собствени версии LTFS, които поддържат техните устройства. Тъй като авторът използва лентовия носител на IBM, той е инсталирал LTFS от IBM. За устройства на други компании може да се наложи да инсталирате техните собствени версии на LTFS. Съществува и универсално решение openLTFS в GitHub и Homebrew.
Важно е за нас, че LTFS използва функция за партициониране на носителя, и следователно може да работи с устройства и картриджи, започвайки от поколение LTO-5.
В нашия случай сваляме от сайта на IBM продукта IBM Spectrum Archive Single Drive Edition за macOS, който точно включва реализация на LTFS. Инсталираме продукта успешно с неговия собствен инсталатор. По време на инсталацията се инсталира и пакетът FUSE, при което в системните настройки ще бъде необходимо да потвърдите авторизацията на умния програмист на име Anatol Pomozov, от която в този случай зависи цялата IBM. Респект и уважение към този човек.
Удобно е веднага в файла /Library/Frameworks/LTFS.framework/Versions/Current/etc/ltfs.conf.local да добавите реда:
option single-drive sync_type=time@1
който задава по подразбиране монтиране на лента с нулиране на буфера за запис след 1 минута неактивност (по подразбиране 5 минути).

Накрая, всичко е готово за свързване. Свързваме веригата: Mac – адаптер T3/T2 – Thunderbolt кабел – ATTO конвертор – SAS кабел – лентово устройство (изборът от няколко порта на Mac, конвертора и устройството не е важен). Включваме захранването на конвертора. Включваме захранването на лентовото устройство. Изчакваме инициализацията на устройството да завърши по неговата индикация.
Издаваме командата:
ltfs -o device_listУра! Получаваме (в типичния за IBM диагностичен стил):
307 LTFS14000I LTFS стартира, LTFS версия 2.4.2.0 (10418), ниво на лог запис 2.
307 LTFS14058I LTFS Форматна спецификация версия 2.4.0.
307 LTFS14104I Стартиран от «ltfs -o device_list».
307 LTFS14105I Този бинарен файл е създаден за Mac OS X.
307 LTFS14106I GCC версия е 4.2.1 Съвместим Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Ядрото версия: Darwin Kernel Version 19.4.0: Сряда 4 Мар 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS17085I Плъгин: Зареждане на «iokit» лентов бекенд.
Списък на лентовите устройства:
Име на устройството = 0, ID на производителя = IBM, ID на продукта = ULT3580-TD5, Серийният номер = **********, Име на продукта = [ULT3580-TD5].
Вмъкваме касетата, изчакваме зареждането и форматираме:
mkltfs -d 0 -nTest -r "size=10M/name=.DS_Store"Тук параметърът -d задава номера на устройството (винаги нула, ако е единствено, но не може да бъде пропуснат в тази команда), -n – името на лентата (може да не се посочва), а параметърът -r изисква да се поставят съдържанието на файловете .DS_Store, които не надвишават 10 мегабайта, в индексния (т.е. предназначен за каталози) раздел на лентата вместо в раздела за данни.
Започва мистериозният живот в лентовото устройство. Чакаме няколко минути, получаваме в отговор:
LTFS15000I Започва mkltfs, версия LTFS 2.4.2.0 (10418), ниво на логовете 2.
LTFS15041I Стартирано от «mkltfs -d 0 -nTest -r size=10M/name=.DS_Store».
LTFS15042I Този бинарен файл е изг construido за Mac OS X.
LTFS15043I Версията на GCC е 4.2.1 съвместима с Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
LTFS17087I Версия на ядрото: Darwin Kernel Version 19.4.0: Сря Мар 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
LTFS15003I Форматирам устройството ‘0’.
LTFS15004I Блоков размер на обема LTFS: 524288.
LTFS15005I Политика за разположение на индексния дял: size=10M/name=.DS_Store.LTFS11337I Актуализиране на флага index-dirty (1) — NO_BARCODE (0x0x1021081e0).
LTFS17085I Плъгин: Зареждане на «iokit» бекенд за ленти.
LTFS30810I Отваряне на устройство чрез драйвера iokit (0).
LTFS30814I Идентификатор на производителя е IBM.
LTFS30815I Идентификатор на продукта е ‘ULT3580-TD5 ‘.
LTFS30816I Версия на фърмуера е H976.
LTFS30817I Сериен номер на устройството е **********.
LTFS17160I Максималният размер на блока на устройството е 1048576.
LTFS11330I Зареждане на касета.
LTFS30854I Защита на логически блок е деактивирана.
LTFS11332I Зареждането беше успешно.
LTFS17157I Променям настройката на устройството на режим write-anywhere.
LTFS15049I Проверка на носителя (монтиране).
LTFS30854I Защита на логически блок е деактивирана.
LTFS15010I Създаване на дял b с данни на SCSI дял 1.
LTFS15011I Създаване на индексен дял a на SCSI дял 0.
LTFS17165I Нулиране на пропорцията на капацитета на носителя.
LTFS11097I Партиране на носителя.
LTFS11100I Записване на етикет на дял b.
LTFS11278I Записване на индекс на дял b.
LTFS30808I READ_ATTR (0x8c) връща -20501.
LTFS30865I READ_ATTR връща Невалидно поле в CDB (-20501) 0.
LTFS30836I Не може да прочете атрибут (-20501).
LTFS11336I Атрибутът не съществува. Игнорирайте очакваната грешка.
LTFS17235I Записване на индекса на NO_BARCODE на b (Причина: Формат, 0 файла) **********.
LTFS17236I Записан индекс на NO_BARCODE (b, **********).
LTFS11337I Актуализиране на флага index-dirty (0) — NO_BARCODE (0x0x1021081e0).
LTFS11100I Записване на етикет на дял a.
LTFS11278I Записване на индекс на дял a.
LTFS30808I READ_ATTR (0x8c) връща -20501.
LTFS30865I READ_ATTR връща Невалидно поле в CDB (-20501) 0.
LTFS30836I Не може да прочете атрибут (-20501).
LTFS11336I Атрибутът не съществува. Игнорирайте очакваната грешка.
LTFS17235I Записване на индекса на NO_BARCODE на a (Причина: Формат, 0 файла) 9068025555.
LTFS17236I Записан индекс на NO_BARCODE (a, **********).
LTFS15013I UUID на обема е: 3802a70d-bd9f-47a6-a999-eb74ffa67fc1.LTFS15019I Капацитет на обема е 1425 GB.
LTFS30854I Защита на логически блок е деактивирана.
LTFS15024I Носителят е форматиран успешно.
Монтираме форматираната лента:
sudo mkdir /Volumes/LTFS
sudo chmod 777 /Volumes/LTFS/
sudo ltfs /Volumes/LTFSПолучаваме още няколко минути работа на устройството, диагностика:
307 LTFS14000I LTFS стартира, LTFS версия 2.4.2.0 (10418), ниво на лог запис 2.
307 LTFS14058I LTFS Форматна спецификация версия 2.4.0.
307 LTFS14104I Стартирано от «ltfs /Volumes/LTFS/».
307 LTFS14105I Този бинарен файл е създаден за Mac OS X.
307 LTFS14106I GCC версия е 4.2.1 Съвместим Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Ядрото версия: Darwin Kernel Version 19.4.0: Сряда 4 Мар 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS14063I Тип синхронизация е «време», времето за синхронизация е 60 сек.
307 LTFS17085I Плъгин: Зареждане на «iokit» лентов бекенд.
307 LTFS17085I Плъгин: Зареждане на «обединен» iosched бекенд.
307 LTFS14095I Задайте режима на запис на лентата на write-anywhere, за да избегнете изваждане на касетата.
307 LTFS30810I Отваряне на устройство чрез драйвера iokit (0).
307 LTFS30814I Идентификатор на производителя е IBM.
307 LTFS30815I Идентификатор на продукта е ‘ULT3580-TD5 ‘.
307 LTFS30816I Версия на фърмуера е H976.
307 LTFS30817I Сериен номер на устройството е **********.
307 LTFS17160I Максималният размер на блока на устройството е 1048576.
307 LTFS11330I Зареждане на касета.
307 LTFS30854I Защита на логически блок е деактивирана.
307 LTFS11332I Зареждането беше успешно.
307 LTFS17157I Променям настройката на устройството на режим write-anywhere.
307 LTFS11005I Монтиране на обема.
307 LTFS30854I Защита на логически блок е деактивирана.
307 LTFS17227I Атрибут на лентата: Доставчик = IBM.
307 LTFS17227I Атрибут на лентата: Име на приложението = LTFS.
307 LTFS17227I Атрибут на лентата: Версия на приложението = 2.4.2.0.
307 LTFS17227I Атрибут на лентата: Етикет на медията =.
307 LTFS17228I Атрибут на лентата: Идентификатор на текста на локализацията = 0x81.
307 LTFS17227I Атрибут на лентата: Штрихкод =.
307 LTFS17227I Атрибут на лентата: Версия на формата на приложението = 2.4.0.
307 LTFS17228I Атрибут на лентата: Статус на заключване на обема = 0x00.
307 LTFS17227I Атрибут на лентата: Име на медийната група =.
307 LTFS14111I Началната настройка е завършена успешно.
307 LTFS14112I Извикайте командата ‘mount’, за да проверите резултата от финалната настройка.
307 LTFS14113I Указаният точка на монтиране е изброена, ако е успешна.
И ето я, нашата лента на работния плот, с име Test(ltfs)! Безименната лента ще получи име OSXFUSE Volume 0 (ltfs).
Сега може да се работи с нея.

Всъщност, трябва да имате предвид, че е желателно да не се злоупотребява с прегледа на съдържанието на директориите на лентата в прозорците на Finder, тъй като това е невероятно ресурсно интензивна операция за LTFS, и по-добре е да се работи с команди в терминала или просто да се изхвърли резервираният каталог на лентата каквото е показано в горния прозорец.
Всъщност съществува специално написаната IBM утилита ltfs_copy и нейните клони, предназначени за по-ефективно копиране между лентата и диска, но дотук авторът не успя да ги намери в публичен достъп при повърхностно търсене.
Лентата може да се размонтира с командата:
umount /Volumes/LTFSили просто да бъде изхвърлена в кошчето.
Всъщност в природата съществуват графични интерфейси за macOS, облекчаващи тези действия, но ние ли, след такива извращения, да се страхуваме от потребност да напишем няколко реда в терминала?
Като страничен ефект получаваме възможност да свързваме външни дискове eSATA чрез SAS/4*eSATA кабел.

Източник: habr.com
