[Linux-Biella] tutils per tape DAT SCSI (lungo)
LeOS
linux@bilug.linux.it
Tue, 07 Jan 2003 19:35:32 +0100
da leggersi su un laptop appoggiato sulle ginocchia mentre si e' in bagno...
come gia' anticipato all'ultima riunione (a cui ho potuto partecipare)
vi posto l'ultimo nato
mi son trovato tra le mani un DAT scsi e non sapendo bene che farmene mi
son fatto un paio di cosine carine per utilizzarlo comodamente
pochi noiosi cenni su come funziona un DAT, o meglio un generico
dispositivo sequenziale:
immaginate di trovarvi davanti ad un videoregistratore o anche solamente
un lettore di audiocassette.
avete un natro, avete un contagiri.
beh dai sinceramente avete anche altre cose, tipo la comodita' di andare
direttamente alla fine dei dati salvati, e pure la possibilita' di
muovervi avanti e indietro per un determinano numero di "brani" e
posizionarvi all'inizio o alla fine dei brani stessi :)
tutto questo serve perche' in realta', una volta voi avrete copiato un
file (rigorosamente un .tar e non provate MAI a mettere qualunque altra
cosa su un tape se non volete impazzire a cercar di capire perke' vi da'
i/o error) dicevo, una volta copiato un file sul nastro, questo perdera'
identita'...
nei termini, voi copiate il file pippo.tar con il semplice comando:
cp pippo.tar /dev/tape
(perche' preventivamente avrete fatto un bel link simbolico da /dev/nst0
a /dev/tape) (altra cosa, so ke sono un disordinato mentale ma e'
importantissimo: /dev/st0 esegue rewind dopo ogni operazione, usate
sempre /dev/nst0 che non fa nulla, altrimenti diventerete pazzi :)))
ok torniamo a noi
con il comando cp avrete copiato il vostro file pippo.tar sul nastro
per recuperarlo semplicemente dovrete riavviare il nastro e posizionarvi
all'inizio del file (come ve lo diro' dopo) e fare l'inverso di prima:
cp /dev/tape .
otterrete un bel file: tape
e ora? questo file non e' niente altro che il vecchio pippo.tar che
avevamo copiato prima
esistono quindi una serie di parametri del comando mt-st che ci fanno
fare tante cose belle
io che son pigro e non ho voglia ogni volta di scrivere mt-st -f
/dev/tape cazzodicomando mi son fatto un alias mettendo tape = mt-st -f
/dev/tape
e per comodita' e pigrizia continuo ad usarlo in questa email/documento
tape tell - restituisce la posizione in blocks del nastro (il nostro
contagiri)
tape seek block - raggiunge il block definito (ffd e rew)
tape rewind - mi sembra ovvio
tape eject - vedi sopra
tape lock - e' ovvio ma lo dico, locka il tape, evita ke l'idiota di
turno faccia eject della cassetta col pulsante... nei termini, se ci
sono operazioni in corso, il tape e' lockato, ma se e' a riposo, questo
puo' essere ejected
tape unlock - slocka il tape, l'idiota di turno puo' ejectare la cassetta :)
tape erase - prepara il caffe'... si certo e voi ci credete...
andiamo nel divertente!
tape eod - si posiziona alla fine dei dati scritti sul tape
tape eof - scrive un insignificante, microscopico, apparentemente
inutile blocco vuoto...
a cosa serve? semplice: io NON posso assolutamente (almeno col mio DAT)
posizionarmi al block Xesimo (col comando tape seek X) quando quello e'
pure l'ultimo block scritto, a tale scopo, dopo aver scritto l'ultimo
file, io scrivo pure un block vuoto e cosi' l'ultimo valido sara' X+1
tape bsfm X - da dove sono, torno indietro di X posizioni e mi piazzo
all'inizio del file successivo
qusti - a memoria - sono i comandi ke ho usato io per le utilities, se
ho scritto stronzate non abbiatene a male...
-------------------------------------------------------------------------
ora vi spiego a grandi linee come funzionano i comandi, (tre per ora e
li troverete tutti qui sotto):
tinit [label]: inizializza il nastro e ci mette pure un nome, altrimenti
tinit senza nulla il nastro si chiamera' no-name
semplicissimo:
crea una dir "tinit" nella propria home (non mi piace aver merda sparsa
per i FS)
memorizza la directory dove ci troviamo leggendo la variabile di sistema
$PWD (per motivi di tar ci dovremo muovere nell'altra dir, quindi, onde
evitare di perderci in giro per le directories me la memorizzo e ci
torno dopo)
crea un file di testo (che diventera' l'header del catalog ovvero il log
di tutte le operazioni) con dentro nome nastro e data (leggetevi il
comando con vi)
poi crea il tar e lo copia sul nastro
fatto tutto cancella la directory temporanea e torna dove eravamo prima
perche' questo?!?!?
semplice:
io potevo creare in current per gli amici "." ) i file temporanei, ma
potrei trovarmi all'interno di una dir di cui ho solamente i diritti di
lettura quindi non potrei mai creare i file, allo stesso tempo, se io
devo creare in file .tar e vado a prendere il file /pippo/pluto/paperino
quando apriro' il file.tar avro' il mio bel percorso completo (senza il
primo slash) questo perke' io sono imbecille e non ho trovato l'opzione
per ELIMINARE dai file .tar il percorso (sempre che sia possibile, cmq
se e' possibile ormai ho fatto cosi' e non ho voglia di cambiare nulla!)
allora succede ke mi trovo a andare dentro la dir temporanea, creare il
file .tar "pulito" e poi buono buono me ne torno dove ero prima ovvero
nella variabile $currentdir
TDIR:
crea la solita dir
va in fondo al nastro
torna indietro fino a dove e' l'inizio del catalog
lo copia in locale nella dir temporanea
decomprime
e visualizza con un less
all'uscita elimina la porcheria
TSAVE:
il piu' divertente...
crea la dir temporanea
esattamente com tdir va a pigliare il catalog
dopo questo si va nuovamente a posizionare all'inizio di questo catalog
in quanto ORA STIAMO PER SALVARE UN FILE, quindi il "vecchio" cataloho
verra' sovrascritto e poi risalvato alla fine del nastro solamente DOPO
aver salvato il file
il catalog viene quindi aggiornato dei seguenti dati:
nome file beckupato
posizione iniziale del nastro (prima della copia sul tape)
posizione finale del nastro (dopo averci copiato il file)
e data (semplice date >> catalog)
poi ke fa? semplice, sempre dentro la directory temporanea ricrea il
catalog.tar, con il file catalog aggiornato e lo va a salvare dentro il
nastro, in coda a quello che abbiamo precedentemente salvato
quindi noi inzialmente potevamo avere una situazione tipo:
I--------CE
I = Inizio nastro
I...C = spazio occupato dal catalog
E = marker di fine nastro
ora abbiamo:
I-----------------------------F1--------CE
I = Inizio nastro
I...F1 = spazio occupato dal file1
F1...C = spazio occupato dal catalog
E = marker di fine nastro
e cosi' via, sempre posizionandoci al punto evidenziato come Fx dove x
e' l'ultimo file salvato, prima di iniziare l'operazione di copia
potete qui vedere un esempio di catalog che sicuramente vi schiarisce le
idee, se come son sicuro non sono stato abbastanza chiaro...
============================
Tape "BaBau!" created on
Mon Dec 30 21:18:28 CET 2002
============================
----------------------------
.bash_profile
Begins:
At block 2.
Ends:
At block 23.
Mon Dec 30 21:23:00 CET 2002
----------------------------
httpd-start
Begins:
At block 23.
Ends:
At block 44.
Mon Jan 6 16:02:46 CET 2003
----------------------------
gpm-start
Begins:
At block 44.
Ends:
At block 65.
Mon Jan 6 16:03:05 CET 2003
----------------------------
clearlogs
Begins:
At block 65.
Ends:
At block 86.
Mon Jan 6 16:03:39 CET 2003
----------------------------
mail
Begins:
At block 86.
Ends:
At block 107.
Mon Jan 6 16:04:02 CET 2003
----------------------------
potete quindi vedere che .bash_profile inizia al block 2 e finisce al
block 23
quindi la prima sessione di tsave avra' visto una situazione simile:
2-----------------23----CE
con I = 2
F1 = 23
F1...C = spazio del catalog
e cosi' via, a fronte di ogni salvataggio fino ad arrivare ad avere la
situazione finale con:
2-------23-------44--------65---------86-------107-------CE
con tutti i file uno dopo l'altro, ed un bel catalog che chiude le danze
ma perke' ho fatto tutto questo?
semplice
ogni programma di backup che io conosca crea un database locale con
dentro il contenuto del nastro
se io piglio il nastro e vado a casa di lucabert che pure lui ha un DAT,
se non ho pure un duplicato del database, col nastro ci possiamo fare le
stelle filanti...
semplicemente con questo sistema, l'intero "database" del contenuto del
nastro sta sul nastro stesso
quindi per me e' semplicissimo recuperare i miei comandi idioti e li uso
sul suo pc, senza bisogno di altro
e se dimentico i comandi?
beh
mi ricordo di andare in fondo al nastro
torno indietro di tre punti
copio in locale
estraggo il catalog
e sono a cavallo: con tape seek mi vado a posizionare dove voglio e poi
mi copio in locale quel ke serve!
-----------------------------------------------------------------------
COSA C'E' ancora da fare?
il comando di restore
ovvero
NON e' possibile fare un comando restore nomefile
perke' io posso pure non sapere cosa diavolo c'e' dentro il nastro
allora io conto di leggere il catalog, visualizzarlo similarmente al
comando "tdir" pero' dare la possibilita' di selezionare il file, un po'
alla midnight commander, quindi di ripristinare
ok c'e' da smanettare un po', ma tanto sono giovane e non ho un cazzo di
meglio da fare (mi piace mentire pure a me stesso)
a parte gli skerzi, ho postato tutto 'sto rompimento di palle, perke'
vorrei da voi qualche consiglio, nei termini: cosa vorresti avere tu
come restore?
la mia idea e':
leos@patatina$ trestore
wait, reading catalog...
============================
Tape "BaBau!" created on
Mon Dec 30 21:18:28 CET 2002
============================
contains:
legend: filename | Begin | End | Date
.bash_profile | 2 | 23 | Mon Dec 30 21:23:00 CET 2002
httpd-start | 23 | 44 | Mon Jan 6 16:02:46 CET 2003
gpm-start | 44 | 65 | Mon Jan 6 16:03:05 CET 2003
clearlogs | 65 | 86 | Mon Jan 6 16:03:39 CET 2003
mail | 86 | 107 | Mon Jan 6 16:04:02 CET 2003
Commands: [i] move UP - [k] move down
[ENTER] - restore in current dir
[ESC] - exit
-----------------------------------------------------
bello vero? ed io seleziono quello ke mi serve e bon
qui sotto c'e' il codice di quello ke gia' ho scritto...
buona vita a tutti, LeOS
--- TINIT -----------------------------------------------------
# --- Create the temp dir in user home and memorize current ---
mkdir ~/tutils
currentdir=$PWD
# --- Check tapename ---
if [ "$1" = "" ] ; then
tapename="no-name"
else
tapename=$1
fi
echo
echo "Initializing tape..."
# --- Create the header of the catalog ---
echo "============================" > ~/tutils/catalog
echo "Tape \"$tapename\" created on" >> ~/tutils/catalog
date >> ~/tutils/catalog
echo "============================" >> ~/tutils/catalog
echo "----------------------------" >> ~/tutils/catalog
# --- go to temp dir to create a clean tar file and goback to current ---
cd ~/tutils
tar cf init.tar catalog
cd $currentdir
echo Rewinding Tape...
mt-st -f /dev/tape rewind
echo Erasing Tape...
mt-st -f /dev/tape erase
mt-st -f /dev/tape eof
echo "Copying catalog to Tape..."
cp ~/tutils/init.tar /dev/tape
echo "Writing EOF..."
mt-st -f /dev/tape eof
echo "Rewinding Tape..."
mt-st -f /dev/tape rewind
rm -Rf ~/tutils
echo Done!
---------------------------------------------------------------
--- TSAVE -----------------------------------------------------
echo "TSaving $1..."
# --- Create the temp dir in user home and memorize current ---
mkdir ~/tutils
currentdir=$PWD
# --- Reach End Of Data on Tape ---
mt-st -f /dev/tape eod
# --- Rewind the Tape to reach the begin of saved Catalog ---
mt-st -f /dev/tape bsfm 3
# --- Restore the Catalog for update ---
cp /dev/tape ~/tutils
tar xf ~/tutils/tape -C ~/tutils
# --- Reach End Of Data on Tape ---
mt-st -f /dev/tape eod
# --- Rewind the Tape to reach the begin of saved Catalog ---
mt-st -f /dev/tape bsfm 3
# --- compress file or directory for backup ---
tar zcf ~/tutils/tempfile.tar.gz $1
# --- go to temp dir to create a clean tar file ---
cd ~/tutils
tar cf tempfile.tar tempfile.tar.gz
echo $1 >> ~/tutils/catalog
echo "Begins:" >> ~/tutils/catalog
mt-st -f /dev/tape tell >> ~/tutils/catalog
cp tempfile.tar /dev/tape
echo "Ends:" >> ~/tutils/catalog
mt-st -f /dev/tape tell >> ~/tutils/catalog
date >> ~/tutils/catalog
echo "----------------------------" >> ~/tutils/catalog
tar cf init.tar catalog
cd $currentdir
# --- Update catalog on Tape ---
cp ~/tutils/init.tar /dev/tape
# --- Close the Tape ---
mt-st -f /dev/tape eof
rm -Rf ~/tutils
echo Done!
---------------------------------------------------------------
--- TDIR ------------------------------------------------------
# --- Create the temp dir in user home ---
mkdir ~/tutils
# --- Reach End Of Data on Tape ---
mt-st -f /dev/tape eod
# --- Rewind the Tape to reach the begin of saved Catalog ---
mt-st -f /dev/tape bsfm 3
# --- Restore the Catalog and view it ---
cp /dev/tape ~/tutils
tar xf ~/tutils/tape -C ~/tutils
less ~/tutils/catalog
# --- Clean temp dir ---
rm -Rf ~/tutils
---------------------------------------------------------------