8. Les lecteurs de bandes

Contenu de cette section

Les informations de ce chapitre concernent les lecteurs de bandes.

8.1 Matériel supporté et non supporté

Les périphériques utilisant des tailles de blocs fixes ou variables plus petites que la taille du buffer du pilote SCSI (32Ko dans les sources de la distribution du noyau) sont gérés.

Les paramètres (taille de bloc, bufférisation, densité) sont réglés via des ioctls (habituellement par le programme mt) ; ils restent actifs même si le périphérique est fermé puis réouvert (ici, périphérique est à prendre au sens : fichier spécial représentant ce périphérique).

Théoriquement, tous les lecteurs doivent marcher, y compris :

8.2 Problèmes fréquents

Le lecteur de bande n'est pas reconnu au démarrage

Essayez de démarrer avec une bande dans le lecteur.

Impossibilité de lire correctement des bandes comportant plusieurs fichiers

En lisant des bandes avec plusieurs fichiers, le premier tar est correct, mais le suivant échoue sans remontée d'erreurs. Un second essai de tar réussit.

Les programmes utilisateur, tels que tar, ne savent pas interpréter les marques de fichiers. Le premier tar lit la bande jusqu'à la fin du fichier. Le second tar essaie de lire la marque de fichier (file mark) et n'obtient aucune donnée. Par contre, la bande a dépassé la marque de fichier, si bien que la troisième lecture lit le deuxième fichier de la bande.

Utilisez mt sur le fichier spécial attaquant le lecteur en mode 'non-rembobinage' (no-rewind) pour avancer jusqu'au fichier suivant.

La décompression échoue

Les programmes de décompression ne sont pas capables de gérer les zéros qui comblent le dernier bloc du fichier.

Pour éliminer les avertissements et les erreurs, mettez vos fichiers compressés dans un fichier tar. Plutôt que de faire :

tar cfvz /dev/nst0 fichier.1 fichier.2 ...

faites :

tar cfvz tmp.tar.z fichier.1 fichier.2 ...

tar cf /dev/nst0 tmp.tar.z

Problèmes de lecture de bandes faites sur d'autres systèmes

Vous n'arrivez pas à relire une bande faite sur un autre système d'exploitation ou bien un autre système d'exploitation n'arrive pas à relire les bandes faites sous Linux.

Les différents systèmes utilisent souvent des tailles de blocs différentes. Sur un lecteur de bande utilisant une taille fixe, vous allez avoir des erreurs en essayant de lire des blocs inscrits avec une autre taille.

Pour lire ces bandes, vous devez ajuster la taille des blocs de votre pilote de bandes à la taille avec laquelle la bande a été écrite. Vous pouvez aussi essayer de le configurer pour qu'il utilise une taille variable.

REMARQUE : cette taille est une taille physique de bloc et n'est pas le facteur de blocage utilisé par tar, dump et consors.

Vous pouvez le faire par la commande mt :

mt setblk <taille>

ou

mt setblk 0

pour indiquer au pilote d'utiliser une taille de bloc variable.

Notez que ces options de mt ne sont pas supportées par la version GNU de mt qui est incluse dans certaines distributions de Linux. Utilisez plutôt la version mt dérivée de BSD. Les sources devraient être disponibles à l'adresse

tsx-11.mit.edu:/pub/linux/ALPHA/scsi

ST_BUFFER_BLOCKS (définie dans le fichier /usr/src/linux/drivers/scsi/st_options.h dans les noyaux récents et /usr/src/linux/drivers/scsi/st.c dans les anciens noyaux) est initialisée de manière à autoriser une taille maximale des buffers de 32Ko. Editez le fichier précédent pour augmenter cette limite.

Message d'erreur "No such device"

Tous les essais pour accéder à la bande se terminent par un message du genre

"No such device".

Vérifiez le type du fichier spécial représentant votre lecteur. Ce doit être un fichier en mode caractère, les majeur et mineur devant être en concordance avec les valeurs définies dans le chapitre Fichiers spéciaux .

Les lectures de bandes à une certaine densité marchent, mais les écritures échouent

Plusieurs lecteurs de bandes acceptent les lectures à une densité inférieure pour compatibilité avec des matériels plus anciens, mais ils n'écrivent pas à ces mêmes densités.

C'est le cas en particulier des lecteurs QIC, qui peuvent relire des vieilles cassettes de 60Mo, mais qui ne savent plus écrire que des bandes de 120, 150, 250 ou 525Mo.

Le repositionnement de la bande bloque le bus SCSI

Cela est fréquent avec les équipements SCSI qui ne gèrent qu'une commande en attente à la fois (reportez-vous au chapitre Périphériques multiples pour une explication plus détaillée, et Guide de l'acheteur : comparaison des fonctionnalités pour voir quels lecteurs souffrent de cette limitation), bien que cela puisse également être dû à un lecteur de bandes refusant les déconnexions.

Dans tous les cas, vous pouvez contourner ce problème en éditant le fichier drivers/scsi/sr.c et en ajoutant une ligne

#define ST_NOWAIT

au début. Regénérez ensuite le noyau.

Cela va avoir pour effet de retarder les éventuelles erreurs jusqu'à la prochaine commande SCSI exécutée. Il est pour cela préférable de faire

mt status

après qu'une commande de repositionnement a été demandée par mt. Cela vous évitera d'écraser des fichiers sur la bande si le positionnement a échoué.

Vous pouvez aussi envisager de changer votre contrôleur pour un modèle mieux supporté ou de vous équiper d'un lecteur de bande plus récent, si vous avez besoin d'utiliser ce contournement et que vous désiriez écrire plusieurs fichiers sur une même bande.

8.3 Fichiers spéciaux

Les lecteurs de bandes SCSI utilisent le majeur 9.

Linux utilise le type dev_t sur 16 bits, dont 8 bits sont réservés pour le mineur. Pour cette raison, les mineurs pour les bandes SCSI sont affectés dynamiquement et commencent au plus petit numéro d'adapteur SCSI, périphérique ou unité logique.

Les mineurs des fichiers spéciaux rembobinant les bandes commencent à 0, 0 étant le premier lecteur de bande SCSI (/dev/st0 créé par mknod /dev/st0 c 9 0), le deuxième lecteur étant /dev/st1 (mknod /dev/st1 c 9 1), etc.

Les mineurs des fichiers spéciaux ne rembobinant pas les bandes ont le bit de poids fort à 1, c'est-à-dire que /dev/nst0 a été créé par : mknod /dev/nst0 c 9 128.

La convention standard de nommage est

/dev/nst{chiffre} pour les operations sans rembobinage
/dev/st{chiffre}  pour les operations avec rembobinage


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre