st
Table des matières
Retour à l'index
NOM
st - Lecteur de bandes SCSI
SYNOPSIS
#include <sys/mtio.h>
int ioctl(int fd, int request [, (void *)arg3]);
int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd);
int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status);
int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);
DESCRIPTION
Le pilote de périphérique st fournit une interface vers un grand nombre
de lecteurs de bandes SCSI. Actuellement, ce pilote prend le contrôle de
tous les périphériques détectés de type « accès séquentiel ». Le pilote
st utilise un numéro majeur valant 9.
Chaque périphérique utilise huit numéros mineurs. Les 5 bits de poids faible
des numéros mineurs sont assignés séquentiellement dans l'ordre de
détection. Avec le noyau 2.6, les bits au-delà des 8 bits de poids faible
sont concaténés aux 5 bits de poids faible pour former le numéro de lecteur
de bande. Les numéros mineurs peuvent être groupés en deux ensembles de
quatre numéros : les numéros mineurs principaux des périphériques (avec
rembobinage automatique, n) et les numéros mineurs des périphériques sans
rembobinage automatique (n+ 128). Les périphériques ouverts avec le
numéro principal recevront une commande REWIND à la fermeture. Les
périphériques ouverts avec le numéro « no-rewind » ne la recevront
pas. Notez qu'essayer de positionner la bande d'un périphérique avec
rembobinage automatique, en utilisant par exemple mt, ne produit pas le
résultat désiré : la bande est à nouveau rembobinée après l'utilisation de
la commande mt et la commande suivante prend effet dès le début de la bande.
Au sein de chaque groupe, quatre 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 trois 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 des 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. Avant Linux 2.1.121, le
tampon est alloué 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 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. Cela 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 avant Linux 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 lien matériel vers le lecteur de bandes par défaut.
Depuis Linux 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 bloc de taille variable, le nombre d'octets à lire n'a pas besoin de
correspondre exactement à la taille du bloc de la bande. Si le nombre
d'octets demandés est plus grand que la taille du bloc suivant sur la bande,
le pilote renvoie la quantité de données effectivement lues. Si la taille de
bloc est plus grande que le nombre d'octets demandés, une erreur est
renvoyée.
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 Linux 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 écrite 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 - Effectuer 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 marqueurs de fichier.
- MTBSFM
-
Reculer la bande de mt_count filemarks. Repositionner la bande sur le
côté EOT de la dernière 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 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
-
Effacer la bande. Avec Linux 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 marques de fichier.
- MTFSFM
-
Avancer la bande de mt_count filemarks. Positionner la bande du côté BOT
de la dernière marque de fichier.
- MTFSR
-
Avancer de mt_count enregistrements (blocs bande).
- MTFSS
-
Avancer de mt_count marques d'ensemble de fichiers.
- 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 est positif, la
taille de la partition 1 est renvoyée et la partition 2 correspond au reste
de la bande. Si mt_count est nul, la bande est formatée en une seule
partition. À partir de Linux 4.6, si mt_count est négatif, la taille de
la partition 0 est renvoyée et la partition 2 correspond au reste de la
bande. 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).
- 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 prend en charge 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éfinir 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éfinir 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 marques de fichiers.
- MTWSM
-
Écrire mt_count marques d'ensemble de fichiers.
Fonctions de configuration du lecteur de bande magnétique (pour le
superutilisateur) :
- MTSETDRVBUFFER
-
Définir 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
(seulement depuis Linux 2.1). Une fonction n'agit que sur un seul des
éléments de la liste ci-dessous à la fois (l'ensemble des booléens constitue
un élément).
-
Une valeur ayant ses 4 bits de poids fort à 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 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 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 définies
explicitement du périphérique actif au démarrage.
-
Les options booléennes sont :
-
- MT_ST_BUFFER_WRITES (Défaut : vrai)
-
Les opérations d'écriture en mode de bloc fixes sont mises en cache. Si
cette option est invalidée, et si l'enregistreur utilise une longueur de
bloc fixe, toutes les opérations d'écriture doivent se faire avec une
longueur multiple de celle du bloc. Cette option doit être fausse pour créer
des archives multivolumes fiables.
- MT_ST_ASYNC_WRITES (Défaut : vrai)
-
Quand cette option est validée, les opérations d'écriture renvoient
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 fixes, 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 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 microcode 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 Linux 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 la prise en charge 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 gère les adresses logiques car elles contiennent
également les filemarks. Il existe d'ailleurs quelques lecteurs qui ne
gèrent 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 (c'est-à-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 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 Linux 2.1.x et ultérieurs, la valeur de délai maximal 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 valable n'est jamais interrompue pour
dépassement de délai, et cela quel que soit le lecteur. À cause de cela, le
pilote peut parfois sembler gelé alors qu'il est en attente de dépassement
du délai. Ces commandes permettent donc de définir des valeurs plus
réalistes pour un lecteur donné. Les délais définis pour un périphérique
s'appliquent à tous les périphériques liés au même lecteur.
A partir de Linux 2.4.19 et de Linux 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 définie en
utilisant la sous-commande MT_ST_SEL_CLN. Si la valeur est zéro, le bit
du nettoyage vaut toujours zéro. Si la valeur est 1, la donnée TapeAlert
définie dans le standard SCSI-3 est utilisée (pas encore implémenté). Les
valeurs 2 à 17 sont réservées. Si les 8 bits de poids faible donnent une
valeur supérieure à 18, les bits des données « extended sense » sont
utilisés. Les bits 9 à 16 forment un masque pour sélectionner les bits à
observer et les bits 17 à 23 indiquent un motif de bits à rechercher. Si le
motif de bits est nul, un bit ou plus sous le masque indique la requête de
nettoyage. Si le motif est non nul, le motif doit correspondre à l'octet des
données « sense » masqué.
MTIOCGET --- Obtenir l'état
Cette requête prend un paramètre du type (struct mtget *).
/* Structure pour MTIOCGET - État de la bande magnétique */
struct mtget {
long mt_type;
long mt_resid;
/* Les registres suivants dépendent du matériel */
long mt_dsreg;
long mt_gstat;
long mt_erreg;
/* Ces deux derniers champs sont parfois inutilisés */
daddr_t mt_fileno;
daddr_t mt_blkno;
};
- mt_type
-
Le fichier d'en-tête définit plusieurs valeurs pour mt_type, mais le
pilote actuel renvoie uniquement les types génériques MT_ISSCSI1 (lecteur
SCSI-1 générique) et MT_ISSCSI2 (lecteur SCSI-2 générique).
- mt_resid
-
Contient le numéro de partition en cours.
- mt_dsreg
-
Renvoie la configuration actuelle de la longueur de bloc (dans les 24 bits
de poids faible) et la densité (dans les 8 bits de poids fort). 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 d'état (indépendantes du
périphérique). Le fichier d'en-tête définit les macros suivantes pour tester
les bits d'état :
-
- 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, cela
signifie qu'ils prennent pas en charge 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" d'état 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)
-
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 Linux 2.4.19 et
Linux 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 faible (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 transitoires, mais
cela peut être modifié avec la commande SCSI MODE SELECT).
- mt_fileno
-
Renvoie le numéro du fichier en cours (commençant à 0). La valeur est mise à
-1 si le numéro du fichier est inconnu (par exemple, après un MTBSS ou un
MTSEEK).
- mt_blkno
-
Renvoie le numéro de bloc (commençant à 0) à l'intérieur du fichier en
cours. Cette valeur est mise à -1 quand le numéro de bloc est inconnu (par
exemple, après un MTBSF, un MTBSS ou un MTSEEK).
MTIOCPOS --- Obtenir la position de la bande
Cette requête prend un paramètre du type (struct mtpos *) et renvoie une
valeur spécifique au lecteur, correspondant au numéro de bloc en cours, et
qui n'est pas la même que mt_blkno renvoyée par MTIOCGET. Ce lecteur
doit être un modèle SCSI-2 qui gère 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 actuel */
};
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'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
supplémentaires étaient silencieusement ignorés).
- 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
- -
-
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. Cela 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 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 à
l'utilisateur de spécifier le facteur de bloc sur la ligne de
commande. Notez que cela détermine 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 ê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 la gestion de bande décrite dans
cette page n'est pas disponible.
- -
-
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.
- -
-
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 Linux contient les
informations les plus récentes à propos du pilote et de ses capacités de
configuration
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>,
Cédric Boutillier <cedric.boutillier@gmail.com>,
Frédéric Hantrais <fhantrais@gmail.com>
et
Grégoire Scano <gregoire.scano@malloc.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Transfert de données
-
- Ioctls
-
- MTIOCTOP - Effectuer une opération sur la bande
-
- MTIOCGET --- Obtenir l'état
-
- MTIOCPOS --- Obtenir la position de la bande
-
- VALEUR RENVOYÉE
-
- FICHIERS
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:32 GMT, September 19, 2025