Script di shell

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
pedrus
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven 24 ago 2007, 17:55
Località: Taranto-Pavia

Script di shell

Messaggio da pedrus »

Ciao a tutti, ho dato un occhiata nel forum ma non mi pare ci sia nulla al riguardo.
Avrei necessità di realizzare un piccolo script di shell da poter eguire una volta al giorno.
In pratica con il comando tar verrebbe creato un archivo di backup che verrebbe memorizzato su un hd esterno via USB, il file di backup avrebbe un nome tipo backup-giorno-mese.anno.tar.
Così facendo però sull'HD esterno andrebbero ad accumularsi parecchi file di backup ognuno con una data differente. Così vorrei che nello script, ultimata la fase di backup, ci fosse un comando che rimuova, ad esempio, il backup di due giorni prima in modo tale da avere solamente i due backup più recenti. Come posso fare?

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Messaggio da aschenaz »

Perché vuoi tenere gli ultimi due e non solo l'ultimo?

te lo chiedo perché, nella seconda ipotesi basterebbe prima cancellare tutti i file (rm /percorso/*.tar) e poi salvare l'ultimo (tar cvf nomefile`date +%F`.tar percorso/directory).

Se proprio vuoi mantenere anche il penultimo, ci sarebbe il problema di quando questo è del mese prima. Con php risolverei facilmente, con bash, così su due piedi, mi sembra complicato... :roll:

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Script di shell

Messaggio da Mario Vanoni »

pedrus ha scritto:Ciao a tutti, ho dato un occhiata nel forum ma non mi pare ci sia nulla al riguardo.
Avrei necessità di realizzare un piccolo script di shell da poter eguire una volta al giorno.
In pratica con il comando tar verrebbe creato un archivo di backup che verrebbe memorizzato su un hd esterno via USB, il file di backup avrebbe un nome tipo backup-giorno-mese.anno.tar.
Così facendo però sull'HD esterno andrebbero ad accumularsi parecchi file di backup ognuno con una data differente. Così vorrei che nello script, ultimata la fase di backup, ci fosse un comando che rimuova, ad esempio, il backup di due giorni prima in modo tale da avere solamente i due backup più recenti. Come posso fare?
#!/bin/sh

DIRECTORY='il_nome_dove_montato_il_disco' # e.g. /mnt/backup/disc1
HISTORY=2 # due giorni

cd ${DIRECTORY}
find -name 'backup-??-??-????.tar' -type f -mtime +${HISTORY} -exec echo {} \; # per testare lo script !!!
#find -name 'backup-??-??-????.tar' -type f -mtime +${HISTORY} -exec rm -f {} \; # per cancellare veramente, togliere il cancelletto (#) inizio riga.

exit 0

Osservazione:
in genere si nomina files simili YYYY-MM-DD.estensione,
con sort/ls sono sempre ordinati cronologicamente.

Mario Vanoni

pedrus
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven 24 ago 2007, 17:55
Località: Taranto-Pavia

Messaggio da pedrus »

Perché vuoi tenere gli ultimi due e non solo l'ultimo?
Il backup avverrebbe automaticamente ogni giorno, e a backup avvenuto nessuno va a controllare se è andato a buon fine. Se qualcosa va storto in fase di backup si finirebbe per non averne neanche una copia.


Grazie per Mario Vanoni, farò dei test.

EDIT:

Approfitto ancora di questo topic. Il mio scopo è quello di creare delle copie di backup di alcune directory condivise con Samba in una rete con una decina di PC. Ho visto che è possibile fare backup completi e backup incrementali servendosi di tar. Ma su alcune cose ho dubbi. I backup incrementali comportano la necessità di avere un bakcup completo che poi va periodicamente ripetuto.
Io vorrei avere un unico file .tar di backup, contenente il tutto, però ogni giorno fare in modo che questo file venga aggiornato, che in pratica contengo i nuovi file aggiunti, che vengano rimossi i file eliminati e che vengano aggiornati i file che subiscono variazioni, senza però ogni volta fare un backup completo che, magari, per svariati Gbyte da prendere, archiviare e spostare sul HD esterno, assorbe tempo e risorse. In pratica avere un backup completo che ogni giorno viene aggiornato con la situazione "istantanea" del momento senza far ogni volta archiviare tutto.
I backup incrementali così come gli ho visti descritti in rete mi sembrano più comlplessi da gestire.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Messaggio da aschenaz »

Ciò che a me sembra complicato, per Mario Vanoni sono due righe! :)

Tanto di cappello!

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio da Mario Vanoni »

@pedrus

Esempio come ho risolto un problema simile in ditta,
e funziona 24/7/36[56] dal 2002 non-stop tuttora.

ssync-2.3 del 2002, autore scomparso di scena, GPLv2,
si trova ancora il tar.gz in campo *BSD che lo mantengono/usano.

ssync ogni 20 minuti con crontab, confronta ~4GB di files/directories con
- un secondo HD sulla macchina principale (solo HH:10)
- una seconda macchina adibita unicamente a backup (solo HH:30)
- una terza macchina con tanti GB di disco inutilizzati (solo HH:50),
la terza macchina e` situata in un'altro piano dell'edificio (incendio)

copia files/directories nuovi
rimuove files/directories non piu` presenti, quindi cancellati
aggiorna files/directories modificati

tempo medio sui 5...7 minuti, ho un log file che registra tutto.

Unico difetto, a detta dell'autore, e notato da me,
lo hash utilizzato e` molto casuale, quindi disordinato in senso di sort(1).

Il secondo HD della macchina principale viene ogni settimana
copiato su un DVD ed archiviato in una cassaforte lontana ~30km.

Mario Vanoni

pedrus
Linux 1.x
Linux 1.x
Messaggi: 112
Iscritto il: ven 24 ago 2007, 17:55
Località: Taranto-Pavia

Messaggio da pedrus »

Grazie per l'info. Sembrerebbe un po' incasinato ma non è male, anche se a me serve solo il backup su un hard disk esterno. Ho cercato con google e ho trovato questo link: http://www.usinglinux.org/sysutils/ssync.html
Ma non si riesce a fare il download. Continuo a cercare.

Nel frattempo qualcuno conosce altre soluzioni?

Avatar utente
davide77
Linux 2.x
Linux 2.x
Messaggi: 359
Iscritto il: mar 26 apr 2005, 0:00
Desktop: xfce
Distribuzione: XUbuntu
Località: Bergamo

Messaggio da davide77 »

Se puoi privarti del piacere del tar e avere delle copie cronologiche delle tue directory puoi guardare pdumpfs e pdumpfs-clean:

http://0xcc.net/pdumpfs/index.html.en
http://tach.arege.net/software/pdumpfs-clean/

(OK, il secondo è in cinese/giapponese/taiwanese/sarca$$o)

Con questi script puoi avere delle copie cronologiche occupando poco più spazio di quello che servirebbe per un solo backup, inoltre pdumpfs-clean ti permette di eliminare tutti i backup che non ti servono recuperando spazio per altri backup più nuovi.

Se poi ti interessa come funziona il tutto posso dirti che va a hard-link, in questo modo quando prendi i file da un backup qualsiasi sono quelli che effettivamente c'erano in quella data.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio da Mario Vanoni »

pedrus ha scritto:Grazie per l'info. Sembrerebbe un po' incasinato ma non è male, anche se a me serve solo il backup su un hard disk esterno. Ho cercato con google e ho trovato questo link: http://www.usinglinux.org/sysutils/ssync.html
Ma non si riesce a fare il download. Continuo a cercare.

Nel frattempo qualcuno conosce altre soluzioni?
ftp://ftp.netsw.org/system/tools/fileut ... all/ssync/
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/

Mario Vanoni

Rispondi