La commande pour gérer un lecteur de bande est mt dont la syntaxe est la suivante :
mt [-f tapename] command [count]
-f tapename Nom du lecteur de bande (/dev/rmt/0 par défaut) command Commande souhaitée : rewind, status, erase, retention count Nombre d'opérations
Les options que j'utilise les plus souvent sont les suivantes :
mt -f /dev/rmt/0 status : affiche les informations d'état relatives au lecteur de bande
mt -f /dev/rmt/0 rewind : rembobine la bance
mt -f /dev/rmt/0 offline : rembobine et met le lecteur de bande hors ligne et éjecte la bande
mt -f /dev/rmt/0 fsf X : fait avancer la bande de X blocs de données
mt -f /dev/rmt/0 erase : formate la bande
mt -f /dev/rmt/0n bsf X : on revient en arrière de X blocs de données
La chose primordiale à comprendre sur les lecteurs de bandes, c'est le concept de "bloc de données". Lorsqu'on fait un ufsdump d'un filesystem sur une bande, ce filesystem sera sauvegardé dans un seul bloc de données, affecté d'un numéro de bloc.
Le premier filesystem qui a été sauvegardé sur la bande aura le numéro 0, le deuxième filesystem, le numéro 1, etc.
Voici un exemple de script de sauvegarde ufsdump que j'ai mis en place pour sauvegarder mes filesystems sur une bande DAT :
#!/bin/ksh
# Shell de sauvegarde system via ufsdump
ufsdump 0ucf /dev/rmt/0cbn /
ufsdump 0ucf /dev/rmt/0cbn /var
ufsdump 0ucf /dev/rmt/0cbn /home
ufsdump 0ucf /dev/rmt/0cbn /logiciels
ufsdump 0ucf /dev/rmt/0cbn /export
Je ne parlerai pas ici des options de ufsdump : ce n'est pas le sujet ici. Je préfère expliquer la restauration, qui est plus importante à comprendre à mes yeux. Donc, d'après le script, l'ordre de sauvegarde des filesystems sur la bande est le suivant, avec le numéro de bloc correspondant :
/ : bloc 0 de la bande
/var : bloc 1 de la bande
/home : bloc 2 de la bande
/logiciels : bloc 3 de la bande
/export : bloc 4 de la bande
Passons maintenant à la restauration avec la commande ufsrestore. Avant toute chose, il faut savoir que, pour restaurer un filesystem avec ufsrestore, il faut recréer le filesystem. Donc, si vous restaurez par exemple / ou /var, une manière de le faire est de booter, par exemple, sur le cdrom en mode single, puis de recréer ensuite le filesysem avec la commande newfs.
Donnons quelques exemples concrets de restauration.
1. Restauration de /var
Comme je l'ai dit précédemment, pour restaurer /var, il faut booter en mode single user sur le cdrom. Cela se fait au prompt {ok} :
{ok} boot cdrom -s
Après vous êtes connecté en root, il faut recréer le filesystem /var, en supposant que ce dernier soit sur la partition c0t0d0s3 :
# newfs /dev/rdsk/c0t0d0s3
# mount /dev/dsk/c0t0d0s3 /a
# cd /a
Insérez la bande DAT dans laquelle se trouve les sauvegardes ufsdump. On rembobine la bande :
# mt -f /dev/rmt/0 rewind
Comme indiqué précédemment, /var se trouve sur le bloc 1 de la bande. On positionne donc la bande sur le bloc 1 :
# mt -f /dev/rmt/0 fsf 1
On vérifie que la bande est bien positionnée sur le bloc 1 (le "file no" doit être à 1) :
# mt -f /dev/rmt/0 status
Seagate DAT 72 tape drive:
sense key (0x0)= No Additionaal Sense residual=0 retries= 0
file no=1 block no= 0
C'est bien le "file no" qu'il faut regarder, et non le block no. On peut maintenant restaurer /var :
# ufsrestore rvf /dev/rmt/0
Une fois la restauration terminée :
# cd /a
# umount /a
On vérifie l'intégrité de /var :
# fsck -y /dev/rdsk/c0t0d0s3
On reboot :
# reboot
La commande ufsrestore crée un fichier nommé restoresymtable pour mémoriser des informations entre les restaurations incrémentales. On peut le supprimer :
# cd /var
# rm restoresymtable
Voilà, nous venons de faire une restauration complète de /var. Vous pouvez faire la même chose pour n'importe quel autre filesystem sauvegardé via ufsdump, en faisant attention à toujours positionner la bande sur le bon bloc, suivant le filesystem que vous voulez restaurer.
Remarque très importante : dans le cas d'une restauration de /, il faut recréer le boot block, sinon votre système ne bootera pas. Vous appliquez donc la même procédure que pour la restauration de /var, et juste après le ufsrestore, vous lancez la commande :
# /usr/sbin/installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0t0d0s0
2. Restauration de fichier(s) et répertoires.
La restauration de fichiers ou de répertoires à partir d'une bande suit le même principe que la restauration d'un filesystem : il faut positionner la bande sur le bon bloc correspondant au filesystem dans lequel se trouve vos fichiers ou répertoires que vous voulez restaurer.
Notons quand même que la restauration de fichiers ou de répertoires ne nécessite pas de recréer le filesystem.
Passons maintenant à un exemple concret. Supposons que nous voulions restaurer le fichier /etc/passwd. Par précaution, il est préférable de se mettre dans un répertoire temporaire, par exemple /tmp, pour restaurer le fichier :
# cd /tmp
On rembobine la bande :
# mt -f /dev/rmt/0 rewind
Le fichier /etc/passwd se trouvant dans le filesystem /, la bande doit être positionnée sur le bloc 0. Le rembobinage de la bande a déjà positionné le bloc à 0; on vérifie juste que c'est bien le cas :
# mt -f /dev/rmt/0 status
Seagate DAT 72 tape drive:
sense key (0x0)= No Additionaal Sense residual=0 retries= 0
file no=0 block no= 0
Maintenant, la restauration d'un fichier va se faire avec la commande ufsrestore, mais en mode interactif :
# ufsrestore if /dev/rmt/0
ufsrestore>
En tapant ?, on obtient la liste des commandes disponibles :
ufsrestore > ?
Available commands are:
ls arg - list directory marked arg - list items marked for extraction from directory cd arg - change directory pwd - print current directory add arg - add `arg' to list of files to be extracted delete arg - delete `arg' from list of files to be extracted extract - extract requested files setmodes - set modes of requested directories quit - immediately exit program what - list dump header information verbose - toggle verbose flag (useful with ``ls)'' paginate - toggle pagination flag (affects ``ls and ``marked) setpager - set pagination command and arguments help or `?' - print this list
If no `arg' is supplied, the current directory is used
Listons avec la commande ls :
ufsrestore > ls
.:
a/ etc/ md.tab.full quotas appli/ exploit/ mnt/ restoresymtable bin export/ net/ root/ boot/ home/ opt/ sbin/ cdrom/ kernel/ outillage/ system/ ctm_agent613 lib/ platform/ tmp/ dev/ logiciels/ proc/ usr/ devices/ lost+found/ prototype var/
Le fichier passwd se trouvant dans etc :
ufsrestore > cd etc
ufsrestore > ls passwd
passwd
Maintenant, pour restaurer le fichier :
ufsrestore > add passwd
ufsrestore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume #: 1
set owner/mode for '.'? (yn) y
ufsrestore > quit
Si on regarde ce qui a été restauré, on remarque que la restauration a crée le répertoire "etc" et y a mis le fichier passwd. Il suffit maintenant de copier le fichier restauré sous /etc :
# cp -p /tmp/etc/passwd /etc/passwd
Pour terminer ce billet, parlons rapidement de la restauration d'un répertoire. Elle est identique à celle d'un fichier : on lance la commande ufsrestore en mode interactif, puis on utilise les commandes add et extract pour restaurer. Si besoin, utilisez la commande cd pour vous rendre dans les répertoires qu'il faut, puis ls pour lister.
Commentaires
aucun commentaire