Loading

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);

       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 256Ko 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 : true) 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é.

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

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

TRADUCTION

       Cette  page  de  manuel  a  été  traduite  et  mise  à  jour par
       Christophe Blaess <http://www.blaess.fr/christophe/> entre  1996
       et  2003,  puis par Alain Portal <aportal AT univ-montp2 DOT fr>
       jusqu’en     2006,     et     mise     à     disposition     sur
       http://manpagesfr.free.fr/.

       Les  mises  à  jour  et  corrections de la version présente dans
       Debian   sont   directement   gérées    par    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>  et l’équipe francophone
       de traduction de Debian.

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