====== Bacula ====== * **Bacula Main Reference Guide**: {{bacula-main.pdf|PDF}}, [[http://www.bacula.org/5.0.x-manuals/en/main/main/index.html|on-line]] * **Console and Operators Guide**: {{bacula-console.pdf|PDF}}, [[http://www.bacula.org/5.0.x-manuals/en/console/console/index.html|on-line]] ===== 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 **[[http://download.opensuse.org/repositories/home:/dassit:/bacula:/|reperibili qui]]**. Vogliamo la versione per PostgreSQL, possibilmente [[http://www.pathname.com/fhs/|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} $* < 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 [[http://www.bacula.org/5.2.x-manuals/en/main/main/Messages_Resource.html|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\) \\" -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \\" -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 [[http://www.bacula.org/2.4.x-manuals/en/main/Bacula_Console.html|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 **[[http://www.bacula.org/5.2.x-manuals/en/main/main/Configuring_Director.html#SECTION0014151000000000000000|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 [[http://www.bacula.org/5.0.x-manuals/en/main/main/Windows_Version_Bacula.html|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**. - Dalla console di **''bat''**, //Pools//, click destro sul volume, //Purge Volume//. - Dalla console di **''bat''**, //Pools//, click destro sul volume, //Edit Volume//, //Volume status// -> //Recycle//. ===== 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 **[[http://wiki.bacula.org/doku.php?id=removable_disk|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: [[bacula_virtual_changer_config]]. ==== 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. - Collegare il **disco USB** dove sono stati creati preventivamente i volumi **''m01s00X''** (magazine 01, slot 00X) e assegnati al pool Scratch. - Avviare la console **Bat** - Cliccare su **Jobs** - Fare doppio click sul **job desiderato** per avviarlo manualmente. - Indicare il **pool02** come pool destinazione e **usbchanger1** come storage. - **Ripetere** per tutti gli altri job. - 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 [[http://www.mail-archive.com/bacula-devel@lists.sourceforge.net/msg06505.html|questo suggerimento]], ma pare non sufficiente). * Prima di eseguire il restore: lanciare il comando "messages" dentro //Console//, //Command// (vedere [[http://adsm.org/lists/html/Bacula-users/2010-11/msg00319.html|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.