[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 77.   SCSI

Il bus SCSI,(1) ovvero Small computer system interface, nasce nel 1982 come bus di sistema per usi generali. Si tratta di un bus che consente prestazioni molto elevate per l'epoca, richiedendo però una gestione molto sofisticata che si traduce alla fine in un costo elevato, sia per l'unità di controllo, sia per i dispositivi che vi si collegano.

77.1   Caratteristiche

In un bus SCSI le unità periferiche sono individuate in base a un indirizzo di identificazione, ID, con l'aggiunta di un altro livello inferiore di identificazione, definito LUN (Logical unit number).

Lo standard si articola in molte varianti, nelle quali si possono distinguere due categorie fondamentali: narrow e wide. Nel primo caso si ha a disposizione un bus di 8 bit e sono disponibili otto indirizzi ID, da zero a sette; nel secondo il bus ha 16 bit e sono disponibili 16 indirizzi ID, da 0 a 15.

La gestione del bus è affidata a un'unità di controllo, che solitamente è separata dalla scheda madre. L'unità di controllo utilizza uno degli indirizzi ID disponibili, che precisamente deve essere il più elevato (7 o 15).

Solitamente, sull'unità di controllo è possibile collegare un cavetto piatto per raggiungere delle unità interne all'elaboratore e un cavo esterno per le periferiche separate. Queste connessioni costituiscono in pratica il bus; in particolare, le connessioni esterne di più unità periferiche avvengono a partire dall'unità immediatamente precedente, come prolungamento del bus stesso. La lunghezza complessiva del bus, includendo sia la connessione interna che quelle esterne, ha un limite; in generale, maggiori sono le prestazioni e minore è la lunghezza consentita.

Il bus, alla fine di ognuno dei due capi, deve avere delle terminazioni. Queste terminazioni sono inserite automaticamente dalle unità collegate, solitamente attraverso un ponticello o un micro interruttore. In pratica, l'ultima unità di ogni capo del bus deve avere la terminazione attivata, mentre quelle intermedie non devono averla; quando esistono dispositivi collegati solo all'interno dell'elaboratore, oppure solo all'esterno, l'unità di controllo costituisce uno dei capi del bus, per cui si deve configurare l'unità stessa in modo da abilitare la terminazione anche al suo interno.

La mancanza delle terminazioni o la presenza di dispositivi con la terminazione attivata quando non si trovano all'estremità del bus provoca dei malfunzionamenti, che possono essere anche solo intermittenti; nello stesso modo si possono avere problemi con un cavo interno o esterno un po' difettoso.

Esistono due tipi di cavo, a seconda della dimensione del bus: 50 poli per lo standard a 8 bit e 68 poli per lo standard a 16 bit.

Figura 77.1. Connettore a 50 poli per una connessione SCSI interna a 8 bit. Il lato esterno corrispondente al terminale numero uno ha una colorazione differente; in questo caso si tratta del lato sinistro.

piattina-scsi-50-poli

Ogni dispositivo collegato al bus SCSI deve avere un indirizzo ID differente dagli altri. L'indirizzo LUN consentirebbe a più componenti di condividere un solo indirizzo ID; tuttavia, di solito un indirizzo ID corrisponde a un dispositivo solo; se poi questo ne ha la necessità, può gestire l'indirizzo LUN per individuare delle sotto componenti. L'indirizzo LUN può andare da zero a sette; quando un dispositivo non utilizza in pratica l'indirizzo LUN, questo corrisponde allo zero.

La quantità massima di dispositivi che si possono collegare al bus può essere limitata dalle caratteristiche fisiche dello stesso, anche quando si potrebbe disporre di molti altri indirizzi ID.

Gli indirizzi ID hanno una priorità: il valore più alto è quello che ha la precedenza, cosa che spiega il motivo per cui l'unità di controllo ha sempre il numero più alto; l'indirizzo zero è l'ultimo a essere preso in considerazione. In condizioni normali, al contrario, la ricerca per un'unità di avvio, come un disco fisso, inizia a partire dall'indirizzo zero. In base a questa logica, i dischi fissi si collocano solitamente nei primi indirizzi ID, mentre negli ultimi vanno messi quei dispositivi che necessitano di una certa continuità nel flusso di dati, come potrebbe essere un masterizzatore.

Tabella 77.2. Caratteristiche sommarie dei vari standard SCSI.

Standard Modalità di
trasferimento
Dimensione
del bus
Velocità massima di trasferimento in Mbyte/s (106 byte) Cablaggio Dispositivi collegabili (oltre all'unità di controllo) Lunghezza massima del cablaggio
SCSI-1 SCSI-1 8 5 50 poli 7 6 m
SCSI-2 Wide SCSI 16 10 68 poli 15 6 m
SCSI-2 Fast SCSI 8 10 50 poli 7 3 m
SCSI-2 Fast Wide SCSI 16 20 68 poli 15 3 m
SCSI-3 SPI Ultra SCSI 8 20 50 poli 7 1,5 m
SCSI-3 SPI Wide Ultra SCSI 16 40 68 poli 7 1,5 m
SCSI-3 SPI-2 Ultra2 SCSI 8 40 50 poli 7 12 m
SCSI-3 SPI-2 Wide Ultra2 SCSI 16 80 68 poli 15 12 m
SCSI-3 SPI-3 Ultra3 SCSI 16 160 68 poli 15 12 m
SCSI-3 SPI-3 Ultra160 SCSI 16 160 68 poli 15 12 m
SCSI-3 SPI-3 Ultra160+ SCSI 16 160 68 poli 15 12 m
SCSI-3 SPI-4 Ultra320 SCSI 16 320 68 poli 15 12 m

77.1.1   Coordinate di un componente SCSI

Per identificare un componente collegato a un bus SCSI di un elaboratore, vanno considerati quattro livelli: l'unità di controllo; il bus (perché l'unità stessa potrebbe essere in grado di gestire più canali; l'indirizzo ID; l'indirizzo LUN.

Il bus, inteso in questo contesto, viene definito canale. Quando un'unità di controllo ne gestisce uno solo, il suo indirizzo corrisponde a zero.

77.2   Gestione da parte di un kernel Linux

La gestione di un bus SCSI da parte di un kernel Linux dipende dall'inclusione di codice specifico per ogni tipo particolare di unità di controllo. Ciò avviene nella sezione {SCSI support} (67.2.12), all'interno della quale occorre comunque elencare le unità che si vogliono gestire.

Se l'unità di controllo serve a gestire un disco usato per l'avvio del sistema, occorre valutare la possibilità di includere il codice necessario per questa nel file principale del kernel, perché un modulo creerebbe delle complicazioni.

La gestione ad alto livello da parte del kernel Linux prevede una serie di file di dispositivo, di cui i principali sono quelli seguenti:

Alcuni tipi di componenti SCSI possono richiedere di accedere sia a un file di dispositivo particolare, sia a quello generico. Per esempio, un masterizzatore di CD/DVD, utilizza un file di dispositivo /dev/srn, oppure /dev/scdn, quando legge un CD o un DVD, ma per la masterizzazione serve anche il file di dispositivo generico /dev/sgn corrispondente.

Questi file di dispositivo sono elencati dettagliatamente nel documento Linux allocated devices, mantenuto da Peter H. Anvin e corrispondente al file sorgenti_linux/Documentation/devices.txt. Lì si possono trovare anche altri file di dispositivo per componenti particolari che si collegano a unità di controllo SCSI.

È importante ricordare che il kernel Linux può gestire o gestisce alcune unità a disco come se fossero SCSI, anche se così non sono nella loro realtà fisica. In particolare, è possibile richiedere che un disco PATA (di solito un masterizzatore CD/DVD) sia gestito come se fosse un disco SCSI; inoltre i dischi collegati attraverso un bus USB vengono gestiti come se fossero dischi SCSI. Si veda eventualmente la sezione 78.7 e la sezione 81.5.2.

77.3   Informazioni da un kernel Linux

Un kernel Linux può dare informazioni importanti sul bus SCSI e sui dispositivi che vi sono collegati, quando si cerca di scoprire l'origine di un problema. Si accede a queste informazioni solitamente attraverso dmesg; l'esempio mostra anche l'uso di less per scorrere il risultato sullo schermo:

dmesg | less[Invio]

Nella prima parte si ottengono informazioni sulla prima unità di controllo, identificata dalla sigla scsi0:

SCSI subsystem driver Revision: 1.00
PCI: Found IRQ 10 for device 00:14.0
(scsi0) <Adaptec AHA-2940A Ultra SCSI host adapter> found at PCI 0/20/0
(scsi0) Narrow Channel, SCSI ID=7, 3/255 SCBs
(scsi0) Cables present (Int-50 YES, Ext-50 NO)
(scsi0) Downloading sequencer code... 422 instructions downloaded
scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.2.1/5.2.0
       <Adaptec AHA-2940A Ultra SCSI host adapter>

In questo caso, si tratta di un'unità di controllo Ultra SCSI a otto bit (narrow channel) che di conseguenza può usare cavi a 50 poli. Osservando l'esempio, si vede che è presente il cavo interno, mentre non è collegato nulla all'esterno.

Successivamente si passa ai componenti installati su questo bus:

(scsi0:0:0:0) Synchronous at 10.0 Mbyte/sec, offset 10.
  Vendor: FUJITSU   Model: M2513A            Rev: 1200
  Type:   Direct-Access                      ANSI SCSI revision: 01
(scsi0:0:3:0) Synchronous at 10.0 Mbyte/sec, offset 15.
  Vendor: TEAC      Model: CD-R55S           Rev: 1.0E
  Type:   CD-ROM                             ANSI SCSI revision: 02

In questo caso è presente un'unità a dischetti magneto-ottici con indirizzo ID pari a zero e un masterizzatore con indirizzo tre. In entrambi i casi, l'indirizzo LUN è zero. Per la precisione, le coordinate vanno lette nel modo seguente, dove n rappresenta l'n-esima unità di controllo SCSI, a partire da zero:

(scsin:canale:id:lun)

In particolare, l'emulazione SCSI per le unità di controllo ATA viene annotata come se fosse un'unità di controllo SCSI aggiuntiva:

scsi1 : SCSI host adapter emulation for IDE ATAPI devices

Infine, quanto possibile, vengono individuate le caratteristiche dei componenti SCSI installati:

Detected scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 446325 512-byte hdwr sectors (229 MB)
sda: Write Protect is off
 sda: unknown partition table

In questo caso si vede l'abbinamento del file di dispositivo /dev/sda all'unità magneto-ottica collocata nel primo canale (bus) della prima unità di controllo, all'indirizzo ID zero e all'indirizzo LUN zero. Si può osservare che al momento dell'avvio è presente un dischetto nell'unità, così le sue caratteristiche vengono indicate; diversamente verrebbe segnalato un errore.

Detected scsi CD-ROM sr0 at scsi0, channel 0, id 3, lun 0
sr0: scsi-1 drive

Infine viene individuato anche il masterizzatore, che in questo caso viene indicato come lettore CD-ROM, abbinato al file di dispositivo /dev/sr0.

Se l'unità di controllo SCSI è collocata a sua volta su un bus PCI, se ne possono trovare le tracce nel file system virtuale /proc/, ma è meglio utilizzare a questo proposito lspci:

lspci -v[Invio]

00:14.0 SCSI storage controller: Adaptec AIC-7861 (rev 01)
        Flags: bus master, medium devsel, latency 32, IRQ 10
        I/O ports at e400 [disabled] [size=256]
        Memory at d9001000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at <unassigned> [disabled] [size=64K]

77.3.1   Informazioni sul bus SCSI virtuale

Il kernel Linux gestisce diverse unità di memorizzazione come se fossero di tipo SCSI, anche se nella realtà utilizzano un bus differente. A questo proposito, i file system virtuali collocati a partire dalle directory /proc/ e /sys/ contengono informazioni sul bus SCSI, sia per unità che sono effettivamente di tipo SCSI, sia per quelle che vengono assimilate (come le unità di memorizzazione SATA e USB). Per la loro consultazione complessiva è conveniente usare il programma lsscsi:(2)

lsscsi -l[Invio]

[0:0:0:0]    disk    ATA      Maxtor 6L200S0   BACE  /dev/sda
  state=running queue_depth=1 scsi_level=6 type=0 device_blocked=0 timeout=30
[1:0:0:0]    disk    ATA      Maxtor 6L200S0   BACE  /dev/sdb
  state=running queue_depth=1 scsi_level=6 type=0 device_blocked=0 timeout=30
[49:0:0:0]   disk    Maxtor 6 Y080L0           0000  /dev/sde
  state=running queue_depth=1 scsi_level=0 type=0 device_blocked=0 timeout=30

In questo caso non ci sono unità SCSI vere e proprie, così l'elenco mostra due unità di memorizzazione di tipo SATA e una di tipo USB.

77.4   Riferimenti


1) SCSI si pronuncia «s-c-a-s-i».

2) Lsscsi   GNU GPL


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome scsi.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory