SUSE Linux Enterprise Server 10 non include il pacchetto Bacula (e che diamine! Siamo enterprise, mica vorremo fare un backup, vero?).
Si installano dei pacchetti creati dalla comunità OpenSuse reperibili qui. Vogliamo la versione per PostgreSQL, possibilmente FHS compliant, quindi si evita la versione singledir che installa tutto sotto /opt/. Archivio installato: bacula-postgresql-5.0.1-19.1.x86_64.rpm.
Alcuni pacchetti vengono installati con yast2, i pacchetti bacula invece con rpm -i.
Il pacchetto bacula-mtx non server perché esiste mtx, il pacchetto bacula-updatedb serve solo per fare l'upgrade del database da una vecchia versione. bacula-client invece è in conflitto con il bacula-postgresql.
Durante l'installazione di bacula-postgresql la creazione del database fallisce perché ci prova come utente root, il poveretto! Ecco i passi per rimediare a mano.
Permettere la connessione con password, editare /var/lib/pgsql/data/pg_hba.conf sostituire ident sameuser con md5 per le connessioni di tipo host (TCP/IP). Ricaricare PostgreSQL dopo:
host all all 127.0.0.1/32 md5
Creazione del database con le giuste caratteristiche (encoding, ecc.):
su - postgres . /usr/lib64/bacula/create_postgresql_database psql postgres=# CREATE USER bacula PASSWORD 'MySecret'; postgres=# SELECT * FROM pg_user ; postgres=# UPDATE pg_database SET datdba = 16384 WHERE datname = 'bacula'; postgres=# \q exit
Popolazione del database con le tabelle richieste:
cp /usr/lib64/bacula/make_postgresql_tables .
vi make_postgresql_tables
#
# Modificare la riga psql per usare connessione host con login:
# psql -U bacula -W -h 127.0.0.1 -f - -d ${db_name} $* <<END-OF-DATA
#
./make_postgresql_tables
Il terzo script /usr/lib64/bacula/grant_postgresql_privileges non serve in quanto il nostro utente bacula possiede l'intero database.
Le credenziali di accesso vanno messe in /etc/bacula/bacula-dir.conf, nella sezione Catalog:
Catalog {
Name = MyCatalog
# Uncomment the following line if you want the dbi driver
dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport = 5432
dbname = "bacula"; dbuser = "bacula"; dbpassword = "MySecret"
}
A differenza da quanto riportato nella Bacula Main Reference, il Job BackupCatalog non va modificato.
La componente principale di Bacula è il Director (supervisore dei processi di backup), impostare il nome in /etc/bacula/bacula-dir.conf, sezione Director.
Per avviare il Bacula Director, il Bacula Storage Daemon (scrive sul nastro secondo gli ordini del Director) e il Bacula File Daemon (gira sulla macchina client, agli ordini del Director legge i file da salvare e li passa allo Storage):
/etc/init.d/bacula-dir start /etc/init.d/bacula-sd start /etc/init.d/bacula-fd start
Con ps aux si possono vedere i tre processi Bacula in esecuzione. Le porte di rete utilizzate sono:
| Director | TCP 9101 |
|---|---|
| File daemon | TCP 9102 |
| Storage daemon | TCP 9103 |
Il Director è l'host che dirige le operazioni di backup, viene amministrato tramite la Console (porta TCP 9101). Conviene che sul Director stesso sia configurato anche un client Console, si consiglia bconsole che funziona da riga di comando e può essere usata via ssh. Su altre postazioni si potranno installare console diverse, anche grafiche.
Impostare la password per l'accesso console: in /etc/bacula/bacula-dir.conf, sezione Director sulla macchina dove gira il Director e in /etc/bacula/bconsole.conf, sezione Director sulla macchina dove si esegue bconsole.
Esistono diverse console grafiche: per per QT, GTK oppure WxWindows. Debian fornisce i pacchetti bacula-console-gnome, bacula-console-qt e bacula-console-wx. Pare che la migliore sia quella QT, chiamata anche bat (Bacula Administration Tool).
Per accedere ad un Director remoto con Debian si deve configurare /etc/bacula/bat.conf (mettendo indirizzo e password del Director) ed essere nel gruppo bacula.
Nella configurazione del Director si dichiara uno o più Storage, gli host che ricevono i dati di backup. Si deve indicare come Address l'indirizzo IP che verrà usato dai client per raggiungerlo.
Un client è semplicemente un host su cui gira un'istanza del Bacula File Daemon che fornisce al Director i file da salvare. Viene contattato dal Director sulla porta TCP 9102.
Per una macchina Debian è sufficiente installare il pacchetto bacula-fd, nel file /etc/bacula/bacula-fd.conf si impostano i dati del Director autorizzato a controllare il file daemon (nome del Director e password) e il nome del client stesso (FileDaemon, Name). Per il nome si consiglia di usare il nome host seguito da -fd.
Se il daemon deve ascoltare su tutte le interfacce di rete, commentare la direttiva FileDaemon, FDAddress.
Sul Director si aggiunge una sezione Client in /etc/bacula/bacula-dir.conf impostando la password del client.
Lo Storage Daemon è l'host che ha accesso al device di backup (es. nastro), si configura nel file /etc/bacula/bacula-sd.conf.
Si deve specificare quale Director è autorizzato ad accedere e la password, la stessa password va messa nella configurazione del Director.
Inoltre si configura il device che riceve i dati (es. due tape drive SCSI con autochanger). Per scoprire i drive presenti:
lsscsi -g [0:0:0:0] cd/dvd HL-DT-ST RW/DVD GCC-T20N 1.01 /dev/sr0 /dev/sg0 [2:2:0:0] disk LSI MegaRAID SAS RMB 1.12 /dev/sda /dev/sg1 [3:0:0:0] storage HP HSV300 0950 - /dev/sg2 [3:0:1:0] storage HP HSV300 0950 - /dev/sg3 [4:0:0:0] storage HP HSV300 0950 - /dev/sg4 [4:0:1:0] storage HP HSV300 0950 - /dev/sg5 [5:0:4:0] tape HP Ultrium 4-SCSI W24W /dev/st0 /dev/sg6 [5:0:4:1] mediumx HP MSL G3 Series 6.70 - /dev/sg7 [6:0:5:0] tape HP Ultrium 4-SCSI W24W /dev/st1 /dev/sg8
In questo caso abbiamo due tape drive (/dev/st0 e /dev/st1) e un caricatore (medium exchanger, /dev/sg7).
Attenzione alla numerazione!! Nel caso in cui vengano aggiunte periferiche SCSI è molto probabile che il device SCSI generic cambi numero! In tal caso bisogna cambiare la configurazione del Bacula Storage Daemon.
Per vedere la lista dei nastri (sia quelli negli slot che quelli caricati nei drive) e per verificare che lo script mtx-changer sia in grado di spostare un nastro da uno slot (il n.7 nell'esempio) ad un drive (lo 0 nell'esempio) e viceversa:
/usr/lib64/bacula/mtx-changer /dev/sg7 list /usr/lib64/bacula/mtx-changer /dev/sg7 load 7 /dev/nst0 0 /usr/lib64/bacula/mtx-changer /dev/sg7 unload 7 /dev/nst0 0
Il nome del tape device (/dev/nst0 oppure /dev/nst1) viene usato dallo script mtx-changer per eventuali operazioni di rewind, per vedere lo status del drive, ecc. con comandi del tipo (attenzione che il processo bacula-sd potrebbe tener bloccato il device /dev/nstX):
mt -f /dev/nst1 status drive type = Generic SCSI-2 tape drive status = 1174405120 sense key error = 0 residue count = 0 file number = 0 block number = 0 Tape block size 0 bytes. Density code 0x46 (unknown). Soft error count since last status=0 General status bits on (41010000): BOT ONLINE IM_REP_EN
Un volume corrisponde ad un nastro, i nastri vengono utilizzati in pool in modo da poter estendere il backup oltre la dimensione del singolo nastro. Un pool riceve uno o più job (un set di file da un client), un volume può ricevere dati fintanto che si trova in modalità append, quindi sullo stesso nastro possono finire job differenti.
È possibile scegliere cosa va a finire su ciascun volume (nastro) in vari modi. Si possono utilizzare pool diversi per diversi tipi di backup; ad esempio il full in un pool e gli l'incremental in un altro. Oppure con le direttive Maximum Volume Jobs e Volume Use Duration si può utilizzare un solo pool e determinare il cambio di nastro in base ai job eseguiti o al tempo trascorso.
Esempio: un ciclo di backup settimanale con un full seguito da sei incrementali può essere distribuito in sette volumi di un solo pool, è sufficiente impostare il Volume Use Duration inferiore alle 24 ore, in questo modo ogni giorno viene selezionato un nastro nuovo. In questo caso è importante impostare Recycle, AutoPrune e Volume Retention appropriati in modo che i nastri vengano riutilizzati opportunamente.
bacula-dir.conf, riavviare bacula-dir per salvare la definizione nel Catalog database. Per eliminare un pool bisogna eliminare la definizione nel file di configurazione e poi si utilizza il comando delete pool=… per eliminarlo anche dal database.label storage="LTO-4" volume="p00v01" pool="pool00" label storage="File" volume="file001" pool="File"
Viene chiesto in quale drive fare l'operazione e da quale slot prendere la cassetta.
Per cambiare etichetta ad un volume si usa il comando relabel, ecco come togliere un volume da un pool ed assegnarlo ad un altro, cambiando anche etichetta:
purge volume="old_label" relabel storage="LTO-4" oldvolume="old_label" volume="new_label" pool="new_pool"
delete volume=…. Sul nastro rimane scritta l'etichetta, per eliminarla è necessario caricare il nastro nel drive:mount storage="LTO-4" slot=1 drive=0
per liberare la risorsa /dev/nst0 è probabile che si debba fermare il servizio bacula-sd e quindi troncare il contenuto del nastro con i comandi Unix:
mt -f /dev/nst0 rewind mt -f /dev/nst0 weof
update volume=p00v10 volstatus=Full delete volume=p00v10
Se un volume su file è cresciuto troppo è possibile cambiare la sua dimensione massima (es. usando Bat, pulsante Edit, Max Volume Bytes). Però il file non viene troncato immediatamente, neanche se ne viene fatto il purge.
È opportuno associare l'azione truncate al purge e poi invocare il comando purge volume action, da bconsole:
update volume=file001 ActionOnPurge=Truncate purge volume action storage=File pool=File
Ovviamente conviene sistemare la definizione del volume nel file /etc/bacula/bacula-dir.conf:
# Pool of file based volumes.
Pool {
Name = File
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Action On Purge = Truncate # Truncate the file when it is purged with "purge volume action"
Volume Retention = 1 month # One year
Maximum Volume Bytes = 2G # Limit Volume size to something reasonable
Maximum Volumes = 10 # Limit number of Volumes in Pool
}
Nella terminologia di Bacula ciascun termine applicato ad un volume (nastro) significa:
| Purge | Rimuove dal database (catalog) le informazioni sui Job contenuti nel Volume. Il volume viene marcato Purged e sarà riciclato non appena necessario. |
|---|---|
| Delete | Rimuove dal database le informazioni sul Volume e su tutti i Job che contiene. Per riutilizzare il nastro sarà necessario assegnargli una nuova label (eventualmente forzando la scrittura di un EOF mark). |
| Prune | Rimuove dal catalog le informazioni scadute che riguardano i Jobs e i Files. Ogni cliente definisce la politica di retention di questi oggetti. In generale la direttiva AutoPrune di ciascun cliente provvede automaticamente ad eseguire questa operazione. |
| release | Toglie il nastro dal drive. |
|---|---|
| umount | Equivale al release. |
| mount | Carica un nastro nel drive. |
| llist pool | Mostra le impostazioni di un pool. |
| llist media pool=pool00 | Mostra le impostazioni dei nastri appartenenti ad un pool. |
| update pool=pool00 | Aggiorna nel database le impostazioni di un pool, leggendo dal file di configurazione. |
| update volume=p00v01 | Modifica interattivamente le impostazioni di un nastro. |
Scaricare ed eseguire win32bacula-5.0.2.exe, seguendo la procedura custom è sufficiente installare la componente Client.
Da Start, Strumenti di amministrazione, Servizi verificare che il servizio sia avviato.
Se il servizio non parte si può controllare eventuali messaggi di errore lanciando bacula-fd.exe dal Command Prompt. In questo caso il file di configurazione deve essere messo in C:\Documents and Settings\All Asers\Dati applicazioni\Bacula\bacula-fd.conf.
Nel caso nostro è stato necessario commentare la sezione relativa al restricted director per il tray monitor.
NOTA1: Se si esegue Bat come utente Administrator la lista Jobs Run rimane vuota.
NOTA2: Quando si fa il backup di un filesystem Windows potrebbe servire attivare il Volume Shadow Copy Service (VSS). Serve a fare backup consistenti di un filesystem mentre questo è in uso. Vedere The Windows Version of Bacula. Lo si attiva con la direttiva
Enable VSS = yes nella risorsa FileSet del bacula-dir.conf.
Con backup che durano a lungo (ore) si potrebbe incappare in errori del tipo Connection reset by peer perché magari qualcuno (router) ignora il keep-alive della sessione TCP. In questo caso può aiutare impostare il seguente parametro sia nella configurazione del Director (file /etc/bacula/bacula-dir.conf) che nella configurazione del FileDaemon (es. /etc/bacula/bacula-fd.conf):
Heartbeat Interval = 60
Questo comporta che ogni 60 secondi il Directory invia un heart-beat al FileDaemon e questo a sua volta allo Storage.
Bat mostra la percentuale di uso di ogni volume nella pagina Media. Purtroppo il calcolo non è fatto sull'effettiva capacità massima del volume (massima capacità del nastro), ma sulla dimensione media di tutti i volumi dello stesso tipo, che siano in stato di Full oppure Used. Se il nastro viene ruotato prima che sia pieno, la stima è grossolanamente errata.