Provided by: manpages-fr_4.26.0-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, quatre 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 trois 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 des 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. Avant Linux 2.1.121, le tampon est alloué sous la forme d'un seul bloc continu. Cela
       limite 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 de 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. Cela 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 avant
       Linux 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 lien matériel vers
       le lecteur de bandes par défaut.

       Depuis  Linux 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 bloc de taille variable, le nombre d'octets à lire n'a pas besoin de correspondre exactement à la
       taille  du  bloc de la bande. Si le nombre d'octets demandés est plus grand que la taille du bloc suivant
       sur la bande, le pilote renvoie la quantité de données effectivement lues. Si la taille de bloc est  plus
       grande que le nombre d'octets demandés, une erreur est renvoyée.

       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  Linux  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 écrite 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 - Effectuer 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 marqueurs de fichier.

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

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

       MTBSS  Reculer la bande de mt_count marques d'ensemble de fichiers.

       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
              Effacer  la  bande.  Avec  Linux 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 marques de fichier.

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

       MTFSR  Avancer de mt_count enregistrements (blocs bande).

       MTFSS  Avancer de mt_count marques d'ensemble de fichiers.

       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 est positif, la taille de la partition 1
              est renvoyée et la partition 2 correspond au reste de la bande. Si mt_count est nul, la bande  est
              formatée  en  une seule partition. À partir de Linux 4.6, si mt_count est négatif, la taille de la
              partition 0 est renvoyée et la partition 2 correspond au reste de la bande. 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).

       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  prend  en  charge  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éfinir 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éfinir  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 marques de fichiers.

       MTWSM  Écrire mt_count marques d'ensemble de fichiers.

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

       MTSETDRVBUFFER
              Définir 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 (seulement depuis Linux 2.1). Une fonction n'agit que sur un seul des éléments
              de la liste ci-dessous à la fois (l'ensemble des booléens constitue un élément).

              Une valeur ayant ses 4 bits de poids fort à 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 faible 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éfinies 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 renvoient 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 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 microcode 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 Linux 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 la prise en charge 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 gère  les  adresses  logiques  car  elles  contiennent  également  les
                     filemarks. Il existe d'ailleurs quelques lecteurs qui ne gèrent 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 (c'est-à-dire 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 Linux 2.1.x et ultérieurs, la valeur de délai maximal 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  valable  n'est  jamais  interrompue  pour dépassement de délai, et cela quel que soit le
              lecteur. À cause de cela, le pilote peut parfois sembler  gelé  alors  qu'il  est  en  attente  de
              dépassement  du délai. Ces commandes permettent donc de définir des valeurs plus réalistes 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  de  Linux  2.4.19  et  de  Linux 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 en cours.

       mt_dsreg
              Renvoie la configuration actuelle de la longueur de bloc (dans les 24 bits de poids faible) et  la
              densité  (dans  les  8  bits  de  poids  fort).  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épendantes 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, cela signifie qu'ils
                     prennent pas en charge 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)
                     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 Linux 2.4.19 et Linux 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
              faible  (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 transitoires, 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 gère 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 actuel */
           };

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'octets  lus  par  read(2)  est plus petit que le prochain bloc physique sur la bande
              (avant Linux 2.2.18 et Linux 2.4.0 les octets supplémentaires étaient silencieusement ignorés).

       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

       -  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.  Cela  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 cela est  qu'il
          faut  utiliser  une  taille de bloc assez grande pour obtenir des taux de transfert acceptables sur un
          bus SCSI.

       -  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 cela détermine la taille de bloc physique uniquement en
          mode de bloc de taille variable.

       -  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 la  gestion  de  bande  décrite
          dans cette page n'est pas disponible.

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

       -  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

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org>,     Cédric     Boutillier     <cedric.boutillier@gmail.com>,    Frédéric    Hantrais
       <fhantrais@gmail.com> et Grégoire Scano <gregoire.scano@malloc.fr>

       Cette traduction est une documentation libre ; veuillez vous  reporter  à  la  GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si  vous  découvrez  un  bogue  dans la traduction de cette page de manuel, veuillez envoyer un message à
       debian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                              st(4)