Provided by: manpages-fr_3.32d0.2p4-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  fixées  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 fixe, 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 fixer des valeurs plus
               pratiques  pour  un  lecteur  donné.  Les  délais  fixés  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  fixée  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 de statut (indépendants du périphérique).
                  Le fichier d'en-tête définit les macros  suivantes  pour  tester  les  bits  de
                  statut :

                  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” de
                      statut 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 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.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

       Christophe   Blaess   <URL:http://www.blaess.fr/christophe/>   (1996-2003),  Alain  Portal
       <URL: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> ».