O tema deste artigo é a conexão de dispositivos externos ao Mac através das interfaces SAS, Fibre Channel (FC) e eSATA. Vamos esclarecer de imediato que para acessar esses dispositivos existe um caminho mais simples: montar um PC barato, instalar uma placa de controle HBA SAS ou FC (como um adaptador LSI básico), conectar seus dispositivos a esse controlador, instalar qualquer distribuição Linux no PC e trabalhar com o Mac através da rede. Mas isso é trivial e não interessante. Vamos optar por um caminho mais hardcore e conectar nossos dispositivos. diretamente ao Mac.
Para isso, precisaremos de:
– uma quantidade considerável de recursos financeiros para comprar novos equipamentos, ou sorte em leilões no eBay (onde, com um pouco de esforço, é possível adquirir o equipamento desejado das gerações anteriores a dez vezes menos do que na lista de preços);
– este artigo.
Para trabalhar com fitas magnéticas (atualmente quase universalmente apresentadas no formato LTO), é necessário ter um gravador de fita ou uma biblioteca de fitas no padrão LTO. Este é um dispositivo bastante caro na compra inicial (a partir de centenas de milhares de rublos), mas que se torna razoável ao comprar produtos de segunda mão. Como as gerações de LTO mudam aproximadamente a cada dois anos, e a compatibilidade é limitada a duas gerações, o mercado secundário está suficientemente saturado com dispositivos funcionais de quatro anos ou mais, ou seja, de gerações anteriores. Se você está comprando um novo dispositivo para fins comerciais, sabe para que ele é necessário. Se quiser comprar para casa e família, pode considerar essa opção como uma forma de arquivamento de informações (uma vez que os próprios suportes são muito baratos por 1 gigabyte).
A partir da geração LTO-5 (e em parte da LTO-4), os dispositivos para trabalhar com fitas magnéticas se conectam fisicamente ao computador através da interface SAS ou FC (normalmente existem duas versões para cada dispositivo).
Por outro lado, a Apple gentilmente nos fornece no nosso Mac a interface USB-C (que opera segundo os protocolos USB, Thunderbolt 3 ou DisplayPort), às vezes a interface Ethernet, bem como adaptadores Thunderbolt 3 – Thunderbolt 2 e Thunderbolt – FireWire 800.
Situação sem saída? Não exatamente. Felizmente, o barramento Thunderbolt pode operar em modo PCIe e permitir a conexão de placas PCIe da mesma forma que se estivessem instaladas diretamente dentro do gabinete do computador. Isso possibilita qualquer expansão de hardware do Mac, desde que exista o adaptador e os drivers apropriados.
A maneira conceitualmente mais simples de resolver a tarefa é um box externo para adaptadores PCIe com interface Thunderbolt (sistema de expansão de placas PCIe), onde se pode instalar um controlador (Host Bus Adapter, HBA) SAS ou FC. Por exemplo, tais boxes são fabricados pela empresa e algumas outras. Há um detalhe: nem todo controlador será adequado, apenas aqueles que possuem drivers para macOS. Existem poucas placas assim, e as mais baratas e populares (como as LSI) não estão entre elas. Felizmente, a empresa Sonnet se deu ao trabalho de compilar uma de placas PCIe com vários sistemas operacionais através da interface Thunderbolt.
Outra maneira de resolver é adquirir um conversor pronto da interface Thunderbolt - SAS ou Thunderbolt - FC, que essencialmente representa um conjunto já montado de box e controlador. A empresa mais conhecida nessa área é , mas também existem produtos de outras empresas.
Vale notar que nem todos os controladores SAS e FC são certificados para atender ao padrão LTO, pois isso tem um custo. Alguns fabricantes afirmam diretamente que o funcionamento de seus controladores com unidades de fita não é garantido.
Para completar o quadro, vale ressaltar que a empresa mLogic fabrica um , que consiste em uma unidade IBM LTO-8 em um gabinete externo, no qual já está integrado um conversor de SAS para Thunderbolt 3. No entanto, isso é algo ainda mais exótico do que tudo o que foi descrito acima, especialmente nas nossas circunstâncias. Duvido que esse dispositivo possa ser até mesmo legalmente importado para a Rússia (as unidades LTO contêm mecanismos criptográficos, e fabricantes como IBM e HP, por causa disso, obtêm uma autorização da FSB para importação de cada modelo).
A seguir, examinaremos como exemplo um conjunto específico de equipamentos, do qual o autor se tornou proprietário após algumas aquisições bem-sucedidas, mas o princípio geral deve se manter para todas as opções.
Então, temos para trabalhar com a fita o seguinte equipamento:
– computador Apple Mac mini 2018 com macOS 10.15 Catalina, possuindo portas USB-C com suporte a Thunderbolt 3;
– adaptador Apple Thunderbolt 3 / Thunderbolt 2;
– cabo Apple Thunderbolt 2;
– conversor de interface ATTO ThunderLink SH 1068 (2*Thunderbolt / 2*SAS-2);
– cabo SAS SFF-8088 – SFF-8088;
– unidade de fita LTO-5 IBM TS2350;
– cartuchos LTO-5, cartucho de limpeza.
Agora, como se diz, com toda essa bagunça, tentaremos decolar.
Baixamos do site da ATTO a versão mais recente do driver ThunderLink SH 1068 (aparentemente, para nossa conveniência, ele está combinado com o driver SH 2068 e está na seção 2068, o que só é mencionado dentro do próprio arquivo do driver) e a ferramenta de configuração da ATTO.

O driver, naturalmente, precisa ser instalado. Antes de tais ações, o autor recomenda sempre fazer um snapshot do sistema de arquivos APFS do disco inicial usando o comando
tmutil localsnapshotou um backup do disco inicial, se este for HFS+. Nunca se sabe. Depois, será fácil reverter a partir do snapshot.
Em seguida, o usuário inexperiente, mas que demonstra a devida cautela, sem dúvida, tenderá a ler atentamente as instruções da ATTO sobre a instalação do driver e segui-las. Como resultado – tcharam! – obtemos um sistema operacional preso na fase de inicialização. Aqui pode ser útil o snapshot, a partir do qual podemos restaurar, chamando o Time Machine a partir da partição de recuperação, ou então, da mesma partição de recuperação, podemos manualmente apagar o infeliz kext do diretório de extensões do kernel (o autor não recomenda, em geral, fazer isso).
Por que isso acontece? Porque a empresa Apple cuidou de nós. Nas versões mais recentes do macOS, não é tão simples incorporar código externo no processo de inicialização. Os bons programadores da Apple bloquearam esse comportamento destrutivo. Na verdade, bloquearam parcialmente, quando a espera pelo driver é injetada, mas o próprio driver não, então tudo simplesmente trava.
O que deve fazer uma mente experiente antes de instalar o driver? Primeiro, dar o comando:
csrutil statusSe em resposta a isso obtivermos:
Status da Proteção de Integridade do Sistema: habilitado.
isso significa que os bons programadores da Apple se preocupam conosco, portanto nada funcionará até que desativemos essa proteção maravilhosa. Para isso, reiniciamos na partição de recuperação (⌘R), chamamos o terminal e damos o comando:
csrutil disableDepois disso, reiniciamos no sistema operacional e, só então, instalamos o driver, junto com a ferramenta de configuração ATTO (na verdade, a ferramenta de configuração é necessária apenas para diagnóstico e não é exigida durante o funcionamento normal). Durante o processo, quando solicitado, confirmamos nas configurações do sistema a autorização da empresa ATTO. Após a instalação, podemos reiniciar novamente na partição de recuperação e dar o comando
csrutil enableA Apple está novamente cuidando de nós.
Agora temos uma interface suportada pelo driver para dispositivos externos SAS (ou FC, se fosse usado um conversor FC). Mas como trabalhar com a fita em nível lógico?
Como se sabe por uma mente inexperiente, mas erudita, qualquer sistema compatível com Unix suporta unidades de fita no nível do núcleo e ferramentas de sistema básicas, que incluem, principalmente, mt (gerenciamento de fita) e tar (um arquivador que oferece suporte ao trabalho com arquivos em fita). No entanto, o que uma mente experiente poderia esclarecer sobre isso? Qualquer sistema compatível com Unix, exceto o macOS. A Apple se preocupou conosco, removendo o suporte a dispositivos de fita do seu código.
Mas será que não é possível reverter esse código, portando ferramentas Unix open-source padrão para o macOS? A boa notícia é que a empresa Tolis já fez isso em seu produto Tolis Tape Tools (não estou incluindo o link). A má notícia é que a empresa avalia em 399 dólares a utilização dos resultados do seu trabalho. As opiniões sobre esse fato podem variar, mas pessoalmente, não estou disposto a pagar 400 dólares por um código em sua maior parte escrito por outras pessoas e disponível ao público desde os anos 70, portanto, considero essa questão fechada. (A propósito, existe um projeto abandonado no GitHub sobre o mesmo tema).
Felizmente, existe a IBM, cuja ambição comercial possui escalas completamente diferentes e, por isso, não se manifesta em pequenas trivialidades. Em particular, ela desenvolveu o sistema de arquivos de fita LTFS com código aberto, que é distribuído também para macOS.
Aqui existe uma nuance, que é o fato de que diferentes fabricantes de dispositivos de fita lançam suas próprias versões do LTFS, suportando seus dispositivos. Como o autor usa um armazenamento de fita da IBM, ele também instalou a versão do LTFS da IBM. Para unidades de outros fabricantes, pode ser necessário instalar suas próprias versões do LTFS. Há também uma implementação universal do openLTFS no GitHub e na Homebrew.
Para nós, é importante que o LTFS use a função de particionamento do meio, e, portanto, pode funcionar com dispositivos e cartuchos desde a geração LTO-5.
Assim, no nosso caso, baixamos do site da IBM o produto IBM Spectrum Archive Single Drive Edition para macOS, que inclui exatamente a implementação do LTFS. Instalamos o produto sem complicações usando seu instalador. Durante o processo, ele também instala o pacote FUSE, e nas configurações do sistema, será necessário confirmar a autorização de um programador chamado Anatol Pomozov, da qual depende toda a IBM neste caso. Respeito e consideração a essa pessoa.
É aconselhável imediatamente no arquivo /Library/Frameworks/LTFS.framework/Versions/Current/etc/ltfs.conf.local adicionar a seguinte linha:
option single-drive sync_type=time@1
definindo a montagem da fita por padrão com um intervalo de 1 minuto de inatividade para o esvaziamento do buffer de gravação (o padrão é 5 minutos).

Finalmente, tudo está pronto para a conexão. Conectamos a cadeia: Mac – adaptador T3/T2 – cabo Thunderbolt – conversor ATTO – cabo SAS – Unidade de fita (a escolha entre várias portas no Mac, no conversor e na unidade não importa). Ligamos a fonte do conversor. Ligamos a fonte da unidade de fita. Aguardamos a finalização da inicialização da unidade conforme sua indicação.
Damos o comando:
ltfs -o device_listUhul! Recebemos (na maneira usual de diagnóstico da IBM):
307 LTFS14000I LTFS iniciado, LTFS versão 2.4.2.0 (10418), nível de log 2.
307 LTFS14058I LTFS Especificação de Formato versão 2.4.0.
307 LTFS14104I Iniciado por «ltfs -o device_list».
307 LTFS14105I Este binário é construído para Mac OS X.
307 LTFS14106I A versão do GCC é 4.2.1 Compatível com Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Versão do Kernel: Darwin Kernel Version 19.4.0: Qua, 4 Mar 2020 22:28:40 PST; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS17085I Plugin: Carregando «iokit» backend de fita.
Lista de Dispositivos de Fita:
Nome do Dispositivo = 0, ID do Fabricante = IBM, ID do Produto = ULT3580-TD5, Número de Série = **********, Nome do Produto =[ULT3580-TD5].
Inserimos o cartucho, aguardamos o carregamento e formatamos:
mkltfs -d 0 -nTest -r "size=10M/name=.DS_Store"Aqui, o parâmetro -d define o número do dispositivo (sempre zero, se houver apenas um, mas não pode ser omitido neste comando), -n é o nome da fita (pode não ser especificado) e o parâmetro -r exige que o conteúdo dos arquivos .DS_Store, que não ultrapassem 10 megabytes, seja colocado na seção de índice (ou seja, destinada a diretórios) da fita, em vez da seção de dados.
Uma vida misteriosa começou no dispositivo de fita. Aguardamos alguns minutos e recebemos a resposta:
LTFS15000I Iniciando mkltfs, versão LTFS 2.4.2.0 (10418), nível de log 2.
LTFS15041I Iniciado por «mkltfs -d 0 -nTest -r size=10M/name=.DS_Store».
LTFS15042I Este binário é construído para Mac OS X.
LTFS15043I A versão do GCC é 4.2.1 Compatível com Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
LTFS17087I Versão do kernel: Versão do Kernel Darwin 19.4.0: Qua Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64.
LTFS15003I Formatando dispositivo '0'.
LTFS15004I Tamanho do bloco do volume LTFS: 524288.
LTFS15005I Política de colocação da partição de índice: size=10M/name=.DS_Store.LTFS11337I Atualizando a bandeira de índice-sujo (1) — NO_BARCODE (0x0x1021081e0).
LTFS17085I Plugin: Carregando backend de fita «iokit».
LTFS30810I Abrindo um dispositivo através do driver iokit (0).
LTFS30814I O ID do fornecedor é IBM.
LTFS30815I O ID do produto é ‘ULT3580-TD5 ‘.
LTFS30816I A revisão do firmware é H976.
LTFS30817I O número de série da unidade é **********.
LTFS17160I O tamanho máximo do bloco do dispositivo é 1048576.
LTFS11330I Carregando cartucho.
LTFS30854I A proteção do bloco lógico está desativada.
LTFS11332I Carregamento bem-sucedido.
LTFS17157I Mudando a configuração da unidade para modo de gravação em qualquer lugar.
LTFS15049I Verificando o meio (montagem).
LTFS30854I A proteção do bloco lógico está desativada.
LTFS15010I Criando partição de dados b na partição SCSI 1.
LTFS15011I Criando partição de índice a na partição SCSI 0.
LTFS17165I Resetando a proporção de capacidade do meio.
LTFS11097I Particionando o meio.
LTFS11100I Gravando rótulo na partição b.
LTFS11278I Gravando índice na partição b.
LTFS30808I READ_ATTR (0x8c) retorna -20501.
LTFS30865I READ_ATTR retorna Campo Inválido no CDB (-20501) 0.
LTFS30836I Não é possível ler o atributo (-20501).
LTFS11336I O atributo não existe. Ignorar o erro esperado.
LTFS17235I Gravando índice de NO_BARCODE em b (Razão: Formato, 0 arquivos) **********.
LTFS17236I Índice de NO_BARCODE gravado (b, **********).
LTFS11337I Atualizando a bandeira de índice-sujo (0) — NO_BARCODE (0x0x1021081e0).
LTFS11100I Gravando rótulo na partição a.
LTFS11278I Gravando índice na partição a.
LTFS30808I READ_ATTR (0x8c) retorna -20501.
LTFS30865I READ_ATTR retorna Campo Inválido no CDB (-20501) 0.
LTFS30836I Não é possível ler o atributo (-20501).
LTFS11336I O atributo não existe. Ignorar o erro esperado.
LTFS17235I Gravando índice de NO_BARCODE em a (Razão: Formato, 0 arquivos) 9068025555.
LTFS17236I Índice de NO_BARCODE gravado (a, **********).
LTFS15013I O UUID do volume é: 3802a70d-bd9f-47a6-a999-eb74ffa67fc1.LTFS15019I A capacidade do volume é 1425 GB.
LTFS30854I A proteção do bloco lógico está desativada.
LTFS15024I Meio formatado com sucesso.
Montando a fita formatada:
sudo mkdir /Volumes/LTFS
sudo chmod 777 /Volumes/LTFS/
sudo ltfs /Volumes/LTFSRecebemos mais alguns minutos de operação do dispositivo, diagnóstico:
307 LTFS14000I LTFS iniciado, LTFS versão 2.4.2.0 (10418), nível de log 2.
307 LTFS14058I LTFS Especificação de Formato versão 2.4.0.
307 LTFS14104I Iniciado por «ltfs /Volumes/LTFS/».
307 LTFS14105I Este binário é construído para Mac OS X.
307 LTFS14106I A versão do GCC é 4.2.1 Compatível com Apple Clang 4.1 ((tags/Apple/clang-421.11.66)).
307 LTFS17087I Versão do Kernel: Darwin Kernel Version 19.4.0: Qua, 4 Mar 2020 22:28:40 PST; root:xnu-6153.101.6~15/RELEASE_X86_64.
307 LTFS14063I O tipo de sincronização é «tempo», o tempo de sincronização é 60 seg.
307 LTFS17085I Plugin: Carregando «iokit» backend de fita.
307 LTFS17085I Plugin: Carregando backend iosched «unificado».
307 LTFS14095I Definido o modo de gravação em qualquer lugar do dispositivo de fita para evitar a ejeção do cartucho.
307 LTFS30810I Abrindo um dispositivo através do driver iokit (0).
307 LTFS30814I O ID do fornecedor é IBM.
307 LTFS30815I O ID do produto é ‘ULT3580-TD5 ‘.
307 LTFS30816I A revisão do firmware é H976.
307 LTFS30817I O número de série da unidade é **********.
307 LTFS17160I O tamanho máximo do bloco do dispositivo é 1048576.
307 LTFS11330I Carregando cartucho.
307 LTFS30854I A proteção do bloco lógico está desativada.
307 LTFS11332I Carregamento bem-sucedido.
307 LTFS17157I Mudando a configuração da unidade para modo de gravação em qualquer lugar.
307 LTFS11005I Montando o volume.
307 LTFS30854I A proteção do bloco lógico está desativada.
307 LTFS17227I Atributo da fita: Fornecedor = IBM.
307 LTFS17227I Atributo da fita: Nome do Aplicativo = LTFS.
307 LTFS17227I Atributo da fita: Versão do Aplicativo = 2.4.2.0.
307 LTFS17227I Atributo da fita: Rótulo do Meio =.
307 LTFS17228I Atributo da fita: ID de Localização de Texto = 0x81.
307 LTFS17227I Atributo da fita: Código de Barras =.
307 LTFS17227I Atributo da fita: Versão do Formato do Aplicativo = 2.4.0.
307 LTFS17228I Atributo da fita: Status de Bloqueio do Volume = 0x00.
307 LTFS17227I Atributo da fita: Nome do Pool de Mídia =.
307 LTFS14111I Configuração inicial concluída com sucesso.
307 LTFS14112I Execute o comando ‘mount’ para verificar o resultado da configuração final.
307 LTFS14113I O ponto de montagem especificado é listado se bem-sucedido.
E aqui está a nossa fita na área de trabalho, com o nome Test(ltfs)! A fita sem nome receberá o nome OSXFUSE Volume 0 (ltfs).
Agora é possível trabalhar com ela.

Na verdade, é importante ter em mente que é recomendável não abusar da visualização do conteúdo dos diretórios da fita nas janelas do Finder, pois isso é uma operação incrivelmente custosa para o LTFS; melhor trabalhar com os comandos do terminal, ou simplesmente transferir o diretório copiado em bloco para a fita, como mostrado na janela acima.
Por falar nisso, existe uma ferramenta da IBM chamada ltfs_copy e seus clones, projetada para copiar de forma mais eficiente entre a fita e o disco, mas até agora o autor não conseguiu encontrá-los em acesso aberto durante uma busca superficial.
A fita pode ser desmontada com o comando:
umount /Volumes/LTFSou simplesmente arrastá-la para a lixeira.
Na verdade, existem algumas interfaces gráficas para macOS que facilitam essas ações, mas nós, após tais transformações, deveríamos temer digitar algumas linhas no terminal?
Como um efeito colateral, obtemos a capacidade de conectar discos externos eSATA através de um cabo SAS/4*eSATA.

Fonte: habr.com
