st(4) Device Drivers Manual st(4) NOM st - Lecteur de bandes SCSI SYNOPSIS #include 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 peripherique st fournit une interface vers un grand nombre de lecteurs de bandes SCSI. Actuellement, ce pilote prend le controle de tous les peripheriques detectes de type << acces sequentiel >>. Le pilote st utilise un numero majeur valant 9. Chaque peripherique utilise huit numeros mineurs. Les 5 bits de poids faible des numeros mineurs sont assignes sequentiellement dans l'ordre de detection. Avec le noyau 2.6, les bits au-dela des 8 bits de poids faible sont concatenes aux 5 bits de poids faible pour former le numero de lecteur de bande. Les numeros mineurs peuvent etre groupes en deux ensembles de quatre numeros : les numeros mineurs principaux des peripheriques (avec rembobinage automatique, n) et les numeros mineurs des peripheriques sans rembobinage automatique (n+ 128). Les peripheriques ouverts avec le numero principal recevront une commande REWIND a la fermeture. Les peripheriques ouverts avec le numero << no-rewind >> ne la recevront pas. Notez qu'essayer de positionner la bande d'un peripherique avec rembobinage automatique, en utilisant par exemple mt, ne produit pas le resultat desire : la bande est a nouveau rembobinee apres l'utilisation de la commande mt et la commande suivante prend effet des le debut de la bande. Au sein de chaque groupe, quatre numeros mineurs sont disponibles pour definir des peripheriques avec des caracteristiques differentes (taille de bloc, compression, densite, etc.). Lorsque le systeme demarre, seul le premier peripherique est disponible. Les trois autres sont actives lorsque les caracteristiques par defaut sont definies (voir plus bas). En modifiant les constantes a la compilation, on peut modifier la repartition entre le nombre maximal de lecteurs de bandes et le nombre de numeros mineurs par lecteur. Les allocations par defaut permettent de controler 32 lecteurs de bandes. Par exemple, il est possible de controler jusqu'a 64 lecteurs avec deux numeros mineurs pour des options differentes. Les fichiers speciaux sont crees 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 peripheriques blocs correspondants. Le pilote utilise une memoire tampon interne qui doit etre assez grande pour contenir au moins un bloc de donnees de la bande. Avant Linux 2.1.121, le tampon est alloue 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 recents, le pilote alloue la memoire tampon en plusieurs parties disjointes si necessaire. Par defaut, le nombre maximal de parties est 16. Cela signifie que la taille maximale de bloc est tres grande (2 Mo si l'allocation de 16 blocs de 128 Ko reussit). La taille de la memoire tampon interne est determinee par une constante a la compilation du noyau, que l'on peut supplanter par une option au demarrage du systeme. De plus, le pilote essaie d'allouer un tampon temporaire plus grand lors de son execution si cela s'avere necessaire. Toutefois l'allocation a l'execution de grands blocs contigus peut echouer, et il vaut mieux ne pas compter dessus avant Linux 2.1.121 (cela s'applique egalement au chargement de module a la demande avec kerneld ou kmod). Le pilote ne gere pas specifiquement un type ou une marque de lecteur de bandes. Apres le demarrage du systeme, les options du peripherique sont definies par le microcode du peripherique. Par exemple, si celui-ci reclame un mode de blocs fixes, le lecteur de bandes utilisera ce mode. Les options peuvent etre modifiees par des appels ioctl(2) explicites et restent effectives lorsque le peripherique est ferme puis reouvert. La configuration des options affecte aussi bien les peripheriques avec rembobinage automatique que ceux sans. Des options differentes peuvent etre fournies pour differents peripheriques au sein du sous-groupe de quatre. Les options prennent effet a l'ouverture du peripherique. Par exemple, l'administrateur peut definir un peripherique qui ecrit des blocs fixes d'une certaine taille, et un qui ecrit avec des blocs de longueur variable (si le peripherique accepte les deux modes). Le pilote gere les partitions de bandes si elles sont acceptees par le lecteur. (Notez que les partitions de bande n'ont rien a voir avec les partitions de disques. Une bande partitionnee peut etre vue comme un ensemble de bandes logiques dans le meme support). La gestion des partitions doit etre active par un ioctl(2). L'emplacement de la bande est sauvegarde au sein de chaque partition au cours des changements de partitions. La partition utilisee pour les operations ulterieures est selectionnee avec un ioctl(2). Le changement de partition est effectue au moment de la suivante operation bande afin d'eviter les mouvements inutiles de la bande. Le nombre maximal de partitions sur une bande est defini par une constante a la compilation (4 par defaut). Le pilote contient un ioctl(2) qui peut formater une bande avec une ou deux partitions. Le fichier special de peripherique /dev/tape est generalement un lien symbolique ou un lien materiel vers le lecteur de bandes par defaut. Depuis Linux 2.6.2, le pilote exporte dans le repertoire de sysfs /sys/class/scsi_tape les peripheriques attaches et certains de leurs parametres. Transfert de donnees 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 accepte par le lecteur). En mode de blocs fixes, le peripherique ecrit les blocs de la taille indiquee et la taille des blocs ne depend pas de la quantite de donnees transmises lors de l'appel systeme. Dans le mode de longueur variable, un bloc de donnees est ecrit a chaque appel systeme 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'ecriture utilise : 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 a lire n'a pas besoin de correspondre exactement a la taille du bloc de la bande. Si le nombre d'octets demandes est plus grand que la taille du bloc suivant sur la bande, le pilote renvoie la quantite de donnees effectivement lues. Si la taille de bloc est plus grande que le nombre d'octets demandes, une erreur est renvoyee. En mode fixe, le nombre d'octets demande peut etre arbitraire, si la memoire tampon est activee, ou un multiple de la taille de bloc, si ce tampon est desactive. Les noyaux anterieurs au 2.1.121 permettent l'ecriture avec un nombre quelconque si les memoires tampons sont activees. Dans tous les autres cas (les noyaux anterieurs au 2.1.121 sans memoire tampon ou les noyaux plus recents), le nombre d'octets a ecrire doit etre un multiple de la taille des blocs. Dans Linux 2.6, le pilote essaie de transferer les donnees directement entre la memoire tampon de l'utilisateur et le peripherique. Si cela n'est pas possible, la memoire tapon interne au pilote de peripherique est utilisee. Les raisons de ne pas utiliser des transferts directs sont entre autres un mauvais alignement de la memoire tampon de l'utilisateur (par defaut 512 octets mais cela peut etre change par le pilote HBA), l'adaptateur SCSI ne peut pas atteindre un ou plusieurs blocs de la memoire tampon de l'utilisateur, etc. Une marque << filemark >> est automatiquement ecrite sur la bande si la derniere operation avant fermeture etait une ecriture. En lecture, une marque << filemark >> provoque les evenements suivants : s'il reste des donnees dans le tampon lorsqu'on trouve la marque, les donnees en memoire sont renvoyees ; la lecture suivante renvoie zero octet ; la lecture suivante renvoie les donnees du fichier suivant ; la fin des donnees enregistrees est signalee par un retour de zero octet pour deux appels successifs en lecture. Enfin, le troisieme appel renvoie une erreur. Ioctls Le pilote gere trois requetes ioctl(2). Les requetes non reconnues par st sont transmises au controleur SCSI. Les definitions ci-dessous sont extraites de /usr/include/linux/mtio.h : MTIOCTOP - Effectuer une operation sur la bande Cette requete prend un parametre de type (struct mtop *). Certains controleurs ne gerent pas toutes les operations. Le pilote renvoie une erreur EIO si le peripherique n'accepte pas l'operation. /* Structure MTIOCTOP - pour les operations sur bande : */ struct mtop { short mt_op; /* operations definies ci-dessous */ int mt_count; /* nombre d'operations */ }; Operations sur bande magnetique 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 cote EOT de la derniere 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 donnees sur bande dans le lecteur si mt_count est non nul, desactiver la compression si mt_count est nul. Cette commande utilise la page MODE 15 supportee par la plupart des DAT. MTEOM Aller a la fin des enregistrements (ajouter des fichiers). MTERASE Effacer la bande. Avec Linux 2.6, un effacement rapide (bande marquee vide) est effectue si le parametre est zero. Sinon, un effacement long (effacement complet) est effectue. MTFSF Avancer la bande de mt_count marques de fichier. MTFSFM Avancer la bande de mt_count filemarks. Positionner la bande du cote BOT de la derniere marque de fichier. MTFSR Avancer de mt_count enregistrements (blocs bande). MTFSS Avancer de mt_count marques d'ensemble de fichiers. MTLOAD Executer la commande de chargement SCSI. Un cas particulier est prevu pour certains chargeurs automatiques HP. Si mt_count correspond a la somme de la constante MT_ST_HPLOADER_OFFSET et d'un nombre, ce dernier est envoye au pilote pour controler 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 renvoyee et la partition 2 correspond au reste de la bande. Si mt_count est nul, la bande est formatee en une seule partition. A partir de Linux 4.6, si mt_count est negatif, la taille de la partition 0 est renvoyee et la partition 2 correspond au reste de la bande. Cette commande n'est autorisee que si la gestion du partitionnement est activee pour le lecteur (voir MT_ST_CAN_PARTITIONS plus bas). MTNOP Ne rien faire - Vider les tampons du pilote - A utiliser avant de lire l'etat avec MTIOCGET. MTOFFL Rembobiner la bande et eteindre le lecteur. MTRESET Reinitialiser le lecteur. MTRETEN Retendre la bande. MTREW Rembobiner la bande. MTSEEK Rechercher sur la bande le bloc numero mt_count. Cette operation necessite soit un controleur SCSI-2 qui prend en charge la commande LOCATE (adresse specifique au peripherique), soit un lecteur SCSI-1 compatible Tandberg (Tandberg, Archive Viper, Wangtek, ... ). Le numero de bloc devrait toujours etre un numero renvoye precedemment par MTIOCPOS si les adresses specifiques au lecteur sont utilisees. MTSETBLK Definir la longueur de blocs du lecteur a la valeur specifiee dans mt_count. Une longueur de bloc nulle place le lecteur dans le mode de blocs de tailles variables. MTSETDENSITY Definir la densite de la bande a celle codee dans mt_count. Les codes des densites acceptees par un lecteur sont disponibles dans la documentation de celui-ci. MTSETPART La partition active devient celle indiquee par mt_count. Les partitions sont numerotees depuis zero. Cette commande n'est autorisee que si la gestion du partitionnement est activee pour le lecteur (voir MT_ST_CAN_PARTITIONS plus bas). MTUNLOAD Executer la commande de dechargement SCSI (n'ejecte pas la bande). MTUNLOCK Deverrouiller la porte du lecteur de bande. MTWEOF Ecrire mt_count marques de fichiers. MTWSM Ecrire mt_count marques d'ensemble de fichiers. Fonctions de configuration du lecteur de bande magnetique (pour le superutilisateur) : MTSETDRVBUFFER Definir diverses options du pilote ou du lecteur en fonction des bits codes dans mt_count. Ces options concernent le type de tampon du lecteur, des options booleennes du pilote, le seuil d'ecriture du tampon, les valeurs par defaut des tailles de blocs et de densite, ainsi que les delais de reponse (seulement depuis Linux 2.1). Une fonction n'agit que sur un seul des elements de la liste ci-dessous a la fois (l'ensemble des booleens constitue un element). Une valeur ayant ses 4 bits de poids fort a 0 sera utilisee pour indiquer le type de tampon du lecteur. Les types de tampon sont : 0 Le controleur ne renverra pas l'etat BON en ecriture avant que les donnees ne soient reellement ecrites sur le support. 1 Le controleur peut renvoyer l'etat BON en ecriture des que les donnees ont ete transmises aux tampons internes du lecteur de bande. 2 Le controleur peut renvoyer l'etat BON en ecriture des que les donnees ont ete transmises aux tampons internes du lecteur de bande, si toutes les ecritures precedentes des tampons sur le support se sont deroulees correctement. Pour controler le seuil d'ecriture, on doit inclure dans mt_count la constante MT_ST_WRITE_THRESHOLD associee 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 exceder la taille des tampons internes du controleur (voir DESCRIPTION, plus bas). Pour valider ou invalider les options booleennes, la valeur mt_count doit inclure l'une des constantes MT_ST_BOOLEANS, MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS ou MT_ST_DEFBOOLEANS associees par un OU binaire avec une combinaison des options decrites ci-dessous. Avec MT_ST_BOOLEANS les options sont definies avec les valeurs indiquees. Avec MT_ST_SETBOOLEANS les options sont activees selectivement et inhibees avec MT_ST_DEFBOOLEANS. Les options par defaut pour un controleur de bande sont choisies avec MT_ST_DEFBOOLEANS. Un peripherique non actif (par exemple avec un numero mineur de 32 ou 160) est active lorsque les options par defaut sont definies pour la premiere fois. Un peripherique actif herite des options non definies explicitement du peripherique actif au demarrage. Les options booleennes sont : MT_ST_BUFFER_WRITES (Defaut : vrai) Les operations d'ecriture en mode de bloc fixes sont mises en cache. Si cette option est invalidee, et si l'enregistreur utilise une longueur de bloc fixe, toutes les operations d'ecriture doivent se faire avec une longueur multiple de celle du bloc. Cette option doit etre fausse pour creer des archives multivolumes fiables. MT_ST_ASYNC_WRITES (Defaut : vrai) Quand cette option est validee, les operations d'ecriture renvoient immediatement si les donnees tiennent dans le tampon du pilote, sans attendre que celles-ci soient effectivement transmises au lecteur de bande. Le seuil du tampon d'ecriture determine le taux de remplissage du tampon avant d'effectuer une commande SCSI. Toute erreur renvoyee par le peripherique sera conservee jusqu'a l'operation suivante. Cette option doit etre fausse pour creer des archives multivolumes fiables. MT_ST_READ_AHEAD (Defaut : vrai) Cette option indique au pilote de fournir un cache en lecture, ainsi qu'une lecture anticipee des donnees en mode de blocs fixes. Si cette option est invalidee, et que le lecteur utilise une taille de blocs fixes, toutes les operations de lecture doivent se faire avec une taille multiple de celle du bloc. MT_ST_TWO_FM (Defaut : faux) Cette option modifie le comportement du pilote quand un fichier est ferme. L'attitude normale consiste a ecrire une seule filemark, neanmoins si cette option est validee, le pilote ecrira deux filemarks et replacera la tete au-dessus de la seconde. Note : cette option ne doit pas etre utilisee avec les lecteurs de bandes QIC, car ils ne sont pas capables d'ecraser une filemark. Ces lecteurs detectent la fin des donnees enregistrees en cherchant de la bande vierge a la place des deux filemarks consecutives habituelles. La plupart des autres lecteurs courants detectent egalement la presence de bande vierge, aussi l'utilisation des deux filemarks n'est generalement utile que lors d'echange de bandes avec d'autres systemes. MT_ST_DEBUGGING (Defaut : faux) Cette option valide les divers messages de debogage du pilote (si celui-ci a ete compile avec la constante DEBUG ayant une valeur non nulle). MT_ST_FAST_EOM (Defaut : faux) Cette option indique que les operations MTEOM doivent etre envoyees directement au lecteur, ce qui peut accelerer les operations, mais aussi faire perdre au pilote le compte des pistes du fichier en cours, normalement renvoye par la requete MTIOCGET. Si MT_ST_FAST_EOM est fausse, le controleur repondra a une requete MTEOM en sautant en avant de fichiers en fichiers. MT_ST_AUTO_LOCK (Defaut : faux) Lorsque cette option est vraie, la porte du lecteur est verrouillee lorsque le peripherique est ouvert, et deverrouillee lorsque le peripherique est referme. MT_ST_DEF_WRITES (Defaut : faux) Les options de bande (taille de bloc, mode, compression...) peuvent varier lorsque l'on passe d'un peripherique lie a un lecteur a un autre peripherique correspondant au meme lecteur. Cette option definit si les changements sont fournis au pilote en utilisant les commandes SCSI, et si les capacites d'auto-detection du lecteur sont fiables. Si l'option est fausse, le pilote envoie les commandes SCSI immediatement lorsque le peripherique change. Si cette option est vraie, les commandes SCSI ne sont pas envoyees avant une demande d'ecriture. Dans ce cas, le microcode est habilite a detecter la structure de la bande lors de la lecture, et les commandes SCSI ne sont utilisees que pour etre surs que la bande est ecrite correctement. MT_ST_CAN_BSR (Defaut : faux) Lorsque la lecture anticipee est utilisee, la bande doit parfois etre ramenee en arriere en position correcte lors de la fermeture du peripherique, et on utilise alors la commande SCSI pour sauter en arriere par-dessus les enregistrements. Certains anciens lecteurs ne traitent pas correctement cette commande, et cette option permet d'en avertir le pilote. Le resultat final est qu'une bande avec blocs fixes et lecture anticipee peut etre mal positionnee dans un fichier lors de la fermeture du peripherique. Avec Linux 2.6, l'option est activee par defaut pour les lecteurs qui gerent la norme SCSI-3. MT_ST_NO_BLKLIMS (Defaut : 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'inconvenient est que le pilote ne peut pas verifier, avant d'envoyer des commandes, si la taille de bloc choisie est acceptee par le lecteur. MT_ST_CAN_PARTITIONS (Defaut : faux) Cette option active la prise en charge des partitions multiples sur une bande. Cette option s'applique a tous les peripheriques lies au lecteur. MT_ST_SCSI2LOGICAL (Defaut : faux) Cette option indique au pilote d'utiliser les adresses de blocs logiques definies dans le standard SCSI-2, lors d'operations 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 specifiques au peripherique. Il est tres recommande d'activer cette option si le lecteur gere les adresses logiques car elles contiennent egalement les filemarks. Il existe d'ailleurs quelques lecteurs qui ne gerent que les adresses logiques. MT_ST_SYSV (Defaut : faux) Lorsque cette option est activee, les peripheriques de bande utilisent les semantiques System V. Dans le cas contraire, ils utilisent la semantique BSD. La difference principale est le comportement lors de la fermeture d'un peripherique en lecture. Avec System V, la bande est positionnee en avant a la suite de la filemark suivante, si cela n'a pas deja eu lieu lors de la lecture. Dans la semantique BSD, la position ne change pas. MT_NO_WAIT (Defaut : faux) Active le mode immediat (c'est-a-dire n'attend pas la fin de la commande) pour certaines commandes comme le rembobinage. Un exemple : struct mtop mt_cmd; mt_cmd.mt_op = MTSETDRVBUFFER; mt_cmd.mt_count = MT_ST_BOOLEANS | MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES; ioctl(fd, MTIOCTOP, mt_cmd); La taille de bloc par defaut pour un peripherique peut etre configuree avec MT_ST_DEF_BLKSIZE et le code de densite par defaut avec MT_ST_DEFDENSITY. Les valeurs des parametres sont associees par un OU logique avec le code operatoire. Avec Linux 2.1.x et ulterieurs, la valeur de delai maximal peut etre fournie avec la sous-commande MT_ST_SET_TIMEOUT associee par OU avec le delai en seconde. Le delai long (utilise pour les rembobinages ou les commandes pouvant durer longtemps) peut etre configure avec MT_ST_SET_LONG_TIMEOUT. Les valeurs par defaut du noyau sont tres longues afin de s'assurer qu'une commande valable n'est jamais interrompue pour depassement de delai, et cela quel que soit le lecteur. A cause de cela, le pilote peut parfois sembler gele alors qu'il est en attente de depassement du delai. Ces commandes permettent donc de definir des valeurs plus realistes pour un lecteur donne. Les delais definis pour un peripherique s'appliquent a tous les peripheriques lies au meme lecteur. A partir de Linux 2.4.19 et de Linux 2.5.43, le pilote gere un bit d'etat qui indique si le lecteur demande un nettoyage. La methode utilisee par le lecteur pour renvoyer l'information sur le nettoyage est definie en utilisant la sous-commande MT_ST_SEL_CLN. Si la valeur est zero, le bit du nettoyage vaut toujours zero. Si la valeur est 1, la donnee TapeAlert definie dans le standard SCSI-3 est utilisee (pas encore implemente). Les valeurs 2 a 17 sont reservees. Si les 8 bits de poids faible donnent une valeur superieure a 18, les bits des donnees << extended sense >> sont utilises. Les bits 9 a 16 forment un masque pour selectionner les bits a observer et les bits 17 a 23 indiquent un motif de bits a rechercher. Si le motif de bits est nul, un bit ou plus sous le masque indique la requete de nettoyage. Si le motif est non nul, le motif doit correspondre a l'octet des donnees << sense >> masque. MTIOCGET -- Obtenir l'etat Cette requete prend un parametre du type (struct mtget *). /* Structure pour MTIOCGET - Etat de la bande magnetique */ struct mtget { long mt_type; long mt_resid; /* Les registres suivants dependent du materiel */ long mt_dsreg; long mt_gstat; long mt_erreg; /* Ces deux derniers champs sont parfois inutilises */ daddr_t mt_fileno; daddr_t mt_blkno; }; mt_type Le fichier d'en-tete definit plusieurs valeurs pour mt_type, mais le pilote actuel renvoie uniquement les types generiques MT_ISSCSI1 (lecteur SCSI-1 generique) et MT_ISSCSI2 (lecteur SCSI-2 generique). mt_resid Contient le numero de partition en cours. mt_dsreg Renvoie la configuration actuelle de la longueur de bloc (dans les 24 bits de poids faible) et la densite (dans les 8 bits de poids fort). Ces champs sont definis par MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT et MT_ST_DENSITY_MASK. mt_gstat Renvoie des informations generiques d'etat (independantes du peripherique). Le fichier d'en-tete definit les macros suivantes pour tester les bits d'etat : GMT_EOF(x) La bande est positionnee juste apres une filemark (toujours faux apres une operation MTSEEK). GMT_BOT(x) La bande est positionnee juste au debut du premier fichier (toujours faux apres une operation MTSEEK). GMT_EOT(x) Une operation a atteint la fin physique de la bande (End Of Tape). GMT_SM(x) La bande est positionnee sur une setmark (toujours faux apres une operation MTSEEK). GMT_EOD(x) La bande est positionnee a la fin des donnees enregistrees. GMT_WR_PROT(x) La bande est protegee en ecriture. Pour certains enregistreurs, cela signifie qu'ils prennent pas en charge l'ecriture sur ce type de bande. GMT_ONLINE(x) La derniere operation open(2) a trouve le lecteur pret a agir, avec une bande a l'interieur. GMT_D_6250(x) GMT_D_1600(x) GMT_D_800(x) Ces informations "generiques" d'etat renvoient la densite actuelle des lecteurs de bandes 9-pistes 1/2" seulement. GMT_DR_OPEN(x) Le lecteur ne contient pas de bande. GMT_IM_REP_EN(x) GMT_IM_REP_EN(x) : Mode de rapport immediat. Ce bit est active lorsqu'il n'y a aucune assurance que les donnees aient ete physiquement ecrites sur la bande lors du retour de l'appel systeme. Le bit est a zero seulement lorsque le lecteur ne cache pas les donnees et que le pilote est configure pour ne pas faire de cache non plus. GMT_CLN(x) Le lecteur a demande un nettoyage. Implemente depuis Linux 2.4.19 et Linux 2.5.43. mt_erreg Le seul champ defini dans mt_erreg est le nombre d'erreurs corrigees, dans les 16 bits de poids faible (comme defini par les masques MT_ST_SOFTERR_SHIFT et MT_ST_SOFTERR_MASK). A cause d'incompatibilites dans les methodes utilisees 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 defaut, les erreurs transitoires, mais cela peut etre modifie avec la commande SCSI MODE SELECT). mt_fileno Renvoie le numero du fichier en cours (commencant a 0). La valeur est mise a -1 si le numero du fichier est inconnu (par exemple, apres un MTBSS ou un MTSEEK). mt_blkno Renvoie le numero de bloc (commencant a 0) a l'interieur du fichier en cours. Cette valeur est mise a -1 quand le numero de bloc est inconnu (par exemple, apres un MTBSF, un MTBSS ou un MTSEEK). MTIOCPOS -- Obtenir la position de la bande Cette requete prend un parametre du type (struct mtpos *) et renvoie une valeur specifique au lecteur, correspondant au numero de bloc en cours, et qui n'est pas la meme que mt_blkno renvoyee par MTIOCGET. Ce lecteur doit etre un modele SCSI-2 qui gere 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; /* numero du bloc actuel */ }; VALEUR RENVOYEE EACCES Tentative d'ecriture ou d'effacement sur une bande protegee en ecriture. (Cette erreur ne peut pas etre detectee lors de open(2).) EBUSY Le peripherique est deja utilise ou le pilote n'a pas assez de memoire. EFAULT Le parametre de commande pointe en dehors de la memoire adressable par le processus appelant. EINVAL Un appel systeme ioctl(2) avait un parametre non valable ou la taille de bloc demandee etait incorrecte. EIO L'operation demandee a echoue. ENOMEM Le nombre d'octets lus par read(2) est plus petit que le prochain bloc physique sur la bande (avant Linux 2.2.18 et Linux 2.4.0 les octets supplementaires etaient silencieusement ignores). ENOSPC Une ecriture a echoue, car la fin de bande a ete atteinte. ENOSYS Appel systeme ioctl(2) inconnu. ENXIO Durant l'ouverture, le lecteur de bande n'existe pas. EOVERFLOW Tentative de lire ou d'ecrire un bloc de longueur variable plus grand que la taille des tampons internes du controleur. EROFS On tente l'ouverture avec O_WRONLY ou O_RDWR alors que la bande est protegee en ecriture. FICHIERS /dev/st* Les lecteurs de bandes SCSI a rembobinage automatique /dev/nst* Les lecteurs de bandes SCSI sans rembobinage automatique NOTES - Lors d'un echange de donnees entre systemes differents, il faut se mettre d'accord sur la taille des blocs. Les parametres d'un lecteur apres le demarrage sont souvent differents de ceux qu'utilisent la plupart des autres systemes 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 helicoidaux, les DLTs, etc. Il peut etre judicieux d'utiliser ces lecteurs en mode de longueur variable sous Linux aussi (en utilisant MTSETBLK ou MTSETDEFBLK au demarrage), du moins lors de l'echange de donnees avec des systemes d'exploitation differents. L'inconvenient de cela est qu'il faut utiliser une taille de bloc assez grande pour obtenir des taux de transfert acceptables sur un bus SCSI. - Beaucoup de programmes (comme par exemple tar(1)) permettent a l'utilisateur de specifier le facteur de bloc sur la ligne de commande. Notez que cela determine la taille de bloc physique uniquement en mode de bloc de taille variable. - Pour utiliser les lecteurs de bandes SCSI, le pilote SCSI de base, un pilote d'adaptateur SCSI et le pilote du lecteur SCSI doivent tous etre configures dans le noyau ou charges comme modules. Si le pilote des bandes SCSI n'est pas present, le lecteur est reconnu, mais la gestion de bande decrite dans cette page n'est pas disponible. - Le pilote ecrit les messages d'erreur sur la console et/ou les fichiers de journalisation (log). Les codes SENSE presents dans certains messages sont automatiquement traduits en texte si les messages SCSI complets sont actives dans la configuration du noyau. - L'utilisation du tampon interne permet de bons debits en mode blocs fixes meme avec peu d'octets lus (avec read(2)) ou ecrits (avec write(2)). Avec les transferts directs, cela n'est pas possible et peut provoquer une surprise lors de la mise a 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 etre desactives. 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 recentes a propos du pilote et de ses capacites de configuration TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 st(4)