ST(4) Manuel du programmeur Linux ST(4)
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 driver st fournit une interface vers un grand nombre de
lecteurs de bandes SCSI. Actuellement, ce driver prend le
contrôle de tous les périphériques détectés de type "accès
séquentiel". Le driver st utilise un numéro majeur valant
9.
Chaque périphérique utilise huit numéros mineurs. Les 5
bits de poids faibles des numéros mineurs sont assignés
séquentiellement dans l'ordre de détection. Les numéros
mineurs peuvent être groupés en deux ensembles de quatre
nombres : les numéros mineurs principaux des périphériques
(auto-rewind), n, et les numéros mineurs des
périphériques "no-rewind" (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
un périphérique auto-rewind en utilisant, par exemple, mt
ne conduit pas au résultat désiré : la bande est à nouveau
rembobinée après 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 car
actéristiques différentes (taille de bloc, compression,
densité...) 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 compi
lation, on peut modifier la répartition entre le nombre
maximal de lecteurs de bandes et le nombre de numéros
mineurs pour chaque lecteur. Les allocations par défaut
permettent de contrôler 32 lecteurs de bandes, alors qu'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
Linux 18 Mai 1999 1
ST(4) Manuel du programmeur Linux ST(4)
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 driver utilise une mémoire tampon interne qui doit être
assez large pour contenir au moins un bloc de données de
bande. Dans les noyaux précédents le 2.1.121, le buffer
était alloué sous forme de bloc continu. Ceci limitait la
taille de bloc au plus grand espace contigu disponible
pour l'allocation du noyau. Cette limite est actuellement
de 128 Ko pour les architecture 32 bits et 254 Ko pour les
64 bits. Dans les noyaux plus récents, le driver alloue la
mémoire tampon en plusieurs parties 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
écraser par une option de démarrage du système. De plus,
le driver essaie d'allouer un buffer temporaire plus grand
lors de son exécution si cela s'avère nécessaire. Toute
fois l'allocation à l'exécution de grands blocs contigüs
peut échouer, et il vaut mieux ne pas compter dessus avec
les noyaux antérieurs au 2.1.121.
Le driver ne supporte pas spécifiquement un type ou une
marque de lecteur de bande. Après le démarrage du système,
les options du périphériques sont définies par le micro-
code du périphérique. Par exemple si celui-ci réclame un
mode de blocs fixes, le driver de bandes utilisera ce
mode. Les options peuvent être modifiées par des appels
ioctl() explicites, et restent effectives lorqsque le
périphérique est fermé puis réouvert. La configuration des
options affecte aussi bien les périphériques auto-rewind
que les non-rewind.
Des options différentes peuvent être fournies pour
différents périphériques au sein du sous-groupe de quatre.
Les options prennent effet quand le périphérique est
ouvert. Par exemple un administrateur peut définir un dis
positif qui écrit en mode blocs fixes avec une certaine
taille, et un qui écrit avec des blocs de longueurs vari
ables (si le périphérique accepte les deux modes).
Le driver supporte 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). Le support des
partitions doit être activé par un ioctl. L'emplacement de
Linux 18 Mai 1999 2
ST(4) Manuel du programmeur Linux ST(4)
la bande est sauvegardé au sein de chaque partition au
cours des changements de partitions. La partition utilisée
pour les opérations suivantes est sélectionnée avec un
ioctl. Le changement de partition est exécuté au moment de
la prochaine opérattion bande pour éviter les mouvements
inutiles de la bande. Le nombre maximal de partitions sur
une bande est défini par une constante à la comilation (4
à l'origine). Le driver contient un ioctl qui peut format
ter une bande avec une ou deux partitions.
Le fichier spécial de périphérique /dev/tape est générale
ment un lien symbolique, ou même un lien matériel sur le
lecteur de bandes par défaut.
TRANSFERT DES DONNEES
Le driver 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 quan
tité de données transmise lors de l'appel système. Dans le
mode de longueur variable, un bloc de donnée 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 sur bande ne contiennent aucune infor
mation sur le mode d'écriture utilisé. En lecture, la
seule chose importante est d'utiliser une commande qui
accepte la taille du bloc sur bande.
En mode variable, le nombre d'octets à lire n'a pas besoin
de correspondre exactement à la taille du bloc sur 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 ren
verra la quantité voulue, et le reste des données est
oublié.
En mode fixe, le nombre d'octets demandé peut être arbi
traire 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 tampons sont activés. Dans tous les
autres cas (y compris les noyaux plus récents) le nombre
d'octets à écrire doit être un multiple de la taille des
blocs.
Une marque est automatique écrite sur la bande si la
dernière opération avant fermeture était une écriture.
Lorsqu'une telle marque est rencontrée en lecture, les
choses suivantes se produisent. 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 renvoit zéro
Linux 18 Mai 1999 3
ST(4) Manuel du programmeur Linux ST(4)
octets. La lecture suivante renvoit les données du fichier
suivant. La fin des données enregistrées est signalée par
un retour de zéro octets pour deux appels successifs en
lecture. Le troisième appel renvoit une erreur.
IOCTLS
Le driver supporte trois requêtes ioctl. 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 argument du type (struct mtop *)
indiquant l'opération à effectuer. Certains contrôleurs
ne permettent pas toutes les opérations. Le contrôleur
renvoie une erreur EIO s'il 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; /* combien d'opérations */
};
Opérations sur bande magnétique lors d'une utilisation
normale:
[NDT] Je conserve les termes de filemark, et setmark à
défaut de termes précis en français.
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 filemark.
MTBSR Réculer 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, et
désactiver la compression si mt_count est
nul. Cette commande untile la page MODE 15
supporté par la plupart des DATs.
MTEOM Aller à la fin des enregistrements (ajouter
des fichiers).
MTERASE Effacer la bande.
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 filemark.
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 se présenter avec certains
chargeurs automatiques HP. Si mt_count
Linux 18 Mai 1999 4
ST(4) Manuel du programmeur Linux ST(4)
correspond à 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 Formatter la bande en une ou deux parti
tions. Si mt_count est non-nul, il corre
spond à 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 formatté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 buffers du driver
- A utiliser avant de lire le statut 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 Positionner 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 Fixe 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 le support de partition
nement est activé pour le lecteur (voir
MT_ST_CAN_PARTITIONS plus bas).
MTUNLOAD Exécuter la commande de déchargement SCSI
(n'ejecte pas la bande).
MTUNLOCK Déverrouiller la porte du lecteur de bande.
MTWEOF Ecrire mt_count filemarks.
MTWSM Ecrire mt_count setmarks.
Fonctions de configuration du lecteur de bande magnétique
(pour le Super-Utilisateur) :
Linux 18 Mai 1999 5
ST(4) Manuel du programmeur Linux ST(4)
MTSETDRVBUFFER
Positionner diverses options du contrôleur ou du
lecteur en fonction des bits encodés dans
mt_count. Ces options concernent le type de
buffer du lecteur, 13 options booléennes du
contrôleur, le seuil d'écriture du buffer, les
valeurs par défaut des tailles de blocs et de den
sité, ainsi que les délais (noyaux >= 2.1). Une
fonction n'agit que sur un seul des éléments de la
liste ci-dessus à la fois.
Une valeur ayant ses 4 bits de poids forts à 0
sera utilisée pour indiquer le type de buffer du
lecteur. Les types de buffer sont :
0 Le contrôleur ne renverra pas le statut
BON en écriture avant que les données ne
soient réellement écrites sur le support.
1 Le contrôleur peut renvoyer le statut BON
en écriture dès que les données ont été
transmises aux buffers internes du lecteur
de bande.
2 Le contrôleur peut renvoyer le statut BON
en écriture dès que les données ont été
transmises aux buffers internes du lecteur
de bande, si toutes les écritures
précédentes des buffers 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 buffers internes du con
trolleur. (voir DESCRIPTION, plus bas).
Pour valider ou invalider les options booléennes,
la valeur mt_count doit inclure l'une des con
stantes 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
Linux 18 Mai 1999 6
ST(4) Manuel du programmeur Linux ST(4)
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)
opérations d'écriture dans la mémoire tam
pon en mode de blocs fixes. 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 multi-volume fiables.
MT_ST_ASYNC_WRITES (Defaut: vrai)
Quand cette option est validée, les
opérations d'écriture retournent immédiate
ment si les données tiennent dans le buffer
du driver, sans attendre que celles-ci
soient effectivement transmises au lecteur
de bande. Le seuil du buffer d'écriture
détermine le taux de remplissage du buffer
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 multi-volume fiables.
MT_ST_READ_AHEAD (Defaut: vrai)
Cette option indique au driver 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
driver quand un fichier est fermé. L'atti
tude normale consiste à ecrire une seule
filemark, néanmoins si cette option est
validée, le driver é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
Linux 18 Mai 1999 7
ST(4) Manuel du programmeur Linux ST(4)
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 égale
ment 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ébugging du driver, si celui-ci a été com
pilé 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
driver 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 founis au pilote en util
isant 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'écri
ture. 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 soit écrite correctement.
MT_ST_CAN_BSR (Défaut: faux)
Lorsque la lecture anticipée est utilisée,
Linux 18 Mai 1999 8
ST(4) Manuel du programmeur Linux ST(4)
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 bloc
fixes et lecture anticipée peut être mal
positionnée dans un fichier lors de la fer
meture du périphérique.
MT_ST_NO_BLKLIMS (Défaut: faux)
Certains lecteurs n'acceptent pas la com
mande 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 comman
des, 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 parti
tions 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 de opérations
de positionnement et de lecture de la posi
iton (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 validée, les
périphériques de bande utilisent la séman
tique Système V. Sinon 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 Système
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
Linux 18 Mai 1999 9
ST(4) Manuel du programmeur Linux ST(4)
la sémantique BSD, la position ne change
pas.
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-com
mande 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 pour être sûre qu'une com
mande valide ne soit jamais interrompue pour
dépassement de délai, et ceci quelque soit le
lecteur. A 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.
MTIOCGET - Obtenir le statut
Cette requête prend un argument du type (struct mtget *).
/* Structure pour MTIOCGET - Statut d'une 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 driver actuel renvoie
uniquement les types génériques MT_ISSCSI1
(lecteur SCSI-1 générique) et MT_ISSCSI2
Linux 18 Mai 1999 10
ST(4) Manuel du programmeur Linux ST(4)
(lecteur SCSI-2 générique).
mt_resid contient le numéro de partition courrante.
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 protegée en écri
ture. Pour certains enregistreurs ceci sig
nifie qu'ils ne supportent pas l'écriture
sur ce type de bande.
GMT_ONLINE(x) : La dernière opération open() a
trouvé le lecteur prêt à agir, avec une
bande à l'interieur.
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 écrite 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 con
figuré pour ne pas faire de cache non plus.
mt_erreg Le seul champ défini dans mt_erreg est le nom
bre 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). A
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
Linux 18 Mai 1999 11
ST(4) Manuel du programmeur Linux ST(4)
ne renvoient pas, par défaut, les erreurs cor
rigées, mais cela peut être modifié avec la
commande SCSI MODE SELECT).
mt_fileno renvoie le numéro du fichier en cours (com
mençant à 0). La valeur est mise a -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 argument du type (struct mtpos *)
et renvoie une valeur, spécifique au lecteur, correspon
dant 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 SCSI-2 qui supporte la commande READ POSITION ou un
lecteur SCSI-1 compatible Tandberg (Tandberg, Archive
Viper, Wangtek, ... ).
/* Structure pour commande MTIOCPOS - Obtenir la position */
struct mtpos {
long mt_blkno; /* current block number */
};
VALEUR RENVOYÉE
EIO L'opération demandée a échoué.
ENOSPC Une écriture a échoué car la fin de bande a
été atteinte.
Eaccès Tentative d'écriture ou d'effacement sur une
bande protégée en écriture. (Ceci ne peut
pas être détecté lors de open().)
EFAULT Le paramètre de commande pointe en dehors de
la mémoire adressable par le processus
appelant.
ENXIO Durant l'ouverture, le lecteur de bande
n'existe pas.
EBUSY Le périphérique est déjà utilisé ou le
driver n'a pas assez de mémoire.
EOVERFLOW Tentative de lire ou d'écrire un bloc de
longueur variable plus grand que la taille
des buffers internes du contrôleur.
EINVAL Un appel système ioctl() a un argument
illégal, ou la taille de bloc demandée était
Linux 18 Mai 1999 12
ST(4) Manuel du programmeur Linux ST(4)
incorrecte.
ENOSYS Appel système ioctl() inconnu.
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
AUTEUR
Le pilote a été écrit par Kai Mäkisara (Kai.Mak
isara@metla.fi) à partir d'un pilote écrit par Dwayne
Forsyth. Plusieurs autres personnes ont également colla
boré à l'écriture du pilote.
VOIR AUSSI
mt(1)
Le fichier README.st dans les sources du noyau contient
les informations les plus récentes à propos du pilote et
de ses capacités de configuration.
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
DATs, les lecteurs 8mm hélicoïdaux, les DLTs... Il peut
être judicieux d'utiliser ces lecteurs en mode de longueur
variable sous Linux aussi (en utilisant MTSETLK ou MTSET
DEFBLK 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
acceptable sur un bus SCSI.
2. Beaucoup de programmes (comme tar par exemple) permet
tent à l'utilisateur de spécifier le facteur de blocage
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
Linux 18 Mai 1999 13
ST(4) Manuel du programmeur Linux ST(4)
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.
COPYRIGHT
1995 Robert K. Nichols. 1999 Kai Mäkisara.
TRADUCTION
Christophe Blaess, 1997.
Linux 18 Mai 1999 14