Provided by: manpages-fr_3.65d1p1-1_all bug

NOM

       st - Lecteur de bandes SCSI

SYNOPSIS

       #include <sys/mtio.h>

       int ioctl(int fd, int request [, (void *)arg3]);
       int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd);
       int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status);
       int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);

DESCRIPTION

       Le  pilote  de  périphérique  st  fournit  une interface vers un grand nombre de lecteurs de bandes SCSI.
       Actuellement,  ce  pilote  prend  le  contrôle  de  tous  les  périphériques  détectés  de  type  « accès
       séquentiel ». Le pilote st utilise un numéro majeur valant 9.

       Chaque  périphérique  utilise  huit  numéros mineurs. Les 5 bits de poids faible des numéros mineurs sont
       assignés séquentiellement dans l'ordre de détection. Avec le noyau 2.6, les bits au-delà des  8  bits  de
       poids  faible  sont  concaténés aux 5 bits de poids faible pour former le numéro de lecteur de bande. Les
       numéros mineurs peuvent être groupés en deux ensembles de quatre numéros : les numéros mineurs principaux
       des  périphériques  (avec  rembobinage  automatique),  n,  et  les numéros mineurs des périphériques sans
       rembobinage automatique (n+ 128). Les périphériques  ouverts  avec  le  numéro  principal  recevront  une
       commande  REWIND  à  la fermeture. Les périphériques ouverts avec le numéro « no-rewind » ne la recevront
       pas. (Notez qu'essayer de  positionner  la  bande  d'un  périphérique  avec  rembobinage  automatique  en
       utilisant  par  exemple  mt,  ne produit pas le résultat désiré : la bande est à nouveau rembobinée après
       l'utilisation de la commande mt et la commande suivante prend effet dès le début de la bande.

       Au sein de chaque groupe, 4 numéros mineurs sont disponibles pour  définir  des  périphériques  avec  des
       caractéristiques  différentes  (taille  de bloc, compression, densité, etc.). Lorsque le système démarre,
       seul le premier périphérique est disponible. Les 3 autres sont activés lorsque les  caractéristiques  par
       défaut  sont définies (voir plus bas). (En modifiant les constantes à la compilation, on peut modifier la
       répartition entre le nombre maximal de lecteurs de bandes et le nombre de numéros  mineurs  par  lecteur.
       Les allocations par défaut permettent de contrôler 32 lecteurs de bandes. Par exemple, il est possible de
       contrôler jusqu'à 64 lecteurs avec deux numéros mineurs pour les options différentes.)

       Les fichiers spéciaux sont créés typiquement ainsi :

           mknod -m 660 /dev/st0   c 9 0
           mknod -m 660 /dev/st0l  c 9 32
           mknod -m 660 /dev/st0m  c 9 64
           mknod -m 660 /dev/st0a  c 9 96
           mknod -m 660 /dev/nst0  c 9 128
           mknod -m 660 /dev/nst0l c 9 160
           mknod -m 660 /dev/nst0m c 9 192
           mknod -m 660 /dev/nst0a c 9 224

       Il n'existe pas de périphériques blocs correspondants.

       Le pilote utilise une mémoire tampon interne qui doit être assez grande pour contenir au moins un bloc de
       données de la bande. Dans les noyaux avant le 2.1.121, le tampon était alloué sous forme de bloc continu.
       Cela limitait la taille de bloc au plus grand espace contigu allouable par le  noyau.  Cette  limite  est
       actuellement  de  128 Ko  pour les architectures 32 bits et 256 Ko pour les 64 bits. Dans les noyaux plus
       récents, le pilote alloue la mémoire tampon en plusieurs parties disjointes si nécessaire. Par défaut, le
       nombre  maximal  de parties est 16. Ceci signifie que la taille maximale de bloc est très grande (2 Mo si
       l'allocation de 16 blocs de 128 Ko réussit).

       La taille de la mémoire tampon interne est déterminée par une constante à la compilation  du  noyau,  que
       l'on  peut  supplanter  par  une  option  au démarrage du système. De plus, le pilote essaie d'allouer un
       tampon temporaire plus grand lors de son exécution si cela s'avère nécessaire. Toutefois  l'allocation  à
       l'exécution de grands blocs contigus peut échouer, et il vaut mieux ne pas compter dessus avec les noyaux
       antérieurs au 2.1.121 (cela s'applique également au chargement de module à la  demande  avec  kerneld  ou
       kmod).

       Le  pilote  ne  gère pas spécifiquement un type ou une marque de lecteur de bandes. Après le démarrage du
       système, les options du périphérique sont définies par le microcode  du  périphérique.  Par  exemple,  si
       celui-ci réclame un mode de blocs fixes, le lecteur de bandes utilisera ce mode. Les options peuvent être
       modifiées par des appels ioctl(2) explicites et restent effectives lorsque le périphérique est fermé puis
       réouvert.  La configuration des options affecte aussi bien les périphériques avec rembobinage automatique
       que ceux sans.

       Des options différentes peuvent être fournies pour différents périphériques au  sein  du  sous-groupe  de
       quatre.  Les  options  prennent  effet  à l'ouverture du périphérique. Par exemple, l'administrateur peut
       définir un périphérique qui écrit des blocs fixes d'une certaine taille, et un qui écrit avec  des  blocs
       de longueur variable (si le périphérique accepte les deux modes).

       Le pilote gère les partitions de bandes si elles sont acceptées par le lecteur. (Notez que les partitions
       de bande n'ont rien à voir avec les partitions de disques. Une bande partitionnée peut être vue comme  un
       ensemble  de  bandes  logiques  dans  le même support). La gestion des partitions doit être activé par un
       ioctl(2). L'emplacement de la bande est sauvegardé au sein de chaque partition au cours  des  changements
       de  partitions.  La partition utilisée pour les opérations ultérieures est sélectionnée avec un ioctl(2).
       Le changement de partition est effectué au moment de  la  suivante  opération  bande  afin  d'éviter  les
       mouvements  inutiles  de  la  bande.  Le  nombre  maximal  de partitions sur une bande est défini par une
       constante à la compilation (4 par défaut). Le pilote contient un ioctl(2) qui  peut  formater  une  bande
       avec une ou deux partitions.

       Le  fichier  spécial de périphérique /dev/tape est généralement un lien symbolique ou un matériel vers le
       lecteur de bandes par défaut.

       Depuis le  noyau  2.6.2,  le  pilote  exporte  dans  le  répertoire  de  sysfs  /sys/class/scsi_tape  les
       périphériques attachés et certains de leurs paramètres.

   Transfert de données
       Le  pilote  accepte un fonctionnement aussi bien dans un mode de blocs fixes que dans un mode de blocs de
       longueur variable (si c'est accepté par le lecteur). En mode de blocs fixes, le  périphérique  écrit  les
       blocs  de  la  taille  indiquée et la taille des blocs ne dépend pas de la quantité de données transmises
       lors de l'appel système. Dans le mode de longueur variable, un bloc de données est écrit à  chaque  appel
       système  write et le nombre d'octets transmis indique la taille du bloc correspondant sur la bande. Notez
       que les blocs de la bande ne contiennent aucune information sur le mode  d'écriture  utilisé :  la  seule
       chose  importante  est  d'utiliser  lors de la lecture une commande qui accepte la taille des blocs de la
       bande.

       En mode variable, le nombre d'octets à lire n'a pas besoin de correspondre exactement à la taille du bloc
       de  la  bande.  Si  le  nombre demandé est plus grand que la taille du bloc suivant sur la bande, l'appel
       système renverra la quantité de données effectivement lues. Si la taille de bloc est plus grande  que  le
       nombre demandé, l'appel système renverra les données demandées et le reste du bloc est abandonné.

       En  mode  fixe,  le nombre d'octets demandé peut être arbitraire, si la mémoire tampon est activée, ou un
       multiple de la taille de bloc, si ce tampon est désactivé. Les noyaux antérieurs  au  2.1.121  permettent
       l'écriture avec un nombre quelconque si les mémoires tampons sont activées. Dans tous les autres cas (les
       noyaux antérieurs au 2.1.121 sans mémoire tampon ou les noyaux plus récents), le nombre d'octets à écrire
       doit être un multiple de la taille des blocs.

       Dans  le  noyau  2.6,  le  pilote essaie de transférer les données directement entre la mémoire tampon de
       l'utilisateur et le périphérique. Si cela n'est pas possible, la  mémoire  tapon  interne  au  pilote  de
       périphérique  est  utilisée.  Les  raisons de ne pas utiliser des transferts directs sont entre autres un
       mauvais alignement de la mémoire tampon de l'utilisateur (par  défaut  512 octets  mais  cela  peut  être
       changé  par  le  pilote HBA), l'adaptateur SCSI ne peut pas atteindre un ou plusieurs blocs de la mémoire
       tampon de l'utilisateur, etc.

       Une marque « filemark » est automatiquement écrit sur la bande si la dernière opération  avant  fermeture
       était une écriture.

       En  lecture,  une  marque  « filemark » provoque les événements suivants : s'il reste des données dans le
       tampon lorsqu'on trouve la marque, les données en mémoire sont renvoyées ; la  lecture  suivante  renvoie
       zéro octet ; la lecture suivante renvoie les données du fichier suivant ; la fin des données enregistrées
       est signalée par un retour de zéro octet pour deux appels successifs  en  lecture.  Enfin,  le  troisième
       appel renvoie une erreur.

   Ioctls
       Le  pilote  gère trois requêtes ioctl(2). Les requêtes non reconnues par st sont transmises au contrôleur
       SCSI. Les définitions ci-dessous sont extraites de /usr/include/linux/mtio.h :

   MTIOCTOP - Effectue une opération sur la bande
       Cette requête prend un paramètre de type (struct mtop *). Certains contrôleurs ne gèrent pas  toutes  les
       opérations. Le pilote renvoie une erreur EIO si le périphérique n'accepte pas l'opération.

           /* Structure MTIOCTOP - pour les opérations sur bande : */
           struct mtop {
               short  mt_op;     /* opérations définies ci-dessous */
               int    mt_count;  /* nombre d'opérations            */
           };

       Opérations sur bande magnétique lors d'une utilisation normale :

       MTBSF         Reculer la bande de mt_count filemarks.

       MTBSFM        Reculer  la  bande  de  mt_count  filemarks.  Repositionner  la bande sur le côté EOT de la
                     dernière marque.

       MTBSR         Reculer la bande de mt_count enregistrements (blocs bande).

       MTBSS         Reculer la bande de mt_count setmarks.

       MTCOMPRESSION Valider la compression des données sur bande dans le  lecteur  si  mt_count  est  non  nul,
                     désactiver  la  compression  si  mt_count  est  nul. Cette commande utilise la page MODE 15
                     supportée par la plupart des DAT.

       MTEOM         Aller à la fin des enregistrements (ajouter des fichiers).

       MTERASE       Efface la bande. Avec un noyau 2.6, un effacement rapide (bande marquée vide) est  effectué
                     si le paramètre est zéro. Sinon, un effacement long (effacement complet) est effectué.

       MTFSF         Avancer la bande de mt_count filemarks.

       MTFSFM        Avancer  la  bande  de  mt_count filemarks. Positionner la bande du côté BOT de la dernière
                     marque.

       MTFSR         Avancer de mt_count enregistrements (blocs bande).

       MTFSS         Avancer de mt_count setmarks.

       MTLOAD        Exécuter la commande de chargement  SCSI.  Un  cas  particulier  est  prévu  pour  certains
                     chargeurs   automatiques   HP.   Si   mt_count  correspond  à  la  somme  de  la  constante
                     MT_ST_HPLOADER_OFFSET et d'un nombre, ce dernier est envoyé au  pilote  pour  contrôler  le
                     chargeur automatique.

       MTLOCK        Verrouiller la porte du lecteur de bande.

       MTMKPART      Formater  la bande en une ou deux partitions. Si mt_count n'est pas nul, il correspond à la
                     taille de la première partition, et la seconde partition correspond au reste de  la  bande.
                     Si  mt_count  est  nul,  la  bande n'est formatée qu'en une seule partition. Cette commande
                     n'est autorisée que si le support de partitionnement  est  activé  pour  le  lecteur  (voir
                     MT_ST_CAN_PARTITIONS plus bas).

       MTNOP         Ne  rien  faire  -  Vider  les  tampons  du  pilote  - À utiliser avant de lire l'état avec
                     MTIOCGET.

       MTOFFL        Rembobiner la bande et éteindre le lecteur.

       MTRESET       Réinitialiser le lecteur.

       MTRETEN       Retendre la bande.

       MTREW         Rembobiner la bande.

       MTSEEK        Rechercher sur la bande  le  bloc  numéro  mt_count.  Cette  opération  nécessite  soit  un
                     contrôleur  SCSI-2  qui  supporte  la commande LOCATE (adresse spécifique au périphérique),
                     soit un lecteur SCSI-1 compatible Tandberg (Tandberg, Archive Viper,  Wangtek,  ...  ).  Le
                     numéro  de  bloc  devrait  toujours être un numéro renvoyé précédemment par MTIOCPOS si les
                     adresses spécifiques au lecteur sont utilisées.

       MTSETBLK      Définit la longueur de blocs du lecteur à la valeur spécifiée dans mt_count.  Une  longueur
                     de bloc nulle place le lecteur dans le mode de blocs de tailles variables.

       MTSETDENSITY  Définit  la  densité  de  la  bande  à  celle  codée  dans mt_count. Les codes des densités
                     acceptées par un lecteur sont disponibles dans la documentation de celui-ci.

       MTSETPART     La partition active devient celle indiquée par mt_count.  Les  partitions  sont  numérotées
                     depuis  zéro.  Cette  commande  n'est  autorisée  que  si la gestion du partitionnement est
                     activée pour le lecteur (voir MT_ST_CAN_PARTITIONS plus bas).

       MTUNLOAD      Exécuter la commande de déchargement SCSI (n'éjecte pas la bande).

       MTUNLOCK      Déverrouiller la porte du lecteur de bande.

       MTWEOF        Écrire mt_count filemarks.

       MTWSM         Écrire mt_count setmarks.

       Fonctions de configuration du lecteur de bande magnétique (pour le superutilisateur) :

       MTSETDRVBUFFER
               Définit diverses options du pilote ou du lecteur en fonction des bits codés  dans  mt_count.  Ces
               options  concernent  le  type  de  tampon  du lecteur, des options booléennes du pilote, le seuil
               d'écriture du tampon, les valeurs par défaut des tailles de blocs et de densité,  ainsi  que  les
               délais  de  réponse  (pour les noyaux 2.1 et ultérieurs). Une fonction n'agit que sur un seul des
               éléments de la liste ci-dessus à la fois (l'ensemble des booléens constitue un élément).

               Une valeur ayant ses 4 bits de poids forts à 0 sera utilisée pour indiquer le type de  tampon  du
               lecteur. Les types de tampon sont :

                   0   Le  contrôleur  ne  renverra  pas  l'état BON en écriture avant que les données ne soient
                       réellement écrites sur le support.

                   1   Le contrôleur peut renvoyer l'état BON en écriture dès que les données ont été transmises
                       aux tampons internes du lecteur de bande.

                   2   Le contrôleur peut renvoyer l'état BON en écriture dès que les données ont été transmises
                       aux tampons internes du lecteur de bande, si toutes les écritures précédentes des tampons
                       sur le support se sont déroulées correctement.

               Pour   contrôler   le   seuil   d'écriture,   on   doit   inclure   dans  mt_count  la  constante
               MT_ST_WRITE_THRESHOLD associée avec le nombre de blocs dans les 28 bits de poids faibles  par  un
               OU  binaire  « | ».  Le  nombre  de blocs concerne des blocs de 1024 octets, et non pas la taille
               physique des blocs sur la bande. Le seuil ne peut pas excéder la taille des tampons  internes  du
               contrôleur. (voir DESCRIPTION, plus bas).

               Pour  valider  ou  invalider  les  options  booléennes, la valeur mt_count doit inclure l'une des
               constantes MT_ST_BOOLEANS, MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS ou MT_ST_DEFBOOLEANS  associées
               par  un  OU binaire avec une combinaison des options décrites ci-dessous. Avec MT_ST_BOOLEANS les
               options sont définies avec  les  valeurs  indiquées.  Avec  MT_ST_SETBOOLEANS  les  options  sont
               activées sélectivement et inhibées avec MT_ST_DEFBOOLEANS.

               Les  options  par  défaut  pour  un  contrôleur de bande sont choisies avec MT_ST_DEFBOOLEANS. Un
               périphérique non actif (par exemple avec un numéro mineur de 32 ou 160) est  activé  lorsque  les
               options  par défaut sont définies pour la première fois. Un périphérique actif hérite des options
               non définis explicitement du périphérique actif au démarrage.

               Les options booléennes sont :

               MT_ST_BUFFER_WRITES (Défaut : vrai)
                      Les opérations d'écriture en mode de bloc fixes sont mises en cache. Si cette  option  est
                      invalidée,  et  si l'enregistreur utilise une longueur de bloc fixe, toutes les opérations
                      d'écriture doivent se faire avec une longueur multiple de celle du bloc. Cette option doit
                      être fausse pour créer des archives multivolumes fiables.

               MT_ST_ASYNC_WRITES (Défaut : vrai)
                      Quand  cette option est validée, les opérations d'écriture retournent immédiatement si les
                      données  tiennent  dans  le  tampon  du  pilote,  sans  attendre  que   celles-ci   soient
                      effectivement  transmises  au lecteur de bande. Le seuil du tampon d'écriture détermine le
                      taux de remplissage du tampon avant d'effectuer une commande SCSI. Toute  erreur  renvoyée
                      par  le  périphérique  sera conservée jusqu'à l'opération suivante. Cette option doit être
                      fausse pour créer des archives multivolumes fiables.

               MT_ST_READ_AHEAD (Défaut : vrai)
                      Cette option indique au pilote de fournir  un  cache  en  lecture,  ainsi  qu'une  lecture
                      anticipée  des  données  en  mode de blocs fixes. Si cette option est invalidée, et que le
                      lecteur utilise une taille de blocs fixes, toutes les opérations  de  lecture  doivent  se
                      faire avec une taille multiple de celle du bloc.

               MT_ST_TWO_FM (Défaut : faux)
                      Cette  option  modifie  le  comportement  du pilote quand un fichier est fermé. L'attitude
                      normale consiste à écrire une seule filemark, néanmoins si cette option  est  validée,  le
                      pilote écrira deux filemarks et replacera la tête au-dessus de la seconde.

                      Note :  Cette  option ne doit pas être utilisée avec les lecteurs de bandes QIC car ils ne
                      sont pas capables d'écraser une filemark.  Ces  lecteurs  détectent  la  fin  des  données
                      enregistrées  en  cherchant  de la bande vierge à la place des deux filemarks consécutives
                      habituelles. La plupart des autres lecteurs courants détectent également  la  présence  de
                      bande  vierge,  aussi  l'utilisation  des deux filemarks n'est généralement utile que lors
                      d'échange de bandes avec d'autres systèmes.

               MT_ST_DEBUGGING (Défaut : faux)
                      Cette option valide les divers messages de débogage du pilote, si celui-ci a  été  compilé
                      avec la constante DEBUG ayant une valeur non nulle).

               MT_ST_FAST_EOM (Défaut : faux)
                      Cette  option  indique  que  les  opérations  MTEOM  doivent  être envoyées directement au
                      lecteur, ce qui peut accélérer les opérations, mais aussi faire perdre au pilote le compte
                      des  pistes  du  fichier  en  cours,  normalement  renvoyé  par  la  requête  MTIOCGET. Si
                      MT_ST_FAST_EOM est fausse, le contrôleur répondra à une requête MTEOM en sautant en  avant
                      de fichiers en fichiers.

               MT_ST_AUTO_LOCK (Défaut : faux)
                      Lorsque  cette  option  est  vraie, la porte du lecteur est verrouillée lorsque le fichier
                      périphérique est ouvert, et déverrouillée lorsque le périphérique est refermé.

               MT_ST_DEF_WRITES (Défaut : faux)
                      Les options de bande (taille de bloc, mode, compression...) peuvent  varier  lorsque  l'on
                      passe  d'un  périphérique  lié  à un lecteur à un autre périphérique correspondant au même
                      lecteur. Cette option définit si les changements sont fournis au pilote en  utilisant  les
                      commandes  SCSI, et si les capacités d'auto-détection du lecteur sont fiables. Si l'option
                      est fausse, le pilote envoie les commandes  SCSI  immédiatement  lorsque  le  périphérique
                      change.  Si  cette  option  est  vraie,  les commandes SCSI ne sont pas envoyées avant une
                      demande d'écriture. Dans ce cas, le micro-code est habilité à détecter la structure de  la
                      bande  lors  de la lecture, et les commandes SCSI ne sont utilisées que pour être sûrs que
                      la bande est écrite correctement.

               MT_ST_CAN_BSR (Défaut : faux)
                      Lorsque la lecture anticipée est utilisée, la bande doit parfois être ramenée  en  arrière
                      en position correcte lors de la fermeture du périphérique, et on utilise alors la commande
                      SCSI pour sauter en arrière par-dessus les enregistrements. Certains anciens  lecteurs  ne
                      traitent  pas  correctement cette commande, et cette option permet d'en avertir le pilote.
                      Le résultat final est qu'une bande avec blocs fixes et lecture  anticipée  peut  être  mal
                      positionnée  dans  un  fichier  lors  de  la fermeture du périphérique. Avec un noyau 2.6,
                      l'option est activée par défaut pour les lecteurs qui gèrent la norme SCSI-3.

               MT_ST_NO_BLKLIMS (Défaut : faux)
                      Certains lecteurs n'acceptent pas la commande  SCSI  READ  BLOCK  LIMITS  de  lecture  des
                      limites  de  blocs.  Si l'on utilise cette option, le pilote n'invoque pas cette commande.
                      L'inconvénient est que le pilote ne peut pas vérifier, avant d'envoyer des  commandes,  si
                      la taille de bloc choisie est acceptée par le lecteur.

               MT_ST_CAN_PARTITIONS (Défaut : faux)
                      Cette  option  active  le  support  des  partitions  multiples sur une bande. Cette option
                      s'applique à tous les périphériques liés au lecteur.

               MT_ST_SCSI2LOGICAL (Défaut : faux)
                      Cette option indique au pilote d'utiliser les adresses de blocs logiques définies dans  le
                      standard  SCSI-2,  lors d'opérations de positionnement et de lecture de la position (aussi
                      bien lors des commandes MTSEEK et MTIOCPOS que lors des changements de partitions).  Sinon
                      il  utilise  les  adresses  spécifiques  au périphérique. Il est très recommandé d'activer
                      cette option si le lecteur supporte les adresses logiques car elles contiennent  également
                      les  filemarks.  Il existe d'ailleurs quelques lecteurs qui ne supportent que les adresses
                      logiques.

               MT_ST_SYSV (Défaut : faux)
                      Lorsque cette option est activée, les périphériques de  bande  utilisent  les  sémantiques
                      System V. Dans le cas contraire, ils utilisent la sémantique BSD. La différence principale
                      est le comportement lors de la fermeture d'un périphérique en lecture. Avec  System V,  la
                      bande  est positionnée en avant à la suite de la filemark suivante si cela n'a pas déjà eu
                      lieu lors de la lecture. Dans la sémantique BSD, la position ne change pas.

               MT_NO_WAIT (Défaut : faux)
                      Active le mode immédiat (i.e. n'attend pas la fin de la commande) pour certaines commandes
                      comme le rembobinage.

               Un exemple :

                   struct mtop mt_cmd;
                   mt_cmd.mt_op = MTSETDRVBUFFER;
                   mt_cmd.mt_count = MT_ST_BOOLEANS |
                           MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES;
                   ioctl(fd, MTIOCTOP, mt_cmd);

               La  taille de bloc par défaut pour un périphérique peut être configurée avec MT_ST_DEF_BLKSIZE et
               le code de densité par défaut avec MT_ST_DEFDENSITY. Les valeurs des  paramètres  sont  associées
               par un OU logique avec le code opératoire.

               Avec  les  noyaux  2.1.x  et  ultérieurs,  la  valeur  de délai maximum peut être fournie avec la
               sous-commande MT_ST_SET_TIMEOUT associée par OU avec le délai en seconde. Le délai long  (utilisé
               pour  les  rembobinages  ou  les  commandes  pouvant  durer  longtemps)  peut être configuré avec
               MT_ST_SET_LONG_TIMEOUT. Les valeurs par défaut du noyau  sont  très  longues  afin  de  s'assurer
               qu'une  commande valide n'est jamais interrompue pour dépassement de délai, et ceci quel que soit
               le lecteur. À cause de cela, le pilote peut parfois sembler gelé alors qu'il est  en  attente  de
               dépassement de délai. Ces commandes permettent donc de définir des valeurs plus pratiques pour un
               lecteur donné. Les délais définis pour un périphérique s'appliquent à tous les périphériques liés
               au même lecteur.

               A  partir  des  noyaux  2.4.19  et 2.5.43, le pilote gère un bit d'état qui indique si le lecteur
               demande un nettoyage. La méthode utilisée par le  lecteur  pour  renvoyer  l'information  sur  le
               nettoyage  est définie en utilisant la sous-commande MT_ST_SEL_CLN. Si la valeur est zéro, le bit
               du nettoyage vaut toujours zéro. Si la valeur est 1, la donnée TapeAlert définie dans le standard
               SCSI-3  est utilisée (pas encore implémenté). Les valeurs 2 à 17 sont réservées. Si les 8 bits de
               poids faible donnent une valeur supérieure à 18, les bits des  données  « extended  sense »  sont
               utilisés.  Les bits 9 à 16 forment un masque pour sélectionner les bits à observer et les bits 17
               à 23 indiquent un motif de bits à rechercher. Si le motif de bits est nul, un bit ou plus sous le
               masque  indique  la  requête  de nettoyage. Si le motif est non nul, le motif doit correspondre à
               l'octet des données « sense » masqué.

   MTIOCGET  Obtenir l'état
       Cette requête prend un paramètre du type (struct mtget *).

           /* Structure pour MTIOCGET - État de la bande magnétique */
           struct mtget {
               long     mt_type;
               long     mt_resid;
               /* Les registres suivants dépendent du matériel */
               long     mt_dsreg;
               long     mt_gstat;
               long     mt_erreg;
               /* Ces deux derniers champs sont parfois inutilisés */
               daddr_t  mt_fileno;
               daddr_t  mt_blkno;
           };

       mt_type    Le fichier d'en-tête définit plusieurs valeurs pour mt_type, mais  le  pilote  actuel  renvoie
                  uniquement  les  types génériques MT_ISSCSI1 (lecteur SCSI-1 générique) et MT_ISSCSI2 (lecteur
                  SCSI-2 générique).

       mt_resid   Contient le numéro de partition courante.

       mt_dsreg   Renvoie la configuration actuelle de la longueur de bloc (dans les 24 bits de  poids  faibles)
                  et   la   densité   (dans   les   8  bits  de  poids  forts).  Ces  champs  sont  définis  par
                  MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT, et MT_ST_DENSITY_MASK.

       mt_gstat   Renvoie  des  informations  génériques  d'état  (indépendants  du  périphérique).  Le  fichier
                  d'en-tête définit les macros suivantes pour tester les bits d'état :

                  GMT_EOF(x) :  La  bande  est  positionnée  juste  après  une filemark (toujours faux après une
                      opération MTSEEK).

                  GMT_BOT(x) : La bande est positionnée juste au début du premier fichier (toujours  faux  après
                      une opération MTSEEK).

                  GMT_EOT(x) : Une opération a atteint la fin physique de la bande (End Of Tape).

                  GMT_SM(x) :  La  bande  est  positionnée  sur  une  setmark (toujours faux après une opération
                      MTSEEK).

                  GMT_EOD(x) : La bande est positionnée à la fin des données enregistrées.

                  GMT_WR_PROT(x) : La bande est protégée en écriture. Pour certains enregistreurs, ceci signifie
                      qu'ils ne supportent pas l'écriture sur ce type de bande.

                  GMT_ONLINE(x) :  La dernière opération open(2) a trouvé le lecteur prêt à agir, avec une bande
                      à l'intérieur.

                  GMT_D_6250(x), GMT_D_1600(x), GMT_D_800(x) : Ces informations “génériques” d'état renvoient la
                      densité actuelle des lecteurs de bandes 9-pistes ½" seulement.

                  GMT_DR_OPEN(x) : Le lecteur ne contient pas de bande.

                  GMT_IM_REP_EN(x) :  Mode  de  rapport  immédiat.  Ce  bit  est  activé  lorsqu'il n'y a aucune
                      assurance que les données aient été physiquement écrites sur la bande lors  du  retour  de
                      l'appel  système.  Le bit est à zéro seulement lorsque le lecteur ne cache pas les données
                      et que le pilote est configuré pour ne pas faire de cache non plus.

                  GMT_CLN(x) : Le lecteur a demandé un nettoyage. Implémenté depuis les noyaux 2.4.19 et 2.5.43.

       mt_erreg   Le seul champ défini dans mt_erreg est le nombre d'erreurs corrigées,  dans  les  16  bits  de
                  poids  faibles  (comme  défini  par  les masques MT_ST_SOFTERR_SHIFT et MT_ST_SOFTERR_MASK). À
                  cause d'incompatibilités dans les méthodes utilisées par les lecteurs pour rendre  compte  des
                  corrections  d'erreur,  cette  valeur  n'est  pas toujours fournie (la plupart des lecteurs ne
                  renvoient pas, par défaut, les erreurs corrigées, mais cela peut être modifié avec la commande
                  SCSI MODE SELECT).

       mt_fileno  Renvoie  le  numéro du fichier en cours (commençant à 0). La valeur est mise à -1 si le numéro
                  du fichier est inconnu (par exemple, après un MTBSS ou un MTSEEK).

       mt_blkno   Renvoie le numéro de bloc (commençant à 0) à l'intérieur du fichier en cours. Cette valeur est
                  mise  à  -1  quand le numéro de bloc est inconnu (par exemple, après un MTBSF, un MTBSS, ou un
                  MTSEEK).

   MTIOCPOS  Obtenir la position de la bande
       Cette requête prend un paramètre du type (struct mtpos *) et renvoie une valeur  spécifique  au  lecteur,
       correspondant au numéro de bloc en cours, et qui n'est pas la même que mt_blkno renvoyée par MTIOCGET. Ce
       lecteur doit être un modèle SCSI-2 qui supporte la commande READ POSITION ou un lecteur SCSI-1 compatible
       Tandberg (Tandberg, Archive Viper, Wangtek, ...).

           /* Structure pour MTIOCPOS - Commande pour obtenir la position */
           struct mtpos {
               long mt_blkno;    /* numéro du bloc courant */
           };

VALEUR RENVOYÉE

       EACCES        Tentative  d'écriture  ou d'effacement sur une bande protégée en écriture. (Cette erreur ne
                     peut pas être détectée lors de open(2).)

       EBUSY         Le périphérique est déjà utilisé ou le pilote n'a pas assez de mémoire.

       EFAULT        Le paramètre de commande pointe en  dehors  de  la  mémoire  adressable  par  le  processus
                     appelant.

       EINVAL        Un  appel  système  ioctl(2)  avait  un paramètre non valable ou la taille de bloc demandée
                     était incorrecte.

       EIO           L'opération demandée a échoué.

       ENOMEM        Le nombre d'octet lu par read(2) est plus petit que le prochain bloc physique sur la bande.
                     (Avant 2.2.18 et 2.4.0-test6 les octets supplémentaires étaient ignorés sans rien dire.)

       ENOSPC        Une écriture a échoué car la fin de bande a été atteinte.

       ENOSYS        Appel système ioctl(2) inconnu.

       ENXIO         Durant l'ouverture, le lecteur de bande n'existe pas.

       EOVERFLOW     Tentative  de  lire  ou  d'écrire un bloc de longueur variable plus grand que la taille des
                     tampons internes du contrôleur.

       EROFS         On tente l'ouverture avec O_WRONLY ou O_RDWR alors que la bande est protégée en écriture.

FICHIERS

       /dev/st*    Les lecteurs de bandes SCSI à rembobinage automatique

       /dev/nst*   Les lecteurs de bandes SCSI sans rembobinage automatique

NOTES

       1.  Lors d'un échange de données entre systèmes différents, il faut se mettre d'accord sur la taille  des
           blocs. Les paramètres d'un lecteur après le démarrage sont souvent différents de ceux qu'utilisent la
           plupart des autres systèmes d'exploitation. La  plupart  utilisent  un  mode  de  blocs  de  longueur
           variable  si le lecteur le permet. Ceci concerne la plupart des lecteurs modernes, y compris les DAT,
           les lecteurs 8mm hélicoïdaux, les DLTs, etc. Il peut être judicieux d'utiliser ces lecteurs  en  mode
           de  longueur  variable sous Linux aussi (en utilisant MTSETBLK ou MTSETDEFBLK au démarrage), du moins
           lors de l'échange de données avec des systèmes d'exploitation différents. L'inconvénient de ceci  est
           qu'il  faut  utiliser  une taille de bloc assez grande pour obtenir des taux de transfert acceptables
           sur un bus SCSI.

       2.  Beaucoup de programmes (comme par exemple tar(1)) permettent à l'utilisateur de spécifier le  facteur
           de  bloc  sur la ligne de commande. Notez que ceci détermine la taille de bloc physique uniquement en
           mode de bloc de taille variable.

       3.  Pour utiliser les lecteurs de bandes SCSI, le pilote SCSI de base, un pilote d'adaptateur SCSI et  le
           pilote  du  lecteur  SCSI  doivent tous être configurés dans le noyau ou chargés comme modules. Si le
           pilote des bandes SCSI n'est pas présent, le lecteur est reconnu, mais le  support  de  bande  décrit
           dans cette page n'est pas disponible.

       4.  Le  pilote écrit les messages d'erreur sur la console et/ou les fichiers de journalisation (log). Les
           codes SENSE présents dans certains messages sont automatiquement traduits en texte  si  les  messages
           SCSI complets sont activés dans la configuration du noyau.

       5.  L'utilisation  du tampon interne permet de bons débits en mode blocs fixes même avec peu d'octets lus
           (avec read(2)) ou écrits (avec write(2)). Avec les transferts directs, cela  n'est  pas  possible  et
           peut  provoquer une surprise lors de la mise à jour vers le noyau 2.6. La solution est de demander au
           logiciel d'utiliser des transferts plus importants (souvent en lui indiquant d'utiliser de plus  gros
           blocs). Si ce n'est pas possible, les transferts directs peuvent être désactivés.

VOIR AUSSI

       mt(1)

       Le  fichier drivers/scsi/README.st ou Documentation/scsi/st.txt (pour les noyaux >= 2.6) dans les sources
       du noyau Linux contient les informations les plus récentes à propos du pilote  et  de  ses  capacités  de
       configuration

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe      Blaess      <http://www.blaess.fr/christophe/>      (1996-2003),       Alain       Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Simon  Paillard  et  l'équipe  francophone  de  traduction de
       Debian (2006-2009).

       Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org>  ou  par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».