Tematem niniejszego artykułu jest podłączenie zewnętrznych urządzeń do Maka za pośrednictwem interfejsów SAS, Fibre Channel (FC) i eSATA. Od razu zaznaczamy, że istnieje prosta droga do rozwiązania problemu dostępu do takich urządzeń: złożenie taniego PC, włożenie karty kontrolera HBA SAS lub FC (na przykład prostego adaptera LSI), podłączenie do tego kontrolera swoich urządzeń, zainstalowanie na PC dowolnego Linuksa i praca z Maka przez sieć. Ale to jest banalne i nieciekawe. My wybierzemy drogę hardcore i podłączymy nasze urządzenia bezpośrednio do Maka.
Co będzie nam potrzebne:
– odpowiednia suma pieniędzy na zakup nowego sprzętu, albo szczęście na aukcjach eBay (gdzie, poświęcając trochę wysiłku, można kupić potrzebny sprzęt wcześniejszych generacji dziesięć razy taniej niż w cenniku);
– ten artykuł.
Aby pracować z taśmą magnetyczną (obecnie prawie powszechnie dostępną w formacie LTO), potrzebny jest napęd taśmowy (streamer) lub biblioteka taśmowa standardu LTO. To dość drogie urządzenie przy pierwotnym zakupie (od kilkuset tysięcy rubli), ale warte rozsądnych pieniędzy przy zakupie używanym. Ponieważ generacje LTO zmieniają się mniej więcej co dwa lata, a kompatybilność jest ograniczona do dwóch generacji, rynek wtórny jest w wystarczającym stopniu nasycony działającymi urządzeniami mającymi cztery lata i więcej, tj. poprzednich i dalszych generacji. Jeśli kupujesz nowe urządzenie do celów komercyjnych, to rozumiesz, do czego jest Ci potrzebne. Jeśli chcesz kupić dla domu i rodziny, to możesz rozważyć tę opcję jako sposób archiwizacji informacji (ponieważ same nośniki są bardzo tanie w przeliczeniu na 1 gigabajt).
Począwszy od generacji LTO-5 (a częściowo LTO-4), urządzenia do pracy z taśmami magnetycznymi są fizycznie podłączane do komputera przez interfejs SAS lub FC (zwykle istnieją dwa warianty wykonania każdego urządzenia)
Z drugiej strony, firma Apple łaskawie dostarcza nam w naszym Maku interfejs USB-C (działający na protokołach USB, Thunderbolt 3 lub DisplayPort), czasami interfejs Ethernet, a także firmowe adaptery Thunderbolt 3 – Thunderbolt 2 i Thunderbolt – FireWire 800.
Brak wyjścia? Niekoniecznie. Na szczęście złącze Thunderbolt może działać w trybie PCIe, umożliwiając podłączenie kart PCIe w sposób, który przypomina instalację ich bezpośrednio w obudowie komputera. Dzięki temu możliwe są wszelkie rozszerzenia konfiguracji sprzętowej Maca, o ile istnieje odpowiedni adapter i sterowniki.
Najprostszy sposób rozwiązania problemu to zewnętrzna obudowa dla adapterów PCIe z interfejsem Thunderbolt (system rozszerzania kart PCIe), do której można zainstalować kontroler (Host bus adapter, HBA) SAS lub FC. Na przykład takie obudowy produkuje firma i kilka innych. Jest jeden szczegół: nie każdy kontroler będzie odpowiedni, a jedynie te, które mają sterowniki pod macOS. Takich kart jest bardzo mało, a najtańsze i najbardziej popularne (na przykład te same LSI) nie należą do tej grupy. Na szczęście firma Sonnet postarała się sporządzić kart PCIe z różnymi systemami operacyjnymi przez interfejs Thunderbolt.
Innym sposobem rozwiązania problemu jest zakup gotowego konwertera interfejsu Thunderbolt – SAS lub Thunderbolt – FC, który w zasadzie jest gotowym zestawem obudowy i kontrolera. Najbardziej znana w tej dziedzinie jest firma , ale można także spotkać produkty innych firm.
Warto zauważyć, że nie wszystkie kontrolery SAS i FC są certyfikowane zgodnie z normą LTO, ponieważ samo uzyskanie takiej certyfikacji wiąże się z kosztami. Niektórzy producenci jednoznacznie informują, że ich kontrolery nie są przeznaczone do pracy z nośnikami taśmowymi.
Aby uzyskać pełny obraz, warto wspomnieć, że firma mLogic produkuje , które jest nośnikiem IBM LTO-8 w zewnętrznej obudowie, w którą od razu zintegrowano konwerter SAS do Thunderbolt 3. To jednak rzecz jeszcze bardziej egzotyczna niż to, co wyżej opisane, szczególnie na nasze warunki. Wątpię, czy to urządzenie można nawet legalnie wwieźć do Polski (nośniki LTO zawierają środki kryptograficzne, a producenci, tacy jak IBM i HP, z tego powodu uzyskują zezwolenie FSB na import każdej modelu).
Dalej rozważymy na przykład konkretne zestawienie sprzętu, którego właścicielem autor stał się w wyniku kilku udanych zakupów, ale zasada ogólna powinna być zachowana dla wszystkich wariantów.
Zatem mamy do dyspozycji następujący sprzęt do pracy z taśmą:
– komputer Apple Mac mini 2018 z macOS 10.15 Catalina, wyposażony w porty USB-C wspierające Thunderbolt 3;
– adapter Apple Thunderbolt 3 / Thunderbolt 2;
– kabel Apple Thunderbolt 2;
– konwerter interfejsu ATTO ThunderLink SH 1068 (2*Thunderbolt / 2*SAS-2);
– kabel SAS SFF-8088 – SFF-8088;
– taśmowy napęd LTO-5 IBM TS2350;
– kasety LTO-5, kaseta czyszcząca.
Teraz, jak to się mówi, z całym tym zamieszaniem postaramy się wzbić w powietrze.
Pobieramy z witryny ATTO najnowszą wersję sterownika ThunderLink SH 1068 (najwyraźniej, dla naszego wygody jest on połączony z sterownikiem SH 2068 i znajduje się w sekcji 2068, o czym pisze tylko w samej archiwum ze sterownikami) oraz narzędzia konfiguracyjnego ATTO.

Sterownik oczywiście wymaga instalacji. Autor przed takimi działaniami zaleca zawsze zrobić migawkę systemu plików APFS dysku startowego komendą
tmutil localsnapshotlub kopię zapasową dysku startowego, jeśli jest tam HFS+. Nigdy nic nie wiadomo. Później z migawki łatwo będzie się cofnąć.
Następnie, niewprawny, ale wykazujący należytą ostrożność, umysł bez wątpienia skłoni się do uważnego przeczytania instrukcji ATTO dotyczącej instalacji sterownika i jej wykonania. W rezultacie – ta dam! – otrzymujemy system operacyjny, który wiesza się na etapie uruchamiania. Tu może przydać się migawka, z której można się odzyskać, wywołując Time Machine z sekcji przywracania, lub z tej samej sekcji przywracania można ręcznie usunąć problematyczny kext z katalogu rozszerzeń jądra (autor ogólnie nie poleca tak robić).
Dlaczego tak się dzieje? Ponieważ zadbała o nas firma Apple. W najnowszych wersjach macOS nie można tak po prostu wprowadzić obcego kodu w proces uruchamiania. Życzliwi programiści Apple zablokowali tego typu destrukcyjne zachowanie. Dokładniej mówiąc, zablokowali to w połowie, kiedy czeka się na sterownik, wprowadza się go, ale sam sterownik nie, więc wszystko się po prostu zawiesza.
Co powinien zrobić obeznany umysł przed instalacją sterownika? Po pierwsze, wydać polecenie:
csrutil statusJeśli w odpowiedzi otrzymujemy:
System Integrity Protection status: enabled.
to oznacza, że życzliwi programiści Apple dbają o nas, więc nic nam nie wyjdzie, dopóki nie wyłączymy ich wspaniałej ochrony. W tym celu restartujemy się w sekcję przywracania (⌘R), wywołujemy terminal i wydajemy polecenie:
csrutil disablePo tym przeładowujemy system roboczy, a następnie instalujemy sterownik oraz narzędzie konfiguracyjne ATTO (w zasadzie narzędzie konfiguracyjne jest potrzebne tylko do diagnostyki i nie jest wymagane podczas normalnej pracy). Po drodze, kiedy zostaniemy poproszeni, potwierdzamy w ustawieniach systemowych autoryzację firmy ATTO. Po instalacji możemy ponownie uruchomić się w trybie odzyskiwania i wydać polecenie
csrutil enableApple ponownie się o nas troszczy.
Teraz mamy interfejs zewnętrznych urządzeń SAS obsługiwany przez sterownik (lub FC, gdyby użyto konwertera FC). Ale jak pracować z taśmą na poziomie logicznym?
Jak wiadomo, dla prostego, ale erudycyjnego umysłu, każda system zgodny z Unix obsługuje nośniki taśmowe na poziomie jądra i podstawowych narzędzi systemowych, w tym mt (zarządzanie taśmą) oraz tar (archiwizator, który wspiera pracę z archiwami na taśmach). Jednak co na to uświadomi doświadczony umysł? Każdy system zgodny z Unix, poza macOS. Firma Apple zatroszczyła się o nas, usuwając wsparcie dla urządzeń taśmowych ze swojego kodu.
Czy naprawdę nie można przywrócić tego kodu, portując standardowe otwarte narzędzia Unix do macOS? Dobrą wiadomością jest to, że firma Tolis (link do niej nie jest podany) zrobiła to w swoim produkcie Tolis Tape Tools. Złą wiadomością jest to, że korzystanie z wyników ich pracy zostało wycenione na 399 dolarów. Oceny tego faktu mogą być różne, ale osobiście autor nie jest gotów płacić komuś 400 dolarów za kod, w większości napisany przez zupełnie innych ludzi i dostępny w otwartym użytkowaniu od lat 70-tych, więc autor uznaje tę kwestię za zamkniętą. (Nawiasem mówiąc, na GitHubie istnieje porzucony, w złym stanie, projekt freeware na ten sam temat).
Na szczęście na świecie znajduje się korporacja IBM, której komercyjne ambicje mają zupełnie inne skale, dlatego nie manifestują się w drobiazgach. W szczególności opracowała otwartą taśmową system plików LTFS, która jest dystrybuowana również dla macOS.
Istnieje pewien niuans, polegający na tym, że różni producenci urządzeń taśmowych wydają własne wersje LTFS, wspierające swoje urządzenia. Ponieważ autor korzysta z napędu taśmowego IBM, zainstalował również LTFS od IBM. Może być konieczne zainstalowanie portów LTFS od innych firm dla ich urządzeń. Istnieje także uniwersalna implementacja openLTFS na GitHubie i Homebrew.
Dla nas ważne jest, że LTFS korzysta z funkcji partycjonowania nośnika i dlatego może współpracować z urządzeniami i kasetami od LTO-5 wzwyż.
Zatem w naszym przypadku pobieramy z witryny IBM produkt IBM Spectrum Archive Single Drive Edition dla macOS, który właśnie zawiera implementację LTFS. Instalujemy produkt za pomocą dedykowanego instalatora, bez żadnych przygód. W trakcie instalacji zostanie także zainstalowany pakiet FUSE, a w ustawieniach systemowych będziemy musieli potwierdzić autoryzację mądrego programisty o imieniu Anatol Pomozov, od którego zależy całe IBM. Szacunek dla tej osoby.
Zaleca się od razu w pliku /Library/Frameworks/LTFS.framework/Versions/Current/etc/ltfs.conf.local dodać linię:
option single-drive sync_type=time@1
ustawiając domyślne zamontowanie taśmy z resetowaniem bufora zapisu po 1 minucie bezczynności (domyślnie 5 minut).

W końcu wszystko gotowe do podłączenia. Podłączamy łańcuch: Mac – adapter T3/T2 – kabel Thunderbolt – konwerter ATTO – kabel SAS – napęd taśmowy (wybór portów na Macu, konwerterze i napędzie nie jest istotny). Włączamy zasilanie konwertera. Włączamy zasilanie napędu taśmowego. Czekamy na zakończenie inicjalizacji napędu według jego wskaźnika.
Wydajemy polecenie:
ltfs -o device_listHurra! Otrzymujemy (w typowy dla IBM diagnostyczny sposób):
307 LTFS14000I Rozpoczynanie LTFS, wersja LTFS 2.4.2.0 (10418), poziom logowania 2.
307 LTFS14058I Specyfikacja formatu LTFS wersja 2.4.0.
307 LTFS14104I Uruchomiono za pomocą «ltfs -o device_list».
307 LTFS14105I Ten plik binarny jest zbudowany dla Mac OS X.
307 LTFS14106I Wersja GCC to 4.2.1 Kompatybilny Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Wersja jądra: Darwin Kernel Version 19.4.0: Śr Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS17085I Wtyczka: Ładowanie «iokit» backendu taśmowego.
Lista urządzeń taśmowych:
Nazwa urządzenia = 0, ID producenta = IBM, ID produktu = ULT3580-TD5, numer seryjny = **********, nazwa produktu =[ULT3580-TD5].
Wkładamy kasetę, czekamy na załadunek i formatowanie:
mkltfs -d 0 -nTest -r "size=10M/name=.DS_Store"Tutaj parametr -d określa numer nośnika (zawsze zero, jeśli jest jedyny, ale nie można go pominąć w tej komendzie), -n – nazwa taśmy (można ją pominąć), a parametr -r wymaga umieszczenia zawartości plików .DS_Store, nieprzekraczających 10 megabajtów, w sekcji indeksowej (tzn. przeznaczonej dla katalogów) taśmy zamiast w sekcji danych.
Zaczyna się tajemnicze życie w taśmowym nośniku. Czekamy kilka minut, otrzymujemy odpowiedź:
LTFS15000I Rozpoczynam mkltfs, wersja LTFS 2.4.2.0 (10418), poziom logowania 2.
LTFS15041I Uruchomiono przez «mkltfs -d 0 -nTest -r size=10M/name=.DS_Store».
LTFS15042I Ten plik binarny został zbudowany dla Mac OS X.
LTFS15043I Wersja GCC to 4.2.1 Kompatybilny Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
LTFS17087I Wersja jądra: Darwin Kernel Version 19.4.0: Śr Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
LTFS15003I Formatuję urządzenie ‘0’.
LTFS15004I Rozmiar bloku woluminu LTFS: 524288.
LTFS15005I Polityka umieszczania partycji indeksowej: size=10M/name=.DS_Store.LTFS11337I Aktualizuję flagę indeksu brudnego (1) — NO_BARCODE (0x0x1021081e0).
LTFS17085I Wtyczka: Ładowanie backendu taśmy «iokit».
LTFS30810I Otwieranie urządzenia przez sterownik iokit (0).
LTFS30814I ID producenta to IBM.
LTFS30815I ID produktu to ‘ULT3580-TD5 ‘.
LTFS30816I Wersja oprogramowania sprzętowego to H976.
LTFS30817I Numer seryjny napędu to **********.
LTFS17160I Maksymalny rozmiar bloku urządzenia to 1048576.
LTFS11330I Ładowanie kasety.
LTFS30854I Ochrona bloku logicznego jest wyłączona.
LTFS11332I Ładowanie zakończone sukcesem.
LTFS17157I Zmieniam ustawienie napędu na tryb zapisu w dowolnym miejscu.
LTFS15049I Sprawdzanie medium (montaż).
LTFS30854I Ochrona bloku logicznego jest wyłączona.
LTFS15010I Tworzenie partycji danych b na partycji SCSI 1.
LTFS15011I Tworzenie partycji indeksowej a na partycji SCSI 0.
LTFS17165I Resetuję proporcje pojemności medium.
LTFS11097I Partycjonowanie medium.
LTFS11100I Zapisywanie etykiety na partycji b.
LTFS11278I Zapisywanie indeksu na partycji b.
LTFS30808I READ_ATTR (0x8c) zwraca -20501.
LTFS30865I READ_ATTR zwraca Nieprawidłowe pole w CDB (-20501) 0.
LTFS30836I Nie można odczytać atrybutu (-20501).
LTFS11336I Atrybut nie istnieje. Ignoruj spodziewany błąd.
LTFS17235I Zapisywanie indeksu NO_BARCODE do b (Powód: Format, 0 plików) **********.
LTFS17236I Zapisano indeks NO_BARCODE (b, **********).
LTFS11337I Aktualizuję flagę indeksu brudnego (0) — NO_BARCODE (0x0x1021081e0).
LTFS11100I Zapisywanie etykiety na partycji a.
LTFS11278I Zapisywanie indeksu na partycji a.
LTFS30808I READ_ATTR (0x8c) zwraca -20501.
LTFS30865I READ_ATTR zwraca Nieprawidłowe pole w CDB (-20501) 0.
LTFS30836I Nie można odczytać atrybutu (-20501).
LTFS11336I Atrybut nie istnieje. Ignoruj spodziewany błąd.
LTFS17235I Zapisywanie indeksu NO_BARCODE do a (Powód: Format, 0 plików) 9068025555.
LTFS17236I Zapisano indeks NO_BARCODE (a, **********).
LTFS15013I UUID woluminu to: 3802a70d-bd9f-47a6-a999-eb74ffa67fc1.LTFS15019I Pojemność woluminu wynosi 1425 GB.
LTFS30854I Ochrona bloku logicznego jest wyłączona.
LTFS15024I Medium sformatowane pomyślnie.
Montaż sformatowanej taśmy:
sudo mkdir /Volumes/LTFS
sudo chmod 777 /Volumes/LTFS/
sudo ltfs /Volumes/LTFSOtrzymujemy jeszcze kilka minut pracy nośnika, diagnozę:
307 LTFS14000I Rozpoczynanie LTFS, wersja LTFS 2.4.2.0 (10418), poziom logowania 2.
307 LTFS14058I Specyfikacja formatu LTFS wersja 2.4.0.
307 LTFS14104I Uruchomiono przez «ltfs /Volumes/LTFS/».
307 LTFS14105I Ten plik binarny jest zbudowany dla Mac OS X.
307 LTFS14106I Wersja GCC to 4.2.1 Kompatybilny Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Wersja jądra: Darwin Kernel Version 19.4.0: Śr Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS14063I Typ synchronizacji to «czas», czas synchronizacji wynosi 60 sek.
307 LTFS17085I Wtyczka: Ładowanie «iokit» backendu taśmowego.
307 LTFS17085I Wtyczka: Ładowanie backendu iosched «unified».
307 LTFS14095I Ustaw napęd taśmy na tryb zapisu w dowolnym miejscu, aby uniknąć wyrzucenia kasety.
307 LTFS30810I Otwieranie urządzenia przez sterownik iokit (0).
307 LTFS30814I ID producenta to IBM.
307 LTFS30815I ID produktu to ‘ULT3580-TD5 ‘.
307 LTFS30816I Wersja oprogramowania sprzętowego to H976.
307 LTFS30817I Numer seryjny napędu to **********.
307 LTFS17160I Maksymalny rozmiar bloku urządzenia to 1048576.
307 LTFS11330I Ładowanie kasety.
307 LTFS30854I Ochrona bloku logicznego jest wyłączona.
307 LTFS11332I Ładowanie zakończone sukcesem.
307 LTFS17157I Zmieniam ustawienie napędu na tryb zapisu w dowolnym miejscu.
307 LTFS11005I Montowanie wolumenu.
307 LTFS30854I Ochrona bloku logicznego jest wyłączona.
307 LTFS17227I Atrybut taśmy: Sprzedawca = IBM.
307 LTFS17227I Atrybut taśmy: Nazwa aplikacji = LTFS.
307 LTFS17227I Atrybut taśmy: Wersja aplikacji = 2.4.2.0.
307 LTFS17227I Atrybut taśmy: Etykieta nośnika =.
307 LTFS17228I Atrybut taśmy: ID lokalizacji tekstu = 0x81.
307 LTFS17227I Atrybut taśmy: Kod kreskowy =.
307 LTFS17227I Atrybut taśmy: Wersja formatu aplikacji = 2.4.0.
307 LTFS17228I Atrybut taśmy: Status blokady wolumenu = 0x00.
307 LTFS17227I Atrybut taśmy: Nazwa puli nośników =.
307 LTFS14111I Wstępna konfiguracja zakończona pomyślnie.
307 LTFS14112I Wywołaj polecenie „mount”, aby sprawdzić wynik końcowej konfiguracji.
307 LTFS14113I Określony punkt montowania zostanie wyświetlony, jeśli zakończyło się pomyślnie.
I oto jest, nasza taśma na pulpicie, z nazwą Test(ltfs)! Taśma bez nazwy otrzyma nazwę OSXFUSE Volume 0 (ltfs).
Teraz można z nią pracować.

Warto mieć na uwadze, że dobrze jest unikać przeglądania zawartości katalogów taśmy w oknach findera, ponieważ to niezwykle kosztowna operacja dla LTFS, a lepiej pracować za pomocą poleceń terminala lub po prostu zrzucać katalog do skopiowania na taśmę, jak pokazano w powyższym oknie.
Istnieje zresztą specjalnie stworzona przez IBM aplikacja ltfs_copy i jej klony, przeznaczona do bardziej efektywnego kopiowania między taśmą a dyskiem, ale autorowi nie udało się ich znaleźć w otwartym dostępie podczas powierzchownego przeszukiwania.
Aby odmontować taśmę, można użyć polecenia:
umount /Volumes/LTFSlub po prostu wyrzucić do kosza.
Są w rzeczywistości pewne graficzne interfejsy dla macOS, które ułatwiają te działania, ale czy po takich zawirowaniach, boimy się wpisać kilka linii w terminalu?
Jako skutek uboczny, zyskujemy możliwość podłączenia zewnętrznych dysków eSATA przez kabel SAS/4*eSATA.

Źródło: habr.com
