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> ».

Linux                                           4 septembre 2010                                           ST(4)