Apple Mac та химерні пристрої. LTO, SAS, Fibre Channel, eSATA

Темою цієї статті є підключення до Маку зовнішніх пристроїв за інтерфейсами SAS, Fibre Channel (FC), eSATA. Відразу обмовимося, що для вирішення завдання доступу до таких пристроїв існує шлях здорової людини: зібрати дешевий PC, застромити туди карту контролера HBA SAS або FC (наприклад, найпростіший адаптер LSI), підключити до цього контролера свої пристрої, встановити на PC будь-який лінукс і працювати з Мак через мережу. Але це банально та нецікаво. Ми підемо шляхом хардкору і підключатимемо свої пристрої безпосередньо до Мака.

Що нам для цього знадобиться:
- пристойна кількість коштів для купівлі нової апаратури, або удача в аукціонах на eBay (де, доклавши трохи зусиль, можна купити необхідну апаратуру попередніх поколінь разів у 10 дешевше, ніж за прайс-листом);
- ця стаття.

Щоб працювати з магнітною стрічкою (нині майже повсюдно представленою форматом 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 так само, як якщо б вони були встановлені безпосередньо всередину корпусу комп'ютера. За рахунок цього можливі будь-які розширення апаратної конфігурації Мака, був би адаптер і драйвери.

Концептуально найпростішим способом вирішення завдання є зовнішній бокс для адаптерів PCIe з інтерфейсом Thunderbolt (PCIe card expansion system), який можна встановити контролер (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.

Apple Mac та химерні пристрої. LTO, SAS, Fibre Channel, eSATA

Драйвер, природно, потребує інсталяції. Перед подібними діями автор радить завжди робити снапшот файлової системи APFS завантажувального диска командою

tmutil localsnapshot

або копію завантажувального диска, якщо там HFS +. Мало що. Потім із снапшота буде легко відкотитися.

Далі недосвідчений, але виявляє належну обачність, розум, безсумнівно, схилиться до того, щоб уважно прочитати інструкцію ATTO з інсталяції драйвера і виконати її. В результаті – тадам! - Отримуємо операційну систему, виснучу на етапі завантаження. Тут нам може стати в нагоді снапшот, з якого можна відновитися, викликавши Time machine з розділу відновлення, або ж з того ж розділу відновлення можна вручну стерти хвороби kext з каталогу розширень ядра (автор у загальному випадку не рекомендує так робити).

Чому так відбувається? Тому що про нас подбала фірма Apple. В останніх версіях macOS не можна так просто взяти та впровадити сторонній код у процес завантаження. Добрі програмісти Apple заблокували подібну деструктивну поведінку. Точніше заблокували наполовину, коли очікування драйвера впроваджується, а сам драйвер немає, тому все просто зависає.

Що має робити досвідчений розум перед інсталяцією драйвера? По-перше, дати команду:

csrutil status

Якщо у відповідь на неї ми отримуємо:

Статус захисту цілісності системи: увімкнено.

то це означає, що добрі програмісти Apple дбають про нас, тому нічого в нас не вийде, поки ми не відключимо їхній чудовий захист. Для цього перезавантажуємось у розділ відновлення (⌘R), викликаємо термінал і даємо команду:

csrutil disable

Після цього перезавантажуємося в робочу систему, і вже тоді встановлюємо драйвер, а заразом і конфігураційну утиліту ATTO (у принципі, конфігураційна утиліта потрібна лише для діагностики і не потрібна при нормальній роботі). Під час справи, коли попросять, підтверджуємо в системних налаштуваннях авторизацію фірми ATTO. Після інсталяції можна знову перезавантажитись у розділ відновлення та дати команду

csrutil enable

У Apple знову про нас дбають.

Тепер ми маємо підтриманий драйвером інтерфейс до зовнішніх пристроїв SAS (або FС, якби використовувався конвертер FC). Але як працювати зі стрічкою на логічному рівні?

Як відомо недосвідченому, але ерудованому розуму, будь-яка Unix-сумісна система підтримує стрічкові накопичувачі на рівні ядра та основних системних утиліт, до яких, перш за все, відносяться mt (управління стрічкопротяжкою) і tar (архіватор, що має підтримку роботи з архівами на стрічці) . Однак що уточнить на це досвідчений розум? Будь-яка Unix-сумісна система, крім macOS. Фірма Apple подбала про нас, вилучивши підтримку стрічкових пристроїв зі свого коду.

Але невже не можна повернути цей код, портувавши стандартні опенсоурсні утиліти Unix у macOS? Хороша новина полягає в тому, що це вже зробила фірма Tolis (посилання на яку я не наводжу) у своєму продукті Tolis Tape Tools. Погана новина полягає в тому, що користування результатами своєї роботи згадана фірма оцінює у 399 доларів США. Оцінки цього факту можуть бути різними, але особисто автор не готовий до того, щоб платити комусь 400 баксів за код, здебільшого написаний зовсім іншими людьми і який знаходиться у відкритому користуванні з 1970-х років, а тому це питання автор для себе вважає закритим. (Між іншим, на гітхабі є занедбаний у смутному стані вільний проект IOSCSITape на цю тему).

На щастя, у світі існує корпорація IBM, комерційні апетити якої мають зовсім інші масштаби, і тому не виявляються у будь-якій дрібниці. Зокрема, нею розроблена стрічкова файлова система LTFS з відкритим вихідним кодом, яка розповсюджується навіть для macOS.

Тут існує аспект, який полягає в тому, що різні виробники стрічкових пристроїв випускають свої власні версії LTFS, що підтримують свої пристрої. Оскільки автор використовує стрічковий накопичувач IBM, і LTFS встановив від IBM. Для накопичувачів інших фірм, можливо, будуть потрібні їхні власні порти LTFS. І існує універсальна реалізація openLTFS на гітхабі та хоумбрю.

Для нас важливо, що 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 хвилин).

Apple Mac та химерні пристрої. LTO, SAS, Fibre Channel, eSATA

Зрештою, все готове для підключення. Підключаємо ланцюжок: Mac – адаптер T3/T2 – кабель Thunderbolt – конвертер ATTO – кабель SAS – стрічковий накопичувач (вибір з кількох портів на Маку, конвертері та накопичувачі неважливий). Включаємо живлення конвертера. Включаємо живлення стрічкового накопичувача. Очікуємо закінчення ініціалізації накопичувача з його індикації.

Даємо команду:

ltfs -o device_list

Ура! Отримуємо (у звичайній для IBM діагностичній манері):

307 LTFS14000I LTFS starting, LTFS version 2.4.2.0 (10418), log level 2.
307 LTFS14058I LTFS Format Specification version 2.4.0.
307 LTFS14104I Помилка «ltfs -o device_list».
307 LTFS14105I Цей binary є для Mac OS X.
307 LTFS14106I GCC version is 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS17085I Plugin: Loading "iokit" tape backend.
Tape Device list:.
Device Name = 0, Vendor ID = IBM, Product ID = ULT3580-TD5, Serial Number = **********, Product Name = [ULT3580-TD5].

Вставляємо касету, чекаємо завантаження та форматуємо:

mkltfs -d 0 -nTest -r "size=10M/name=.DS_Store"

Тут параметр -d задає номер накопичувача (завжди нуль, якщо він єдиний, але опускати в цій команді не можна), -n – ім'я стрічки (можна не вказувати), а параметр -r вимагає розміщувати вміст файлів .DS_Store, що не перевищують за розміром 10 мегабайт, в індексному (тобто призначеному для каталогів) розділі стрічки замість розділу даних.

Пішло таємниче життя у стрічковому накопичувачі. Чекаємо пару хвилин, отримуємо у відповідь:

LTFS15000I Starting mkltfs, LTFS version 2.4.2.0 (10418), log level 2.
LTFS15041I Вимкнено "mkltfs -d 0 -nTest -r size=10M/name=.DS_Store".
LTFS15042I Цей binary є для Mac OS X.
LTFS15043I GCC version is 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
LTFS17087I Kernel version: Darwin Kernel Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
LTFS15003I Formatting device '0'.
LTFS15004I LTFS volume blocksize: 524288.
LTFS15005I Index partition placement policy: size=10M/name=.DS_Store.

LTFS11337I Update index-dirty flag (1) - NO_BARCODE (0x0x1021081e0).
LTFS17085I Plugin: Loading "iokit" tape backend.
LTFS30810I Opening a device through iokit driver (0).
LTFS30814I Vendor ID є IBM.
LTFS30815I Product ID є 'ULT3580-TD5'.
LTFS30816I Firmware revision is H976.
LTFS30817I Drive serial is **********.
LTFS17160I Maximum device block size є 1048576.
LTFS11330I Loading cartridge.
LTFS30854I Logical block protection is disabled.
LTFS11332I Load successful.
LTFS17157I Зміна drive setting to write-anywhere mode.
LTFS15049I Checking the medium (mount).
LTFS30854I Logical block protection is disabled.
LTFS15010I Creating data partition b на SCSI partition 1.
LTFS15011I Creating index partition on SCSI partition 0.
LTFS17165I Resetting the medium's capacity proportion.
LTFS11097I Partitioning the medium.
LTFS11100I Writing label to partition b.
LTFS11278I Writing index to partition b.
LTFS30808I READ_ATTR (0x8c) returns -20501.
LTFS30865I READ_ATTR returns Invalid Field in CDB (-20501) 0.
LTFS30836I Cannot read attribute (-20501).
LTFS11336I Примітка: не існує. Ignore the expected error.
LTFS17235I Записувати index NO_BARCODE на b (Reason: Format, 0 files) **********.
LTFS17236I Wrote index NO_BARCODE (b, **********).
LTFS11337I Update index-dirty flag (0) - NO_BARCODE (0x0x1021081e0).
LTFS11100I Writing label to partition a.
LTFS11278I Writing index to partition a.
LTFS30808I READ_ATTR (0x8c) returns -20501.
LTFS30865I READ_ATTR returns Invalid Field in CDB (-20501) 0.
LTFS30836I Cannot read attribute (-20501).
LTFS11336I Примітка: не існує. Ignore the expected error.
LTFS17235I Записування indexу NO_BARCODE на (Reason: Format, 0 files) 9068025555.
LTFS17236I Wrote index NO_BARCODE (a, **********).
LTFS15013I Volume UUID is: 3802a70d-bd9f-47a6-a999-eb74ffa67fc1.

LTFS15019I Volume capacity is 1425 GB.
LTFS30854I Logical block protection is disabled.
LTFS15024I Medium formatted успішно.

Монтуємо відформатовану стрічку:

sudo mkdir /Volumes/LTFS
sudo chmod 777 /Volumes/LTFS/
sudo ltfs /Volumes/LTFS

Отримуємо ще кілька хвилин роботи накопичувача, діагностику:

307 LTFS14000I LTFS starting, LTFS version 2.4.2.0 (10418), log level 2.
307 LTFS14058I LTFS Format Specification version 2.4.0.
307 LTFS14104I Помилка «ltfs /Volumes/LTFS/».
307 LTFS14105I Цей binary є для Mac OS X.
307 LTFS14106I GCC version is 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS14063I Sync type is time, Sync time 60 sec.
307 LTFS17085I Plugin: Loading "iokit" tape backend.
307 LTFS17085I Plugin: Loading "unified" iosched backend.
307 LTFS14095I Натисніть на tape device write-anywhere mode to avoid cartridge ejection.
307 LTFS30810I Opening a device through iokit driver (0).
307 LTFS30814I Vendor ID є IBM.
307 LTFS30815I ID Product 'ULT3580-TD5'.
307 LTFS30816I Firmware revision is H976.
307 LTFS30817I Drive serial is **********.
307 LTFS17160I Maximum device block size is 1048576.
307 LTFS11330I Loading cartridge.
307 LTFS30854I Logical block protection is disabled.
307 LTFS11332I Load successful.
307 LTFS17157I Зміна drive setting to write-anywhere mode.
307 LTFS11005I Mounting the volume.
307 LTFS30854I Logical block protection is disabled.
307 LTFS17227I Tape attribute: Vendor = IBM.
307 LTFS17227I Tape attribute: Application Name = LTFS.
307 LTFS17227I Tape attribute: Application Version = 2.4.2.0.
307 LTFS17227I Tape attribute: Medium Label =.
307 LTFS17228I Tape atribut: Text Localization ID = 0x81.
307 LTFS17227I Tape attribute: Barcode =.
307 LTFS17227I Tape attribute: Application Format Version = 2.4.0.
307 LTFS17228I Tape attribute: Volume Lock Status = 0x00.
307 LTFS17227I Tape atribut: Media Pool name =.
307 LTFS14111I Початкова процедура здійснена успішно.
307 LTFS14112I Invoke 'mount' command to check the result of final setup.
307 LTFS14113I Зазначений mount point is listed if succeeded.

І ось вона, наша стрічка на робочому столі з ім'ям Test(ltfs)! Безіменна стрічка отримає ім'я OSXFUSE Volume 0 (ltfs).

Тепер можна з нею працювати.

Apple Mac та химерні пристрої. LTO, SAS, Fibre Channel, eSATA

Взагалі треба мати на увазі, що бажано не зловживати переглядом вмісту каталогів стрічки у вікнах файндера, так як це неймовірно витратна для LTFS операція, а краще працювати все-таки командами терміналу, або просто скидати резервно копіюваний каталог оптом на стрічку, як показано у вікні вище.

Існує, до речі, спеціально написана IBM утиліта ltfs_copy та її клони, призначена для більш ефективного копіювання між стрічкою та диском, але поки що автору не вдалося їх знайти у відкритому доступі при поверхневому пошуку.

Розмонтувати стрічку можна командою:

umount /Volumes/LTFS

або просто викинути у кошик.

Загалом у природі існують якісь графічні оболонки для macOS для полегшення цих дій, але чи нам, після таких збочень, боятися набрати кілька рядків у терміналі?

Як побічний наслідок, отримуємо можливість через кабель SAS/4*eSATA підключати зовнішні диски eSATA.

Apple Mac та химерні пристрої. LTO, SAS, Fibre Channel, eSATA

Джерело: habr.com

Додати коментар або відгук