Page suivante Page précédente Table des matières

13. Lire des bandes VMS depuis Linux

(Cette section a été écrite par Mike Miller)

13.1 Introduction

De temps en temps vous pourrez être amené à lire des bandes enregistrées à partir d'une machine sous VMS (ou des bandes enregistrées pour être lisibles sous VMS et les systèmes Unix). En général, c'est assez facile pour les bandes DECFILES11A.

Bien que l'on puisse lire ceci comme une partie d'un mini-HOWTO Linux, je crois que les informations ici présentées sont appliquables à tout système Unix -- j'ai fait cela avec Linux et les systèmes Unix d'HP, de SUN et de DEC. La principale dépendance à la plate-forme est le nom des fichiers périphériques qui peuvent varier d'un système à l'autre, et les options de mt pour spécifier le nom du périphérique (par exemple, mt -f avec Linux et mt -t sur HPUX 9).

Avertissement : j'ai seulement essayé cela avec des lecteurs de bande Exabyte 8 mm SCSI. Si vous avez lu d'autres formats (vous avez encore des lecteurs 9 pistes qui traînent quelque part ?), faites-le moi savoir et je les ajouterai.

13.2 Les bases

Pour lire une bande qui a été écrite avec la commande copy de VMS (ou une commande compatible) tout ce que vous devez savoir est que, pour chaque fichier effectif, il y aura trois fichiers de données sur la bande : une entête, les données et une terminaison. L'entête et la terminaison sont intéressantes car elles contiennent des informations sur le fichier tel qu'il était sous VMS. Le fichier de données est... le fichier de données. Chacun de ces fichiers peut être extrait de la bande avec la commande dd. La bande peut être positionnée en utilisant la commande mt.

Prenons un exemple. J'ai une bande VMS. Les deux premiers de ses fichiers étaient appelés ce66-2.evt et ce66-3.evt sur le système VMS. Le label de la bande est c66a2.

Si j'exécute les commandes suivantes


$ dd if=$TAPE bs=16k of=entête1
$ dd if=$TAPE bs=16k of=donnée1
$ dd if=$TAPE bs=16k of=terminaison1
$ dd if=$TAPE bs=16k of=entête2
$ dd if=$TAPE bs=16k of=donnée2
$ dd if=$TAPE bs=16k of=terminaison2

je me retrouve avec six fichiers : entête1, donnée1, terminaison1, entête2, donnée2 et terminaison2. La syntaxe ici est if="fichier d'entrée", bs="taille des blocs" et of="fichier de sortie". TAPE doit être une variable d'environnement contenant le nom du périphérique de votre lecteur de bande --- par exemple /dev/nts0 si vous utilisez le premier disque SCSI sous Linux.

Si vous aviez voulu récupérer le second fichier, mais pas le premier, sous son non d'origine, vous n'auriez pas eu à vous préoccuper de l'entête :


$ mt -f $TAPE fsf 4
$ dd if=$TAPE bs=16k of=ce66-2.evt
$ mt -f $TAPE fsf 1

Notez le 4. Il permet de sauter trois fichiers pour le premier fichier et un pour l'entête du deuxième. Le second mt saute la seconde terminaison et positionne la bande au début du prochain fichier : la troisième entête. Vous pouvez aussi utilisez mt pour sauter des fichiers en arrière (bsf), rembobiner (rewind) ou décharger la bande (offline, rewoffl).

13.3 Quelques détails

Les fichiers d'entêtes et de terminaisons contiennent des données ASCII en majuscules utilisées par VMS pour stocker des informations sur le fichier comme par exemple la taille des blocs. Ils contiennent aussi le nom du fichier, ce qui peut être utile si vous voulez faire des scripts qui lisent automatiquement des fichiers ou recherchent un fichier particulier. La première entête de la bande est un peu différente des suivantes.

L'en-tête du premier fichier de la bande (comme par exemple dans l'exemple ci-dessus) débute par la chaîne « VOL1 ». Suit le nom de volume. Dans notre exemple, le fichier entête1 commence par « VOL1C66A2 ». Vient ensuite une série d'espace terminée par un chiffre. Après, on trouve la chaîne « HDR1 » qui indique que l'on a à faire à un fichier d'entête. Les caractères qui suivent immédiatement la chaîne « HDR1 » forment le nom du fichier VMS. Dans l'exemple, cette chaîne est « HDR1CE66-2.EVT ». Le prochain champ est le nom du volume.

Le champs initial des autres fichiers (c'est-à-dire tous sauf le premier de la bande) est quelque peu différent. « VOL1 » n'est pas présent. Le reste est identique. Un autre champ utile est le septième. Il se termine par « DECFILES11A ». C'est un signe de conformité au standard DEC Files11A.

Champ                Entête initiale                  Entêtes suivantes
1                    VOL1 + nom du volume             HDR1 + nom du fichier 
2                    HDR1 + nom du fichier            Nom du volume
3                    Nom du volume                    ...
4                    ...                              ...
5                    ...                              ...
6                    ...                              DECFILES11A
7                    DECFILES11A

Pour une documentation complète sur le format de l'entête et de la terminaison, voyez la documentation DEC FILES11 (sur le mur gris/orange --- demandez à votre communauté VMS locale :-).

13.4 Commentaires sur la taille des blocks

Dans l'exemple, j'ai utilisé une taille de bloc de 16 ko. Sur un système Unix, il n'y a pas de taille de bloc associée à un fichier sur un disque alors que, sous VMS, chaque fichier à une taille de bloc spécifique. Cela veut dire que la taille du bloc importe peu sous linux... sauf que cela rend la lecture des bandes plus compliquée. Si vous avez des difficultés pour trouver la taille du bloc et pour lire une bande, vous pouvez essayer de régler la taille de bloc matérielle de votre lecteur de bande en utilisant mt -f $TAPE setblk 0. La syntaxe exacte de l'option setblk (et sa disponibilité) dépend de la version de mt, de l'interface matérielle de votre lecteur de bande et de votre environnement Unix.

(Merci à Wojtek Skulski pour avoir signalé l'option setblk.)


Page suivante Page précédente Table des matières