| | |
st - Lecteur de bandes SCSI.
#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 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
lqaccès séquentielrq. 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 lqno-rewindrq (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 lqno-rewindrq 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 caracté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 compilation, 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
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. Toutefois 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 dispositif qui écrit en mode blocs fixes avec une certaine
taille, et un qui écrit avec des blocs de longueurs variables (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
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 formatter 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 même un lien matériel sur le lecteur
de bandes par défaut.
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 quantité 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 information
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 renverra la quantité voulue, et le reste
des données est oublié.
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 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 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.
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:
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 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 partitions.
Si mt_count est non-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 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 partitionnement 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) :
- 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
densité, 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 controlleur. (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)
- opérations
d'écriture dans la mémoire tampon 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édiatement 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'attitude
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 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ébugging du driver, 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 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 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 soit é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 bloc fixes et lecture anticipée
peut être mal positionnée dans un fichier lors de la fermeture du périphérique.
- MT_ST_NO_BLKLIMS (Défaut: faux)
- Certains lecteurs n'acceptent pas la commande
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 de opérations de positionnement et de lecture
de la posiiton (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émantique 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 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-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 pour être sûre qu'une
commande 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.
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
(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
é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() 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 lqgénériquesrq 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 configuré pour ne pas faire de cache
non plus.
- 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
). 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
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 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
).
Cette requête prend un argument 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 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 */
};
- 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 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.
/dev/st* : Les lecteurs de bandes SCSI à rembobinage automatique
/dev/nst* : Les lecteurs de bandes SCSI sans rembobinage automatique
Le
pilote a été écrit par Kai M:akisara (Kai.Makisara@metla.fi) à partir d'un
pilote écrit par Dwayne Forsyth. Plusieurs autres personnes ont également
collaboré à l'écriture du pilote.
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.
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 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 acceptable sur un bus SCSI.
2. Beaucoup de programmes (comme tar
par exemple) permettent à 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 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.
1995 Robert K. Nichols.
1999 Kai M:akisara.
Christophe Blaess, 1997.
Table des matières
© 1996-2000 Adaptation française "Christophe Blaess"
| |