Provided by: manpages-fr_4.13-4_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. Dans les noyaux avant la version 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 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
       lien 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 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 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 é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
              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 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.  Depuis  la
              version 4.6  du  noyau,  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  (pour  les
              noyaux 2.1  et  ultérieurs). 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  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 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.à.d. 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 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  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 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 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  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 2.2.18 et 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

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

       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 cela 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  la  gestion  de  bande décrite 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 5.10 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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 ⟨⟩.