¿En qué sentido SATA "habla" SCSI? ¿Cuánto se comparte entre SCSI y ATA?


27

Esto no es nada nuevo para mí, al menos, que SATA realmente "habla" SCSI, de ahí que estos dispositivos SATA aparezcan como dispositivos SCSI en Linux.

Ya se ha hecho una pregunta relacionada, por ejemplo, ¿ por qué mis dispositivos SATA aparecen en / proc / scsi / scsi?

Sin embargo, lo que no se menciona cuando he visto esto discutido antes es exactamente en qué sentido SATA se relaciona con SCSI, y en qué se diferencian.

Supongo que se da por sentado que difieren en la capa física, ya que no comparten cables compatibles.

Sin embargo, ¿qué pasa con más arriba en la pila? Soy consciente de cómo Linux representa discos SATA e incluso IDE en núcleos modernos como solo SCSI para el subsistema SCSI. Pero, ¿qué pasa con el protocolo real que se usa en el autobús?

También sé que ATAPI es una encapsulación para SCSI, pero ¿qué pasa con ATA regular? Me di cuenta de que las características de SCSI como NCQ, FUA, DPO, etc. (si no recuerdo mal) han sido adoptadas de SCSI. Pero no está claro cuánto "realmente" del conjunto de comandos SCSI se comparte o similar.

¿Los dispositivos SATA modernos con su especificación ATA implementan un subconjunto del conjunto de comandos SCSI, pero encapsulado (como en ATAPI)? ¿Un conjunto idéntico? Un superconjunto? ¿O tal vez solo las características seleccionadas se implementan como variantes que no son directamente idénticas?

¿Dónde puedo encontrar información clara sobre esto, y especialmente cómo se relaciona con el kernel de Linux? Sería bueno algún tipo de tutorial para el desarrollo de controladores, pero incluso una descripción general que no omita por completo todos los detalles sería suficiente. Soy consciente de que puedo leer la especificación real, pero de nuevo es demasiado detallado, difícil de encontrar lo que realmente estás buscando, y simplemente no es realista para mí y probablemente para la mayoría de los otros usuarios en el sentido temporal.

Respuestas:


42

SCSI y ATA son estándares completamente diferentes. Actualmente, ambos se desarrollan bajo los auspicios de la organización de estándares INCITS pero por diferentes grupos. SCSI está bajo el comité técnico T10 , mientras que ATA está bajo T13 . 1

ATA se diseñó teniendo en cuenta las unidades de disco duro únicamente. SCSI es más amplio y antiguo, siendo una forma estándar de controlar dispositivos de almacenamiento masivo, unidades de cinta, unidades de medios ópticos extraíbles (CD, DVD, Blu-Ray ...), escáneres y muchos otros tipos de dispositivos .

No era obvio a mediados de la década de 1980, cuando se introdujo IDE en el mundo de las computadoras, que SCSI sería empujado a los márgenes del mundo de la informática. SCSI estaba bien establecido y era más capaz. Las estaciones de trabajo Unix y las computadoras Macintosh se enviaron con unidades de disco duro SCSI durante décadas. Las PC de gama alta a menudo tenían una tarjeta SCSI para periféricos al menos, y a menudo también para el disco duro del sistema. Las primeras unidades de CD-ROM y cinta para computadoras personales salieron primero en forma SCSI.

Sin embargo, como la industria de las PC es lo que es, hubo un impulso para usar el estándar ATA menos costoso en lugar de SCSI. El compromiso inicial se llamaba ATAPI , una extensión de ATA que permite que un dispositivo que comprende SCSI internamente reciba esos comandos SCSI a través de una interfaz ATA. Más sobre esto a continuación.

Varios años después, SCSI obtuvo la función de transferencia de comandos ATA , básicamente la inversa de ATAPI, permitiendo comandos ATA a través de un bus SCSI. Un uso para esta instalación es hacer un túnel de comandos ATA SMART sobre SCSI. smartmontoolshace esto , por ejemplo.

Más adelante, el comité INCITS T10 desarrolló un estándar llamado Traducción SCSI / ATA (SAT), que traduce los comandos SCSI a los comandos ATA y viceversa. 2 La libatabiblioteca del kernel de Linux proporciona una implementación SAT para Linux, entre otras cosas .

Existe cierta superposición lógica en los protocolos SCSI y ATA, ya que ambos controlan las unidades de disco duro. Obviamente, ambos necesitan una forma de buscar un sector de disco duro en particular, recuperar el contenido de ese sector, etc. Sin embargo, los formatos de comando son completamente diferentes; de lo contrario, no necesitaríamos estos mecanismos de traducción y transferencia.

SATA en realidad "habla" SCSI

Eso es casi tan cierto como la afirmación de que "los autos son rosados". Algunos autos son de color rosa.

ATAPI, ATA pass-through y SAT son solo una parte de la historia. Sigue leyendo.

Supongo que se da por sentado que difieren en la capa física, ya que no comparten cables compatibles.

Eso era cierto en el viejo mundo SCSI paralelo , pero al igual que SATA reemplazó a PATA, SAS reemplazó a SCSI paralelo.

SAS y SATA comparten los mismos conectores de unidad, y son eléctricamente compatibles. Un controlador SAS puede comunicarse con dispositivos SAS y SATA, pero un disco SAS no puede funcionar con un controlador solo SATA. La diferencia está en la negociación, y en los comandos que puede usar después de que los dispositivos en cada extremo del cable descubran con qué están hablando.

De hecho, muchos controladores "RAID SATA" son realmente controladores RAID SAS. Dichos controladores a menudo tienen uno o más conectores de acoplamiento SAS SFF-8087 en la tarjeta, pero puede conectarles unidades SATA con un cable SFF-8087 a 4 × SATA. Por lo tanto, una tarjeta RAID SAS / SATA con dos conectores de acoplamiento SFF-8087 controla hasta 8 unidades. 3

Otra situación común es un gabinete de unidad de intercambio en caliente o una caja de computadora con una placa posterior SAS . El plano posterior generalmente tiene un conector SFF-8087, lo que permite el uso de un simple cable 8087 a 8087 desde el plano posterior al controlador de disco. Si las unidades en las bandejas de intercambio en caliente son SATA, no importa. El controlador SAS puede hablar con ellos a través del cableado SAS, ya que se sientan en los trineos de unidades que conectan las unidades en el plano posterior SAS. Sin embargo, las unidades siguen siendo unidades SATA, hablando el protocolo ATA, no SCSI.

También sé que ATAPI es una encapsulación para SCSI

Es cierto, pero ATAPI solo se usa para dispositivos que no sean unidades de disco duro. La razón principal por la que existe este estándar es para permitir que una interfaz ATA transporte comandos SCSI como los comandos de transmisión de datos para una unidad de cinta, el comando "expulsar medios" para una unidad de disco óptico o el comando "reproducir pista" para un disco de audio CD .

Este hecho se está volviendo menos relevante a medida que los dispositivos que no son HDD que solían hablar SCSI sobre ATAPI desaparecen o pasan a otras interfaces. Las unidades de cinta de gama baja ya no existen, por lo que ahora todas las unidades de cinta son SAS. 4 Los escáneres son prácticamente solo USB en estos días. Las unidades de medios ópticos se mueven fuera de la caja de la computadora para conectarse a través de USB, o desaparecen por completo, dejando solo las unidades ópticas internas cada vez más raras que hablan ATAPI.

En cualquier caso, un dispositivo SATA que entiende SCSI sobre ATAPI es un "dispositivo SCSI" solo de forma limitada. Dichos dispositivos no se beneficiarán de la mayoría de las ventajas de SAS sobre SCSI . Estas capacidades hacen que SAS sea claramente valioso en comparación con SATA, a pesar de ATAPI.

Si desea otra analogía de automóvil, el hecho de que pueda conducir mi automóvil en una pista de carreras ovalada no lo convierte en un automóvil de carreras.

Me di cuenta de que las características de SCSI como NCQ, FUA, DPO, etc. (si no recuerdo mal) han sido adoptadas de SCSI. Pero no está claro cuánto "realmente" del conjunto de comandos SCSI se comparte o similar.

Principalmente esto equivale a una imitación de gama baja. NCQ no es lo mismo que TCQ , por ejemplo. Solo obtendrá un disco duro con TCQ si es un dispositivo SAS. Conecte un disco SATA con capacidad NCQ a un controlador SAS, y de repente no obtendrá la capacidad TCQ.

Dicho esto, un dispositivo SATA moderno puede ser mucho más capaz que un dispositivo SCSI de hace una década. Ciertamente será capaz de niveles mucho más altos de E / S.

Todo esto es confuso y superpuesto porque esa es la naturaleza del mundo del hardware para PC. No hay líneas claras porque los fabricantes de unidades ópticas, solo para elegir una sub-industria, realmente no quieren construir dos unidades completamente diferentes, una que habla SAS con su máxima expresión y la otra que habla SATA. Entonces, se comprometen. Cabildean en los comités que definen dichos estándares para crear un único estándar que les permita colocar su unidad SATA en un bus SAS, y todos están muy contentos.

¿Dónde puedo encontrar información clara sobre esto, y especialmente cómo se relaciona con el kernel de Linux?

En última instancia, desea leer las fuentes de Linux . La libATAGuía del desarrollador también debería ser útil.

No conozco ningún resumen fácil de cómo funciona todo esto. No fue diseñado para ser fácil. Fue diseñado para acomodar tres décadas de evolución de hardware, estándares competitivos y objetivos dispares. Además, fue diseñado sin niveles mágicos de previsión. En resumen, es un desastre. Las únicas personas que realmente tienen que saber cómo funciona el desorden son aquellos que construyen los núcleos del sistema operativo, los que diseñan el hardware y, en menor medida, los que escriben los controladores para los núcleos del sistema operativo. Para un cuadro tan pequeño de personas altamente capaces, los estándares y el código de trabajo son suficientes.

Hoy, Linux llama a la mayoría de los dispositivos de almacenamiento masivo regrabables /dev/sd?. "SD" alguna vez significaba "disco SCSI", y existía simplemente para diferenciarse de lo que /dev/hd?significa genéricamente "disco duro", pero implicaba PATA en la mayoría de los casos. Esta distinción es otra irrelevancia práctica hoy en día. Ahora tenemos SSD, unidades de memoria USB, discos duros virtuales , dispositivos iSCSI y más, todos llamados /dev/sd?. Le sugiero que comience a pensar en "SD" como la abreviatura de "dispositivo de almacenamiento", en lugar de preocuparse por si el dispositivo habla ATA sobre SATA, ATA sobre Ethernet , SCSI sobre USB , SCSI sobre ATAPI, SCSI sobre SAS, SCSI sobre IP (iSCSI ), o lo que tienes.

El problema central es que los esquemas de nombres a menudo duran más que la razón detrás del esquema. Ves esto en /dev/scd0. El dispositivo conectado a ese /devnodo es más probable que sea una unidad de DVD o Blu-Ray que una unidad de disco compacto en estos días.

La alternativa, donde nombra cada /devnodo después del tipo de dispositivo exacto que está conectado a él, tiene sus propios problemas. ¿Sería realmente mejor si nombramos el /devnodo después del protocolo de bajo nivel que utilizó? /dev/atapi0¿, /dev/sas0etc? ¿O tal vez prefieres /dev/atapibluray0y tal? ¿Qué pasa con las unidades multimedia? ¿El mismo controlador también debe exponerse /dev/atapicd0en caso de que deslice un disco compacto en la unidad de Blu-Ray? Eso simplemente reemplaza un esquema confuso con otro.

La /dev/sd?abstracción de Linux no es perfecta, pero es útil. Por ejemplo, puede aprender el hecho de que /dev/sdaes muy probable que sea ​​la unidad de arranque sin preocuparse por qué cableado, protocolo de interfaz y medios están detrás de ese nombre. Si te digo que una máquina Linux dada tiene una sola unidad del sistema, una unidad óptica, y algunas veces tiene una unidad flash USB conectado a ella, se puede adivinar con seguridad que se les llama /dev/sda, /dev/sdby /dev/sdc, respectivamente.


Notas al pie :

  1. SCSI y ATA no comenzaron a compartir una organización de estándares para padres. Ambos comenzaron como controladores de disco duro patentados. SCSI evolucionó de Shugart Associates ' SASI y ATA / IDE salió de una gran colaboración en el diseño posterior entre Western Digital, Compaq y CDC.

    ANSI luego estandarizó ambos, con ATA-1 después de SCSI-1 aproximadamente 8 años después.

    INCITS es una especie de organización hermana de ANSI . INCITS publica los estándares finales a través de ANSI en los EE. UU . E ISO / IEC JTC 1 en todo el mundo.

  2. El estándar actual es SAT-3 , publicado en mayo de 2015, con SAT-4 y SAT-5 en progreso mientras escribo esto a mediados de julio de 2018. El último enlace lo lleva a borradores de las versiones en progreso.

  3. Estoy ignorando los multiplicadores de puertos SATA , los expansores SAS , etc.

  4. Exceptuando los modelos hechos para compatibilidad con viejos sistemas SCSI paralelos.


Todavía no me queda claro si algunas características / conjuntos de comandos son idénticos en ATA y SCSI, y qué tan grande es esta unión, si es que existe. Estoy de acuerdo en que leer el código fuente de Linux daría algunas respuestas, pero probablemente esté a la par con leer la propia especificación ATA. La fuente de Linux probablemente tampoco daría una visión muy clara de cuánto se comparte y cómo se comparte entre ATA y SCSI. Sin embargo, las convenciones de nomenclatura utilizadas probablemente se aclararían más leyendo la fuente de Linux.
AttributedTensorField

@AttributedTensorField: ver las últimas ediciones.
Warren Young

1
Wow, gran respuesta. Sólo una cosa; / dev / atapi0, / dev / sas0, etc .; ¿No es eso lo que hacen los BSD (al menos FreeBSD)? Además de Solaris IIRC. Y en Linux generalmente hay / dev / disk / by-path, que es algo similar.
un CVn

@ MichaelKjörling: Claro. El punto del comentario no es que estas otras formas de ver las cosas estén mal, es que cambiar el esquema de nombres para que coincida mejor con lo que está sucediendo debajo no hace que el problema subyacente desaparezca. Por mi parte, aprecio la /dev/sd?abstracción de Linux .
Warren Young

1
Tenga en cuenta que la mayoría de las distribuciones en estos días exponen las unidades ópticas como / dev / srN donde N es un número.
Perkins
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.