Suite à l'utilisation par Linux du type dev_t
sur 16 bits, 8 bits étant réservés pour le mineur, les disques SCSI, les lecteurs de bandes ou de CDROM et les fichiers spéciaux génériques ont des mineurs attribués dynamiquement, suivant l'algorithme suivant :
Pour tous les controleurs SCSI, de scsi0 jusqu'a scsiN Pour tous les identificateurs SCSI sur le bus, de 0 a 7, sauf pour l'identificateur du controleur courant Pour toutes les unites logiques, de 0 a max_scsi_luns - test de la combinaison <bus, cible, unite logique> en envoyant une commande TEST UNIT READY. Si une unite logique est supposee absente, ne plus continuer les tests pour le couple <bus, cible>. - emission d'une commande INQUIRY pour determiner ce qui a ete trouve (type du peripherique, vendeur, modele, version du firmware, etc.). - renvoi du resultat de cette reconnaissance a une fonction speciale d'identification propre a chaque pilote de haut niveau present (par exemple le pilote de disques, de lecteur de bandes, etc.). Attachement de ce peripherique a la prochaine unite disponible pour chaque pilote qui desire gerer ce peripherique. Le gestionnaire generique va tous les attacher. - s'il s'agissait d'un peripherique SCSI-I ou qui fait partie d'une liste de peripheriques connus comme ne gerant pas plusieurs unites logiques, stopper les tests pour le couple <bus, cible>. - s'il s'agissait d'un peripherique connu comme pouvant gerer plusieurs unites logiques, une scrutation de toutes les unites logiques potentielles est commencee, surchargeant la valeur max_scsi_luns.
Il y a souvent des problèmes avec ce genre d'approche, car si votre système possède des périphériques qui ne sont pas branchés en permanence, les mineurs vont dépendre des périphériques présents au moment du boot. Cela peut être gênant, car les scripts de démarrage ou le fichier /etc/fstab
peuvent contenir des instructions pour monter des partitions spécifiques. Ces commandes peuvent échouer si le disque a un mineur différent d'une fois sur l'autre.
Ce problème n'a pas été complètement résolu. Un programme qu'on peut trouver sur tsx-11 crée une arborescence /dev/scsi
basée sur le numéro d'hôte, l'identificateur et le numéro d'unité logique. Ce n'est pas particulièrement propre, mais cela permet d'éviter pas mal d'ennuis.
Une meilleure solution passera sans doute par le pseudo répertoire /proc/scsi
. Nous y travaillons actuellement, aussi pour l'instant ne pouvons-nous pas dire quelle sera sa forme définitive. A l'heure où j'écris ces lignes, cette approche semble prometteuse pour résoudre certains de ces points.
Chapitre Précédent
Table des matières de ce chapitre, Table des matières générale
Début du document, Début de ce chapitre