(Cette section a été écrite par Mike Miller)
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.
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
).
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 :-).
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.)