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 contrôleurs SCSI, de scsi0 jusqu'à scsiN Pour tous les identificateurs SCSI sur le bus, de 0 à 7, sauf pour l'identificateur du contrôleur courant Pour toutes les unités logiques, de 0 à max_scsi_luns - test de la combinaison <bus, cible, unité logique> en envoyant une commande TEST UNIT READY. Si une unité logique est supposée absente, ne plus continuer les tests pour le couple <bus, cible>. - émission d'une commande INQUIRY pour déterminer ce qui a été trouvé (type du périphérique, vendeur, modèle, version du firmware, etc.). - renvoi du résultat de cette reconnaissance à une fonction spéciale d'identification propre à chaque pilote de haut niveau présent (par exemple le pilote de disques, de lecteur de bandes, etc.). Attachement de ce périphérique à la prochaine unité disponible pour chaque pilote qui désire gérer ce périphérique. Le gestionnaire générique va tous les attacher. - s'il s'agissait d'un périphérique SCSI-I ou qui fait partie d'une liste de périphériques connus comme ne gérant pas plusieurs unités logiques, stopper les tests pour le couple <bus, cible>. - s'il s'agissait d'un périphérique connu comme pouvant gérer plusieurs unités logiques, une scrutation de toutes les unités logiques potentielles est commencée, 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.