User Tools

Site Tools


doc:appunti:linux:sa:bacula

Bacula

Installazione su Suse GNU/Linux

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.

  • termcap
  • mtx
  • bacula-postgresql
  • bacula-docs

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.

Creazione del database

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.

Esecuzione

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

Configurazione Director e Console

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.

Logging e notifiche mail

Qui la documentazione sulla risorsa Messages.

Attenzione alla configurazione predefinita e la rotazione dei log in Debian! Nella risorsa Messages del director controllare la direttiva append, deve essere adeguata al logrotate che viene installato in /etc/logrotate.d/bacula-common.

Nell'impostazione predefinita Debian vengono mandati messaggi mail all'utente root per ogni backup eseguito (direttiva mail, messaggi di tipo all), analogamente anche per i messaggi dallo storage daemon che richiedono l'intervento dell'operatore (direttiva operator, messaggi di tipo mount).

In una situazione un po' più strutturata i messaggi vengono inviati ad un indirizzo di posta elettronica standard, qualificato con un dominio:

  mail = alert@rigacci.org = all, !skipped
  operator = alert@rigacci.org = mount

Se si desidera che vengano inviate mail solo in condizioni di errore dovrebbe essere sufficiente sostituire la direttiva mail con la direttiva mail on error:

  mail on error = alert@rigacci.org = all, !skipped 

È opportuno anche verificare il mittente apposto ai messaggi generati, l'impostazione predefinita (sempre root) potrebbe causare problemi al recapito delle mail, se è attiva la verifica del mittente. In tal caso si deve modificare l'opzione -f in mailcommand e operatorcommand:

mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<no-reply@rigacci.org\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<no-reply@rigacci.org\>\" -s \"Bacula: Intervention needed for %j\" %r"

Configurazione di un client

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.

Configurazione Storage Daemon

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

Configurazione di un Pool di Volumi

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.

  • Per creare un pool si aggiunge una sezione in 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.
  • Per aggiungere un volume ad un pool si etichettano i volumi (nastri) e contestualmente si aggiungono al pool. L'operazione è identica sia per creare un volume su nastro che un volume su file
    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"
  • Per eliminare un volume dal database si usa il comando 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
  • Per rilasciare un nastro (volume) senza toccarne il contenuto bisogna che il volume sia in uno stato Append, Full, Used, o Error. Quindi prima si imposta lo stato e poi lo si elimina:
    update volume=p00v10 volstatus=Full
    delete volume=p00v10
  • Per modificare un parametro di un volume esistente, ad esempio il Volume Retention Period (vedere il Manuale Bacula Conole per il nome breve delle proprietà che sono modificabili):
    update volume=p01v0077 VolRetention="3 weeks"

Volumi su file

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 month
  Maximum Volume Bytes = 2G           # Limit Volume size to something reasonable
  Maximum Volumes = 10                # Limit number of Volumes in Pool
}

Scratch pool

Il pool Scratch è particolare per Bacula: quando un pool ha esaurito i volumi disponibili, se è necessario un nuovo volume viene spostato dallo Scratch al pool in questione e viene usato.

Purge, Delete e Prune

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.

Comandi Console

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.

Installazione Client Windows

Scaricare ed eseguire win32bacula-5.0.2.exe, seguendo la procedura custom è sufficiente installare la componente Client. Attenzione: se si usa una versione a 64 bit di Windows occorre la versione 64 bit del client, altrimenti il Volume Shadow Copy Service (VSS) genera l'errore Unexpected error calling routine CoCreateInstance e fa fallire il backup.

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 Users\Dati applicazioni\Bacula\bacula-fd.conf.

Nel caso nostro è stato necessario commentare la sezione relativa al restricted director per il tray monitor.

Con la versione 5.2.10 su Windows 2008 Server, il file di configurazione è in C:\Program files\Bacula\bacula-fd.conf, per eseguire il client dal prompt la configurazione va messa in C:\ProgramData\Bacula\.

NOTA1: Se si esegue Bat come utente Administrator la lista Jobs Run rimane vuota.

NOTA2: Quando si fa il backup di un filesystem Windows è utile 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.

Ecco un esempio di una risorsa FileSet per client Windows:

FileSet {
  Name = "inetpub_filezilla"
  Enable VSS = yes
  Include {
    Options {
       signature = MD5
    }
    File = "C:/inetpub"
    File = "C:/Program Files (x86)/FileZilla Server"
  }
}

ERR=Connection reset by peer

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.

Vol Usage errato in Bat

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.

Backup su nastro con cambio di cassetta

WARNING: Un nastro LTO-2 da 200 Gb (non compressi) viene scritto in circa 4 ore, utilizzando un fileset senza compressione (interfaccia SCSI su CPU Celeron 2.66 GHz).

Se non si ha una tape library e il backup eccede la capacità del singolo nastro, è necessario provvedere al cambio di nastro manuale.

Dal programma bat, Jobs Run, si vede il job in stato Running. Cliccando su di esso si legge un messaggio del tipo:

everest-sd Please mount Volume "p00v02" or label a new one for:
    Job:          Tape_EverestBianca.2012-11-09_15.16.57_07
    Storage:      "Drive-1" (/dev/nst0)
    Pool:         pool00
    Media type:   LTO-2

In questo caso si clicca su Storage, si evidenzia il device LT0-2, click destro, UnMount Storage. A questo punto è possibile estrarre il nastro ed inserire il successivo.

Per far proseguire il backup si clicca su Storage, si evidenzia il device LT0-2, click destro, Mount Media Storage. Il job riprende automaticamente.

Rilasciare forzatamente un volume su file

Prima si imposta il volume status su Purged e poi su Recycle.

  1. Dalla console di bat, Pools, click destro sul volume, Purge Volume.
  2. Dalla console di bat, Pools, click destro sul volume, Edit Volume, Volume statusRecycle.

Debug da bconsole

Job bloccato in running mode

Esempio: il job 742 è in stato di running, ma non procede; come indagare il motivo:

status director
...
======================================================================
   737 Full    BackupCatalog.2012-11-11_23.10.00_28 is waiting for higher priority jobs to finish
   742 Increme  Dns.2012-11-12_23.05.02_36 is waiting on Storage everest_files
...

Si vede che il job è in attesa dello Storage everest_files. Vediamo allora lo storage:

status storage=everest_files
...
...
Running Jobs:
Writing: Full Backup job EverestBianca JobId=709 Volume=""
    pool="pool01" device="FileStorage" (/home/bacula/storage)
    spooling=0 despooling=0 despool_wait=0
    Files=1,693,226 Bytes=90,448,055,578 Bytes/sec=193,092
    FDReadSeqNo=16,436,652 in_msg=11515263 out_msg=5 fd=6
...
...
Jobs waiting to reserve a drive:
   3608 JobId=742 wants Pool="pool01" but have Pool="" nreserve=0 on drive "FileStorage" (/home/bacula/storage).
...
...
Device status:
Device "FileStorage" (/home/bacula/storage) is not open.
    Device is BLOCKED waiting to create a volume for:
       Pool:        pool01
       Media type:  File
...

Lo Storage è rimasto fermo sul JobId=709, è inutile eliminarlo dal Director, lo storage resta bloccato. Il problema si è creato perché il device ha tentato di creare un volume (file su disco), ma ha fallito, probabilmente a causa del disco pieno. Il Device è quindi BLOCKED.

Sembra che l'unico modo per recuperare da questa situazione sia riavviare il servizio baculda-sd.

Errori durante l'esecuzione di un job

Nel log di un job possiamo trovare dei messaggi che indicano un problema nell'usare un volume (in questo caso file su disco):

 Max configured use duration exceeded. Marking Volume "p01v0124" as Used.

In questo caso l'errore era stato mettere i volumi in status di Append, ma poiché erano stati usati diversi giorni prima (oltre il limite di Use Duration) sono stati marcati dom Used. Se volevamo riutilizzarli bisognava marcarli come Recycle.

Error: Bacula cannot write on disk Volume "p01v0129" because: The sizes do not match!
     Volume=12701343744 Catalog=12701334487
 Marking Volume "p01v0129" in Error in Catalog.

Per recuperare un volume dalla situazione di Error la via più rapida è farne un Purge, poi un Delete e quindi rimuovere il file dal filesystem. Bacula provvederà a creare un nuovo volume al bisogno se la risorsa Device ha l'opzione LabelMedia = yes e la risorsa Pool ha LabelFormat = "p01v".

Errory MySQL

Nel caso in cui lo spazio disco si easurisca durante un backup la cosa più probabile è che si corrompa una tabella MySQL, nei file di log si trova:

[ERROR] /usr/sbin/mysqld: Table './bacula/File' is marked as crashed and last (automatic?) repair failed

Dal prompt SQL si può verificare che effettivamente la tabella è danneggiata:

CHECK TABLE File;

+-------------+-------+----------+-------------------------------------------------------+
| Table       | Op    | Msg_type | Msg_text                                              |
+-------------+-------+----------+-------------------------------------------------------+
| bacula.File | check | warning  | Table is marked as crashed and last repair failed     |
| bacula.File | check | warning  | 1 client is using or hasn't closed the table properly |
| bacula.File | check | warning  | Size of indexfile is: 1046085632      Should be: 1024 |
| bacula.File | check | error    | Record-count is not ok; is 11386556   Should be: 0    |
| bacula.File | check | warning  | Found 945073084 deleted space.   Should be 0          |
| bacula.File | check | warning  | Found 7973460 deleted blocks       Should be: 0       |
| bacula.File | check | warning  | Found 20817354 key parts. Should be: 0                |
| bacula.File | check | error    | Corrupt                                               |
+-------------+-------+----------+-------------------------------------------------------+

Dal prompt Unix è possibile tentare la riparazione:

mysqlrepair bacula File

Usare un disco rimuovibile

Seguendo il Bacula And Removable Disk HOWTO è possibile configurare un disco esterno (es. USB) come un magazino di una tape library, creando al suo interno una serie di file che simulano i nastri (volumi) da caricare automaticamente nel lettore di un autochanger.

Tutto si basa sullo script /usr/local/sbin/vchanger che emula le operazioni di /etc/bacula/scripts/mtx-changer e di un file di configurazione /etc/bacula/vchanger-usbchanger1.conf che fa le veci del device di controllo SCSI dell'autochanger.

In questa pagina sono riassunte le configurazioni necessarie: Configurazione virtual changer per Bacula.

Setup iniziale

Vedere l'HOWTO, qui un promemoria dei comandi eseguiti:

Installare il pacchetto autofs, si configura autofs in modo che monti automaticamente i dischi etichettati usbchanger1:

  • /etc/auto.master
+auto.master
/mnt/usbchanger1    /etc/auto.usbchanger1    --timeout=30
  • /etc/auto.usbchanger1
magazine  -fstype=auto,rw  :/dev/disk/by-label/usbchanger1

Aggiustare lo script (attenzione: richiede la bash!) e il file di configurazione:

  • /usr/local/sbin/vchanger
  • /etc/bacula/vchanger-usbchanger1.conf
chown root.tape /etc/bacula/vchanger-usbchanger1.conf
chmod 0640 /etc/bacula/vchanger-usbchanger1.conf

Formattare uno o più dischi USB dopo aver creato una singola partizione:

mkfs.ext4 -T largefile -L "usbchanger1" -m 0 /dev/sdd1

Tutti i dischi che appartengono a questo stesso autochanger virtuale avranno la stessa label.

Il punto di montaggio è /mnt/usbchanger1/magazine, il filesystem viene montato automaticamente appena si tenta di accederlo, ad esempio per impostare i permessi (va fatto per ogni disco):

chown -R bacula.disk /mnt/usbchanger1/magazine
chmod 0770 /mnt/usbchanger1/magazine

Operazione di etichettatura dei nastri (volumi) da bconsole. Nel primo disco i volumi avranno nome m01sXXX (magazino 1), nel secondo m02sXXX (magazino 2), ecc.

label barcodes
The defined Storage resources are:
...
     3: usbchanger1
Select Storage resource (1-3): 3
...
The following Volumes will be labeled:
Slot  Volume
==============
   1  m01s001
   2  m01s002
...
Do you want to label these Volumes? (yes|no): yes
Defined Pools:
...
     3: Scratch
Select the Pool (1-5): 3

Vengono automaticamente etichettati 20 volumi (nastri virtuali), in accordo al parametro magslots dichiarato in vchanger-usbchanger1.conf.

In pratica vengono creati 20 file nella directory /mnt/usbchanger1/magazine/, ogni file ha inizialmente dimensione di 193 byte e il nome è costituito da un prefisso che indica il magazzino (viene generato automaticamente per ogni disco inizializzato: m01, m02, …) e un suffisso che indica il numero dello slot (virtuale) in cui il nastro (virtuale) si trova; esempio: m01s001, m02s002, ecc.

Quando il disco USB non è in uso risulta non montato, ma appena si fa accesso al suo contenuto viene montato automaticamente:

mount | grep usbchanger
# Not mounted!
ls -l /mnt/usbchanger1/magazine
# Device is now mounted:
mount | grep usbchanger
/dev/sdd1 on /mnt/usbchanger1/magazine type ext4 (rw)

Manipolazione dei magazzini

FIXME Attenzione agli errori che si possono causare con il load/unload dei nastri (virtuali) dal magazzino (hard disk USB) nel drive (virtuale).

Prima di scollegare il disco USB accertarsi che il nastro virtuale sia tolto dal drive virtuale:

status storage=usbchanger1
...
Device "usb-changer-1-drive-0" (/var/lib/bacula/usbchanger1/drive0) is not open.
    Slot 10 is loaded in drive 0.

unmount storage=usbchanger1
3307 Issuing autochanger "unload slot 10, drive 0" command.
3901 Device "usb-changer-1-drive-0" (/var/lib/bacula/usbchanger1/drive0) is already unmounted.

Da bconsole conviene verificare quale nastro è caricato nel drive ed eventualmente toglierlo per rimetterlo nel suo slot prima di sostituire il magazzino (disco USB).

Alcuni file mantengono le informazioni di stato e possono essere consultati direttamente:

  • /mnt/usbchanger1/magazine/index lndice del magazzino (1, 2, 3, …)
  • /var/lib/bacula/usbchanger1/drive0 link simbolico al volume montato (es. /mnt/usbchanger1/magazine/m03s002)
  • /var/lib/bacula/usbchanger1/loaded0 numero dello slot da cui è stato montato il nastro (1, 2, …)
  • /var/lib/bacula/usbchanger1/nextmag numero dell'ultimo magazzino inizializzato (1, 2, 3, …)

Utilizzare manualmente i volumi dell'autochanger

Backup una tantum su supporto rimuovibile (hard disk USB):

Sul disco esterno sono stati creati dei volumi che simulano gli slot di un magazino con autochanger, i volumi sono stati assegnati al pool Scratch ma verranno spostati nel pool02 quando vengono usati.

  1. Collegare il disco USB dove sono stati creati preventivamente i volumi m01s00X (magazine 01, slot 00X) e assegnati al pool Scratch.
  2. Avviare la console Bat
  3. Cliccare su Jobs
  4. Fare doppio click sul job desiderato per avviarlo manualmente.
  5. Indicare il pool02 come pool destinazione e usbchanger1 come storage.
  6. Ripetere per tutti gli altri job.
  7. Al termine verificare che il device /dev/sdd1 non sia montato in /mnt/usbchanger1/magazine, prima di spengere e rimuovere l'hard disk.

Gestione dell'autochanger virtuale

Con bconsole

Vedere lo status dello storage (running job, job terminati, ecc.):

status storage=usbchanger1

Vedere l'elenco dei nastri, la colonna Slot indica in quale posizione si trova il nastro all'interno della tape library, la colonna InChanger indica che il volume è disponibile nel magazino caricato nell'auto changer.

list media pools

Aggiustare la posizione (slot) di un nastro

update volume=m01s009 slot=9

Rilegge il contenuto degli slot tramite i codici a barre:

update slots

Con vchanger, equivalente di mtx-changer

Elenco degli slot e relativi nastri:

/usr/local/sbin/vchanger /etc/bacula/vchanger-usbchanger1.conf list

Numero di slot disponibili:

/usr/local/sbin/vchanger /etc/bacula/vchanger-usbchanger1.conf slots

Per vedere che nastro è caricato nel drive0 si può usare il comando vchanger (sintassi compatibile con il comando mtx-changer):

# Syntax compatible with mtx-changer command:
/usr/local/sbin/vchanger /etc/bacula/vchanger-usbchanger1.conf loaded 0 /var/lib/bacula/usbchanger1/drive0 0

Oppure si ispeziona i file di controllo mantenuti dallo script vchanger

# Inspecting virtual changer internal files:
ls -l /var/lib/bacula/usbchanger1/
lrwxrwxrwx 1 bacula tape   33  8 gen 11.04 drive0 -> /mnt/usbchanger1/magazine/m01s005
-rw-rw---- 1 bacula bacula  2  8 gen 11.04 loaded0
-rw-rw---- 1 bacula bacula  2 27 nov 12.31 nextmag
cat /var/lib/bacula/usbchanger1/loaded0
5

I parametri passati sono (con il comando loaded il parametro slot viene ignorato):

ctl /etc/bacula/vchanger-usbchanger1.conf Device di controllo (/dev/sgX nel caso di una tape library SCSI).
cmd loaded Comando da eseguire.
slot 0 Lo slot.
device /var/lib/bacula/usbchanger1/drive0 Device (/dev/stX nel caso di un nastro SCSI).
drive 0 Il drive, nel caso in cui la library abbia più di un lettore.

Restore

Restore di un singolo file con Bat

Su Jobs Run evidenziare il job da cui si vuole recuperare il file, click destro, Restore From Time oppure Restore From Job e indicare la data desiderata. Viene costruito l'albero dei file.

Potrebbe scattare l'errore:

Invalid command ".messages". Enter "done" to exit.

In questo caso provare:

  • In Settings, Preferences disabilitare Check Messages, oppure aumentare il Message check interval (vedere questo suggerimento, ma pare non sufficiente).
  • Prima di eseguire il restore: lanciare il comando “messages” dentro Console, Command (vedere questo messaggio.)

Bat presenta l'albero di tutti i file trovati, selezionare quelli desiderati.

Il restore verrà effettuato sull'host che conteneva il file originale (restoreclient, ossia il To client di Bat), nella posizione specificata da Where del job Type = Restore.

Restore di un singolo file con Bconsole

*restore

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 6

Enter date as YYYY-MM-DD HH:MM:SS :2013-04-22 01:01:01

Defined Clients:
     1: ...
     ...
     7: dns-fd
     ...
Select the Client (1-14): 7
Automatically selected FileSet: unix_rootfs
+-------+-------+----------+-------------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes    | StartTime           | VolumeName |
+-------+-------+----------+-------------+---------------------+------------+
| 2,025 | F     |   46,055 | 640,939,274 | 2013-04-07 22:15:16 | p01v0019   |
| 2,151 | D     |      361 | 275,563,729 | 2013-04-21 21:18:27 | p01v0097   |
+-------+-------+----------+-------------+---------------------+------------+
You have selected the following JobIds: 2025,2151
...
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
...
$ cd /var/cache/bind
$ ls
...
$ mark myfile.it
$ done

Il restore verrà effettuato sull'host che conteneva il file originale (restoreclient, ossia il To client di Bat), nella posizione specificata da Where del job Type = Restore, se la directory non esiste, viene creata.

doc/appunti/linux/sa/bacula.txt · Last modified: 2018/06/15 15:23 by niccolo