st | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#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 | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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. Dans le noyau 2.6, les bits précédant les 8 bits de poid faible sont concaténés en les 5 bits de poids faibles pour former le numéro du lecteur de bande. 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 d'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 pilote utilise une mémoire tampon interne qui doit être assez grande pour contenir au moins un bloc de données de bande. Dans les noyaux précédant le 2.1.121, le tampon é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 pilote 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 pilote essaie d'allouer un tampon temporaire plus grand lors de son exécution si cela s'avère nécessaire. Toutefois l'allocation à l'exécution de grands blocs contigus peut échouer, et il vaut mieux ne pas compter dessus avec les noyaux antérieurs au 2.1.121.
Le pilote 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 pilote 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 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 pilote 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(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 suivantes est sélectionnée avec un ioctl(2). Le changement de partition est exécuté au moment de la prochaine opération bande pour éviter les mouvements inutiles de la bande. Le nombre maximal de partitions sur une bande est défini par une constante à la compilation (4 à l'origine). 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 même un lien matériel sur le lecteur de bandes par défaut.
À partir du noyau 2.6.2, le pilote exporte dans le répertoire /sys/class/scsi_tape les périphériques attachés et certains paramètres affectés aux périphériques.
Transfert de données | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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.
Dans le noyau 2.6, le périphérique essaie d'utiliser des transferts directs entre le tampon utilisateur et le périphérique. Si cela n'est pas possible, le tampon interne du pilote est utilisé. Les raisons de ne pas utiliser les transferts directs incluent l'alignement incorrect du tampon utilisateur (la valeur par défaut est 512 mais peut être modifiée par le pilote HBA), une des pages du tampon utilisateur n'est pas accessible à l'adaptateur SCSI, etc.
Une marque est automatiquement é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 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. Le troisième appel renvoie une erreur.
Ioctls | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
MTIOCTOP --- Effectue une opération sur la bande. | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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.)
Fonctions de configuration du lecteur de bande magnétique (pour le superutilisateur) :
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 booléennes sont :
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);
MTIOCGET --- Obtenir le statut | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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; };
MTIOCPOS --- Obtenir la position de la bande | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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 */ };
VALEUR RENVOYÉE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
FICHIERS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Le fichier drivers/scsi/README.st ou Documentation/scsi/st.txt (pour les noyaux 2.6 et suivants) dans les sources du noyau contient les informations les plus récentes à propos du pilote et de ses capacités de configuration.
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 18 décembre 1996 et révisée le 6 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 4 st ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
EACCES | VALEUR RENVOYÉE |
EBUSY | VALEUR RENVOYÉE |
EFAULT | VALEUR RENVOYÉE |
EINVAL | VALEUR RENVOYÉE |
EIO | VALEUR RENVOYÉE |
ENOMEM | VALEUR RENVOYÉE |
ENOSPC | VALEUR RENVOYÉE |
ENOSYS | VALEUR RENVOYÉE |
ENXIO | VALEUR RENVOYÉE |
EOVERFLOW | VALEUR RENVOYÉE |
EROFS | VALEUR RENVOYÉE |
MTBSF | MTIOCTOP --- Effectue une opération sur la bande. |
MTBSFM | MTIOCTOP --- Effectue une opération sur la bande. |
MTBSR | MTIOCTOP --- Effectue une opération sur la bande. |
MTBSS | MTIOCTOP --- Effectue une opération sur la bande. |
MTCOMPRESSION | MTIOCTOP --- Effectue une opération sur la bande. |
MTEOM | MTIOCTOP --- Effectue une opération sur la bande. |
MTERASE | MTIOCTOP --- Effectue une opération sur la bande. |
MTFSFM | MTIOCTOP --- Effectue une opération sur la bande. |
MTFSR | MTIOCTOP --- Effectue une opération sur la bande. |
MTFSS | MTIOCTOP --- Effectue une opération sur la bande. |
MTLOAD | MTIOCTOP --- Effectue une opération sur la bande. |
MTLOCK | MTIOCTOP --- Effectue une opération sur la bande. |
MTMKPART | MTIOCTOP --- Effectue une opération sur la bande. |
MTNOP | MTIOCTOP --- Effectue une opération sur la bande. |
MTOFFL | MTIOCTOP --- Effectue une opération sur la bande. |
MTRESET | MTIOCTOP --- Effectue une opération sur la bande. |
MTRETEN | MTIOCTOP --- Effectue une opération sur la bande. |
MTREW | MTIOCTOP --- Effectue une opération sur la bande. |
MTSEEK | MTIOCTOP --- Effectue une opération sur la bande. |
MTSETBLK | MTIOCTOP --- Effectue une opération sur la bande. |
MTSETDENSITY | MTIOCTOP --- Effectue une opération sur la bande. |
MTSETDRVBUFFER 8 | MTIOCTOP --- Effectue une opération sur la bande. |
MTSETPART | MTIOCTOP --- Effectue une opération sur la bande. |
MTUNLOAD | MTIOCTOP --- Effectue une opération sur la bande. |
MTUNLOCK | MTIOCTOP --- Effectue une opération sur la bande. |
MTWEOF | MTIOCTOP --- Effectue une opération sur la bande. |
MTWSM | MTIOCTOP --- Effectue une opération sur la bande. |