Темата на настоящата статия е свързана с подключването на външни устройства към Мак чрез интерфейсите SAS, Fibre Channel (FC), eSATA. Ще уточним предварително, че за решаване на задачата за достъп до такива устройства има път на здравомислещия човек: да сглоби евтин PC, да вмъкне там контролер HBA SAS или FC (например, прост адаптер LSI), да свърже своите устройства към този контролер, да инсталира на PC какъвто и да е Линукс и да работи с Мака през мрежата. Но това е банално и скучно. Ние ще поемем по хардкорния път и ще свързваим нашите устройства директно к Мака.
Какво ни е необходимо за това:
– прилично количество средства за покупка на нова техника или малко късмет на аукционите в eBay (където, с малко усилия, може да купите желаната техника от предишни поколения за десет пъти по-евтино от ценовите списъци);
– тази статия.
За да работите с магнитна лента (в момента почти навсякъде представена в формат LTO), е необходимо да имате ленточен записващ механизъм (стример) или ленточна библиотека стандарта LTO. Това е доста скъпо устройство при първоначална покупка (от стотици хиляди рубли), но значително по-достъпно при покупка втора ръка. Тъй като поколенията LTO се сменят на всеки две години, а съвместимостта е ограничена до две поколения, вторичният пазар е достатъчно наситен с работещи устройства на четири и повече години, т.е. от по-ранни поколения. Ако купувате ново устройство за търговски цели, то сами знаете защо ви е нужно. Ако искате да купите за дома и семейството, можете да разгледате този вариант като начин за архивиране на информация (тъй като самите носители са много евтини на базата на 1 гигабайт).
Започвайки от поколение LTO-5 (и отчасти LTO-4), устройствата за работа с магнитна лента се свързват към компютъра по интерфейса SAS или FC (обикновено съществуват два варианта на всяко устройство)
От друга страна, компанията Apple любезно ни предоставя в нашия Мак интерфейс 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. Това обаче е дори по-екзотично от всичко описано по-горе, особено по мерките на нашите места. Съмнявам се, че това устройство може да бъде внесено легално в Русия (лентовите устройства съдържат криптографски средства, и производители като 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Ако в отговор получим:
System Integrity Protection status: enabled.
това означава, че добрите програмисти от 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 долара за код, който до голяма степен е написан от съвсем различни хора и е наличен в общественото ползване от 1970-те години, и затова авторът счита този въпрос за затворен. (Между другото, в GitHub има забравен свободен проект за на същата тема).
За щастие, в света съществува корпорацията IBM, чийто търговски апетит има съвсем различни мащаби, поради което не се проявява във всякаква маловажно. В частност, тя разработи лентовата файловата система LTFS с отворен код, която е достъпна и за macOS.
Тук има нюанс, в който различни производители на лентови устройства предлагат свои версии на 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 Ядро версия 19.4.0: Сряда, 4 март 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS17085I Плъгин: Зареждане на «iokit» лентов бекенд.
Списък на лентовите устройства:
Име на устройството = 0, Идентификатор на производителя = IBM, Идентификатор на продукта = 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 Тази бинарна версия е изградена за 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 Актуализиране на индекса с мръсен флаг (1) — NO_BARCODE (0x0x1021081e0).
LTFS17085I Плъгин: Зареждане на «iokit» бекенд за ленти.
LTFS30810I Отваряне на устройство чрез iokit драйвер (0).
LTFS30814I ИД на производителя е IBM.
LTFS30815I ИД на продукта е ‘ULT3580-TD5 ‘.
LTFS30816I Версия на фърмуера е H976.
LTFS30817I Серийният номер на устройството е **********.
LTFS17160I Максималният размер на блока на устройството е 1048576.
LTFS11330I Зареждам касета.
LTFS30854I Защитата на логичния блок е деактивирана.
LTFS11332I Успешно заредено.
LTFS17157I Променям настройката на устройството в режим на запис навсякъде.
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 Актуализиране на индекса с мръсен флаг (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 Ядро версия 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 Плъгин: Зареждане на «unified» бекенд за iosched.
307 LTFS14095I Задайте режим на запис на лентата навсякъде, за да предотвратите изтегляне на касетата.
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 Променям настройката на устройството в режим на запис навсякъде.
307 LTFS11005I Монтиране на тома.
307 LTFS30854I Защитата на логичния блок е деактивирана.
307 LTFS17227I Атрибут на лентата: Доставчик = IBM.
307 LTFS17227I Атрибут на лентата: Име на приложение = LTFS.
307 LTFS17227I Атрибут на лентата: Версия на приложението = 2.4.2.0.
307 LTFS17227I Атрибут на лентата: Етикет на медиума =.
307 LTFS17228I Атрибут на лентата: ID за локализация на текста = 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
