Project

General

Profile

BaculaBackup » History » Version 32

Simone Piccardi, 12/22/2010 03:53 PM

1 28 Amministratore Truelite
h1. Backup con Bacula
2 1 Amministratore Truelite
3 28 Amministratore Truelite
4
"Bacula":http://www.bacula.org/ è un potente sistema che consente la centralizzazione dei backup di varie macchine all'interno di una rete, e la gestione automatica degli stessi.
5
6 1 Amministratore Truelite
L'architettura di bacula è composta da tre componenti principali:
7
8 28 Amministratore Truelite
* il _File Daemon_, che va installato sulle macchine di cui si vuole effettuare il backup ed ha il compito di gestire i file di cui deve essere eseguito il backup.
9
* lo _Storage Daemon_ che va installato sulla macchina su cui è presente il dispositivo di registrazione dei dati (nastro, disco o quant'altro).
10
* il _Director_ che va installato su una macchina qualsiasi (ma in genere si usa quella dove sta il dispositivo di backup) e che è il servizio che controlla tutti gli altri e gestisce i backup.
11 14 Amministratore Truelite
12 1 Amministratore Truelite
Ciascuno di questi tre servizi ha un suo script di avvio ed un suo file di configurazione, come illustrato nella seguente tabella:
13
14 31 Simone Piccardi
|_.Servizio|_.File di configurazione|_.Script di avvio|
15 29 Simone Piccardi
|File Daemon|@bacula-fd.conf@|bacula-fd|
16 31 Simone Piccardi
|Storage Daemon|@bacula-sd.conf@|bacula-sd|
17 30 Simone Piccardi
|Director|@bacula-dir.conf@|bacula-director|
18 1 Amministratore Truelite
19 22 Amministratore Truelite
a questi si aggiuinge poi la console di comando, @bconsole@. 
20 1 Amministratore Truelite
21 22 Amministratore Truelite
h2. Installazione e configurazione
22 28 Amministratore Truelite
23 31 Simone Piccardi
Tratteremo dell'installazione e della configurazione di base con Debian Lenny. Una delle caratteristiche di "Bacula":http://www.bacula.org/ è quella di salvare su un database il suo stato, mantenendo quello che viene chiamato dal programma stesso il _catalogo_. Il programma supporta tre tipi di database, _MySQL_, _PostgreSQL_ e _SQLite_. Dato che la versione ufficiale di Debian Lenny non aveva abilitato (per questioni di licenza con OpenSSL) il supporto per le connessioni cifrate, useremo la versione ottenuta da backports (la 5.0.2 al momento della ultima revisione di queste note) che usa _GnuTLS_. 
24 28 Amministratore Truelite
25 31 Simone Piccardi
Per installare il necessario sul server di backup occorre anzitutto inserire la seguente riga in @/etc/apt/sources.list@: 
26 28 Amministratore Truelite
27 1 Amministratore Truelite
<pre>
28 28 Amministratore Truelite
deb http://www.backports.org/debian lenny-backports main contrib
29
</pre>
30 31 Simone Piccardi
31 1 Amministratore Truelite
e poi installare la versione per il database scelto con:
32 31 Simone Piccardi
33 1 Amministratore Truelite
<pre>
34 23 Amministratore Truelite
apt-get install bacula-director-sqlite3 bacula-sd bacula-fd
35 22 Amministratore Truelite
</pre>
36 1 Amministratore Truelite
37
h2. Configurazione con SSL
38
39 31 Simone Piccardi
Con la versione 1.38 _Bacula _ha il supporto nativo per l'uso di SSL per il trasferimento dei dati. In precedenza era necessario impostare gli opportuni tunnel SSL con @stunnel@, in questo caso la cosa si semplifica leggermente. In caso di presenza di un firewall occorre comunque ricordare che la struttura di Bacula prevede che il _File Daemon_ deve poter contattare lo _Storage Daemon_ ed occorrerà pertanto prevedere gli opportuni _"pin-holes"_ per eventuali accessi dai server esterni o dalla DMZ (si presuppone ovviamente che il server di backup sia nella rete interna).
40 28 Amministratore Truelite
41 31 Simone Piccardi
Il primo passo è quello di procurarsi i certificati necessari, questi andranno anzitutto installati sul Director per quanto riguarda tutti i vari servizi: il _Director_ stesso, che viene contattato dalla console, ed il _File Daemon_, che viene contattato dai vari File Daemon. Occorre allora anzitutto configurare l'accesso al Director definendo la relativa voce in @bacula-dir.conf@:
42 28 Amministratore Truelite
43
<pre>
44 22 Amministratore Truelite
Director {                            # define myself
45
  Name = backup1-dir
46
  DIRport = 9101                # where we listen for UA connections
47 31 Simone Piccardi
  QueryFile]] = "/etc/bacula/scripts/query.sql"
48
  WorkingDirectory = "/var/lib/bacula"
49
  PidDirectory = "/var/run/bacula"
50 28 Amministratore Truelite
  Maximum Concurrent Jobs = 1
51 22 Amministratore Truelite
  Password = "xxx"         # Console password (lunga e complicata)
52 1 Amministratore Truelite
  Messages = Daemon
53 23 Amministratore Truelite
  TLS Enable = yes
54 1 Amministratore Truelite
  TLS Require = yes
55 23 Amministratore Truelite
  TLS CA Certificate File = /etc/ssl/certs/Truelite-cacert.pem
56 1 Amministratore Truelite
  TLS Certificate = /etc/ssl/certs/bacula.fi.trl-cert.pem
57
  TLS Key = /etc/ssl/private/bacula.fi.trl-key.pem
58
  TLS Verify Peer = yes
59
  TLS DH File = /etc/bacula/dh1024.pem
60
}
61 28 Amministratore Truelite
</pre>
62 23 Amministratore Truelite
63 31 Simone Piccardi
in questo caso le varie direttive servono a dichiarare chiave e certificato SSL usato dal _Director_, ed indicare la CA con cui vengono verificati le connessioni dai client verso il _Director_. Devono poi essere configurate le modalità di accesso SSL client del _Director_ verso gli altri servizi indicando con quali certificato e chiave ci si vuole collegare ad essi (nel caso useremo sempre gli stessi). In particolare per le varie voci rispetto alla configurazione installata di default si dovranno inserire delle configurazioni del tipo:
64 23 Amministratore Truelite
65 28 Amministratore Truelite
<pre>
66 1 Amministratore Truelite
Client {
67
...
68 23 Amministratore Truelite
  TLS Enable = yes
69
  TLS Require = yes
70
  TLS CA Certificate File = /etc/ssl/certs/Truelite-cacert.pem
71 1 Amministratore Truelite
  TLS Certificate = /etc/ssl/certs/bacula.fi.trl-cert.pem
72
  TLS Key = /etc/ssl/private/bacula.fi.trl-key.pem
73
}
74 23 Amministratore Truelite
...
75
...
76
Storage {
77
...
78 1 Amministratore Truelite
  TLS Enable = yes
79
  TLS Require = yes
80 23 Amministratore Truelite
  TLS CA Certificate File = /etc/ssl/certs/Truelite-cacert.pem
81 1 Amministratore Truelite
  TLS Certificate = /etc/ssl/certs/bacula.fi.trl-cert.pem
82
  TLS Key = /etc/ssl/private/bacula.fi.trl-key.pem
83
}
84
</pre>
85
86 31 Simone Piccardi
per ciascuna istanza di un _File Daemon_ (@Client@) o di uno _Storage Daemon_ (@Storage@).
87
88
Una volta configurato il _Director_ occorrerrà fare altrettanto per gli altri servizi, e sempre, qualora questo sia previsto (la cosa vale per il _File Daemon_) per le due direzioni, quella in cui il singolo servizio può essere contattato e quella in cui il servizio contatta un altro servizio. Si avranno pertanto in @bacula-sd.conf@ configurazioni del tipo: 
89
90 1 Amministratore Truelite
<pre>
91 28 Amministratore Truelite
Storage {
92
...
93 1 Amministratore Truelite
  TLS Enable = yes
94
  TLS Require = yes
95
  TLS CA Certificate File = /etc/ssl/certs/Truelite-cacert.pem
96 23 Amministratore Truelite
  TLS Certificate = /etc/ssl/certs/bacula.fi.trl-cert.pem
97
  TLS Key = /etc/ssl/private/bacula.fi.trl-key.pem
98 1 Amministratore Truelite
}
99 23 Amministratore Truelite
</pre>
100 31 Simone Piccardi
101 1 Amministratore Truelite
per definire il certificato usato per le connessioni allo _Storage Daemon_, mentre per le connessioni effettuate verso l'esterno (in questo caso solo il _Director_ per rispondere ad interrogazioni dalla console) si dovrà mettere qualcosa del tipo:
102 31 Simone Piccardi
103 1 Amministratore Truelite
<pre>
104
Director {
105 23 Amministratore Truelite
...
106
  TLS Enable = yes
107
  TLS Require = yes
108
  TLS CA Certificate File = /etc/ssl/certs/Truelite-cacert.pem
109
  TLS Certificate = /etc/ssl/certs/bacula.fi.trl-cert.pem
110
  TLS Key = /etc/ssl/private/bacula.fi.trl-key.pem
111
  TLS Verify Peer = yes
112
  TLS Allowed CN = "bacula.fi.trl"
113 1 Amministratore Truelite
}
114
</pre>
115
116 31 Simone Piccardi
dove si richiede anche la verifica del certificato e che questo abbia uno specifico _Common Name_. La stessa configurazione si ritroverà sostanzialmente identica anche in @bacula-fd.conf@ (con @FileDaemon@ al posto di @Storage@). 
117 11 Amministratore Truelite
118 1 Amministratore Truelite
h2. Uso dell'autochanger
119
120 31 Simone Piccardi
Perché sia possibile utilizzare un dispositivo cambianastri (quello che in gergo viene chiamato _Autochanger_), deve essere disponibile e funzionante lo script @/etc/bacula/scripts/mtx-changer@.
121 1 Amministratore Truelite
122 31 Simone Piccardi
Normalmente i dispositivi cambianastri sono pilotati direttamente attraverso l'interfaccia SCSI, utilizzando il dispositivo generico (se avete solo il nastro SCSI questo sarà @/dev/sg0@, in generale va verificato). Per inviare i comandi viene usato un programma apposito, @mtx@, cui lo script installato di default si appoggia. Esistono però anche cambianastri pilotati con modalità diverse, nel qual caso occorrerà uno script dedicato, un esempio per un _IBM Ultrium LTO 3581 L28_, che viene comandato via @telnet@, è allegato alla pagina.
123 28 Amministratore Truelite
124 31 Simone Piccardi
Per poter utilizzare il cambianastri si deve anzitutto segnalarne la presenza nella sezione Device del file @bacula-sd.conf@, ed indicare il file di dispositivo da usare, un possibile esempio è il seguente: 
125 28 Amministratore Truelite
126
<pre>
127 1 Amministratore Truelite
Device {
128
  Name = DDS-4                        #
129 28 Amministratore Truelite
  Media Type = DDS-4
130 1 Amministratore Truelite
  Archive Device = /dev/nst0
131 31 Simone Piccardi
  AutomaticMount = yes;               # when device opened, read it
132
  AlwaysOpen = yes;
133
  RemovableMedia = yes;
134
  RandomAccess = no;
135 28 Amministratore Truelite
  Changer Command = "/etc/bacula/scripts/mtx-changer %c %o %S %a %d"
136
  Changer Device = /dev/sg1
137 31 Simone Piccardi
  AutoChanger = yes
138
  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
139 1 Amministratore Truelite
}
140 28 Amministratore Truelite
</pre>
141 31 Simone Piccardi
142
inoltre deve essere reso noto al _Director_ che lo storage supporta l'_autochanger_; questo si fa con una analoga riga @AutoChanger = yes@ nella sua configurazione; cioè si dovrà avere dentro @bacula-dir.conf@ qualcosa del tipo: 
143
144 28 Amministratore Truelite
<pre>
145
Storage {
146 10 Amministratore Truelite
  Name = File
147 1 Amministratore Truelite
  Address = bacula.truelite.it   # N.B. Use a fully qualified name here
148
  SDPort = 9103
149 14 Amministratore Truelite
  Password = "xxxxxxx"
150 1 Amministratore Truelite
  Device = DDS-4
151
  Media Type = DDS-4
152
  Autochanger = yes
153
}
154 28 Amministratore Truelite
</pre>
155
156 31 Simone Piccardi
Fatto questo diventa possibile usare l'attributo @slot@ nel comando @label@ da console. Con questo diventa possibile etichettare i vari nastri dell'autochanger con una serie di comandi del tipo: 
157
158 1 Amministratore Truelite
<pre>
159
*label slot=5
160
Using default Catalog name=MyCatalog DB=bacula
161
Automatically selected Storage: File
162
Enter new Volume name: Volume005
163
Automatically selected Pool: Default
164
Connecting to Storage daemon File at bacula.truelite.it:9103 ...
165
Sending label command for Volume "Volume005" Slot 5 ...
166
3301 Issuing autochanger "loaded drive 0" command.
167
3302 Autochanger "loaded drive 0", result is Slot 4.
168
3303 Issuing autochanger "unload slot 4, drive 0" command.
169
3304 Issuing autochanger "load slot 5, drive 0" command.
170
3305 Autochanger "load slot 5, drive 0", status is OK.
171
block.c:264 Volume data error at 0:0! Wanted ID: "BB02", got "". Buffer discarded.
172 11 Amministratore Truelite
3000 OK label. Volume=Volume005 Device=/dev/nst0
173
Catalog record for Volume "Volume005", Slot 5  successfully created.
174 15 Amministratore Truelite
Requesting to mount DDS-4 ...
175 28 Amministratore Truelite
3001 Device /dev/nst0 is mounted with Volume "Volume005"
176 15 Amministratore Truelite
</pre>
177 31 Simone Piccardi
178 28 Amministratore Truelite
da ripetere per tutti i nastri disponibili. 
179
180 1 Amministratore Truelite
Una volta inizializzati i vari nastri si può rendere noto al _Director_ la presenza dei vari nastri con il comando:
181 31 Simone Piccardi
182 1 Amministratore Truelite
<pre>
183
update slots scan
184
</pre>
185 28 Amministratore Truelite
186
h2. Come gestire manualmente i nastri
187
188 13 Amministratore Truelite
Per la rimozione dei dati presenti sui nastri si devono seguire i seguenti passi:
189 11 Amministratore Truelite
190 31 Simone Piccardi
* rimuovere i dati dal catalogo con @purge@, scegliendo il volume da cancellare,
191 28 Amministratore Truelite
* inserire il nastro nel dispositivo, se si dispone dell'autochanger si può fare con:
192 32 Simone Piccardi
193 28 Amministratore Truelite
<pre>
194 16 Amministratore Truelite
/etc/bacula/scripts/mtx-changer /dev/sg1 load N
195 31 Simone Piccardi
</pre> 
196 32 Simone Piccardi
197 31 Simone Piccardi
dove N è il numero dello slot.
198
* cancellarne il contenuto a mano con @btape test@ o scrivendoci direttamente 
199
* usare @label@ per modificarne l'etichetta
200 1 Amministratore Truelite
201 28 Amministratore Truelite
Se invece si è configurato correttamente il periodo di ritenzione dei dati, sarà _Bacula_ che provvederà a cercare il primo nastro libero, posto che il periodo non sia eccessivo e lo spazio disponibile esaurito, 
202 1 Amministratore Truelite
203
Nel qual caso si potrà ridurre il periodo di ritenzione con il comando:
204 28 Amministratore Truelite
<pre>
205
update volume=VolumeXXX [[VolRetention]]=ddd
206
</pre>
207
<pre>
208 1 Amministratore Truelite
209
210
211 28 Amministratore Truelite
h2. Cosa fare quando si esaurisce lo spazio disponibile
212 17 Amministratore Truelite
213 28 Amministratore Truelite
214
La maggiore forza di "Bacula":http://www.bacula.org/ è quella, una volta configurato correttamente, di essere in grado di gestire tutta la procedura di backup in maniera automatica. In genere questo funziona correttamente senza nessun intervento manuale. L'incidente più comune che può capitare è che si esaurisca lo spazio (disco o nastro) disponibile per i backup, nel qual caso il comportamento di "Bacula":http://www.bacula.org/ è quello di bloccare i backup rispettando i termini del periodo di ritenzione dei dati impostato. 
215
216
<pre>
217
<pre>
218 18 Amministratore Truelite
*list volumes
219 16 Amministratore Truelite
Using default Catalog name=MyCatalog DB=bacula
220 1 Amministratore Truelite
Pool: Default
221 16 Amministratore Truelite
+---------+------------+-----------+-------------+----------+--------------+---------+------+-----------+-----------+---------------------+
222 28 Amministratore Truelite
| [[MediaId]] | [[VolumeName]] | [[VolStatus]] | [[VolBytes]]    | [[VolFiles]] | [[VolRetention]] | Recycle | Slot | [[InChanger]] | [[MediaType]] | [[LastWritten]]         |
223 19 Amministratore Truelite
+---------+------------+-----------+-------------+----------+--------------+---------+------+-----------+-----------+---------------------+
224 1 Amministratore Truelite
| 1       | Volume0013 | Full      | 13156318147 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-06 02:53:16 |
225 20 Amministratore Truelite
| 2       | Volume0014 | Full      | 15260956061 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-15 01:12:48 |
226
| 3       | Volume0015 | Full      | 10288088510 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-07-30 02:03:26 |
227 21 Amministratore Truelite
| 4       | Volume0016 | Full      | 28805889791 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-06 01:26:31 |
228 1 Amministratore Truelite
| 5       | Volume0017 | Full      | 14412428094 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-07-29 01:27:50 |
229 21 Amministratore Truelite
+---------+------------+-----------+-------------+----------+--------------+---------+------+-----------+-----------+---------------------+
230 28 Amministratore Truelite
</pre>
231 21 Amministratore Truelite
dopo di che, considerato che i dati più vecchi si trovano sul Volume0017, se potrà cancellare il contenuto con:
232 28 Amministratore Truelite
<pre>
233 21 Amministratore Truelite
* purge volume=Volume0017
234
235
This command is can be DANGEROUS!!!
236
237
It purges (deletes) all Files from a Job,
238 28 Amministratore Truelite
[[JobId]], Client or Volume; or it purges (deletes)
239 21 Amministratore Truelite
all Jobs from a Client or Volume without regard
240
for retention periods. Normally you should use the
241
PRUNE command, which respects retention periods.
242
243 28 Amministratore Truelite
</pre>
244 1 Amministratore Truelite
(il comando impiegherà un certo tempo per eseguire l'operazione), a questo punto si potrà verificare che il volume è diventato disponibile con:
245 28 Amministratore Truelite
<pre>
246 22 Amministratore Truelite
*list volumes
247 21 Amministratore Truelite
Using default Catalog name=MyCatalog DB=bacula
248 22 Amministratore Truelite
Pool: Default
249 21 Amministratore Truelite
250 1 Amministratore Truelite
+---------+------------+-----------+-------------+----------+--------------+---------+------+-----------+-----------+---------------------+
251 28 Amministratore Truelite
| [[MediaId]] | [[VolumeName]] | [[VolStatus]] | [[VolBytes]]    | [[VolFiles]] | [[VolRetention]] | Recycle | Slot | [[InChanger]] | [[MediaType]] | [[LastWritten]]         |
252 24 Amministratore Truelite
+---------+------------+-----------+-------------+----------+--------------+---------+------+-----------+-----------+---------------------+
253 27 Amministratore Truelite
| 1       | Volume0013 | Full      | 13156318147 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-06 02:53:16 |
254 25 Amministratore Truelite
| 2       | Volume0014 | Full      | 15260956061 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-15 01:12:48 |
255 1 Amministratore Truelite
| 3       | Volume0015 | Full      | 10288088510 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-07-30 02:03:26 |
256 27 Amministratore Truelite
| 4       | Volume0016 | Full      | 28805889791 | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-06 01:26:31 |
257
| 5       | Volume0017 | Purged    | 968063348   | 0        | 1814400      | 1       | 0    | 0         | File      | 2006-08-21 11:59:28 |
258
+---------+------------+-----------+-------------+----------+--------------+---------+------+-----------+-----------+---------------------+
259 28 Amministratore Truelite
</pre>
260 1 Amministratore Truelite
261 27 Amministratore Truelite
262
263 28 Amministratore Truelite
h2. Configurazione Webacula
264
265
266
"Webacula":http://webacula.sourceforge.net/ è una interfaccia di gestione via Web di Bacula, basata su PHP e Zendframework, pertanto per installarla si sono preventivamente installati i seguenti pacchetti con:
267
<pre>
268 27 Amministratore Truelite
apt-get install zendframework php5-gd
269 28 Amministratore Truelite
</pre>
270 27 Amministratore Truelite
271 28 Amministratore Truelite
<pre>
272 27 Amministratore Truelite
273 28 Amministratore Truelite
<pre>
274
<pre>
275 26 Amministratore Truelite
[general]
276
db.adapter = PDO_SQLITE 
277
db.config.dbname = /var/lib/bacula/bacula.db
278
279 1 Amministratore Truelite
def.timezone = "Europe/Rome"
280
bacula.sudo = ""
281
bacula.bconsole = "/usr/bin/bconsole"
282
283 27 Amministratore Truelite
[webacula]
284
db.adapter = PDO_SQLITE
285
db.config.dbname = /var/www/webacula/webacula.db
286 28 Amministratore Truelite
</pre>
287 27 Amministratore Truelite
288
289 28 Amministratore Truelite
<pre>
290 27 Amministratore Truelite
chown www-data /var/www/webacula/webacula.db
291
usermod -aG bacula www-data
292
usermod -aG ssl-cert www-data
293 28 Amministratore Truelite
</pre>
294 27 Amministratore Truelite
295 28 Amministratore Truelite
<pre>
296
<pre>
297 27 Amministratore Truelite
a2enmod rewrite
298 28 Amministratore Truelite
</pre>
299
<pre>
300
<pre>
301
# [[RewriteLog]] "/var/log/httpd/rewrite.log"
302
# [[RewriteLogLevel]] 3
303
# [[SetEnv]] APPLICATION_ENV development
304
[[SetEnv]] APPLICATION_ENV production
305 27 Amministratore Truelite
306
Alias /webacula  /var/www/webacula/html
307
<Directory /var/www/webacula/html>
308 28 Amministratore Truelite
   [[RewriteEngine]] On
309 27 Amministratore Truelite
310 28 Amministratore Truelite
   [[RewriteBase]]   /webacula
311
   [[RewriteCond]] %{REQUEST_FILENAME} -s [OR]
312
   [[RewriteCond]] %{REQUEST_FILENAME} -l [OR]
313
   [[RewriteCond]] %{REQUEST_FILENAME} -d
314
   [[RewriteRule]] ^.*$ - [NC,L]
315
   [[RewriteRule]] ^.*$ index.php [NC,L]
316 1 Amministratore Truelite
317
   php_flag magic_quotes_gpc off
318
   php_flag register_globals off
319
320 28 Amministratore Truelite
   Options Indexes [[FollowSymLinks]]
321
   [[AllowOverride]] All
322 1 Amministratore Truelite
   Order deny,allow
323
324
325 28 Amministratore Truelite
#   [[AuthType]] Basic
326
#   [[AuthName]] "Webacula"
327
#   [[AuthUserFile]]       /etc/httpd/conf/webacula.users
328 1 Amministratore Truelite
#   Require valid-user
329
</Directory>
330
331 28 Amministratore Truelite
</pre>