File: dar-differential-backup-mini-howto.es.html

package info (click to toggle)
dar 2.6.13-2
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 10,364 kB
  • sloc: cpp: 77,385; sh: 6,192; ansic: 776; makefile: 435; python: 242; csh: 95; perl: 43; sed: 16
file content (998 lines) | stat: -rw-r--r-- 47,284 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>



<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="Docutils 0.9.1: http://docutils.sourceforge.net/">
<title>DAR differential backup mini-howto -ES-</title>
<meta name="author" content="Grzegorz Adam Hankiewicz">
<meta name="date" content="2012-12-19">
<meta name="copyright" content="Este documento está bajo dominio público.">
<style type="text/css">

/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:Date: $Date: 2005-05-26 12:51:39 +0200 (Thu, 26 May 2005) $
:Version: $Revision: 3368 $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.
*/

/* "! important" is used here to override other ``margin-top`` and
   ``margin-bottom`` styles that are later in the stylesheet or 
   more specific.  See http://www.w3.org/TR/CSS1#the-cascade */
.first {
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em }

div.footer, div.header {
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin-left: 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font-family: serif ;
  font-size: 100% }

pre.line-block {
  font-family: serif ;
  font-size: 100% }

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em ;
  background-color: #eeeeee }

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (<h#> element) */
  font-size: 80% }

table.citation {
  border-left: solid thin gray }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid thin black }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

tt.docutils {
  background-color: #eeeeee }

ul.auto-toc {
  list-style-type: none }

</style>
</head><body>
<div class="document" id="dar-differential-backup-mini-howto-es">
<h1 class="title">DAR differential backup mini-howto -ES-</h1>
<table class="docinfo" rules="none" frame="void">
<col class="docinfo-name">
<col class="docinfo-content">
<tbody valign="top">
<tr><th class="docinfo-name">Author:</th>
<td>Grzegorz Adam Hankiewicz</td></tr>
<tr><th class="docinfo-name">Contact:</th>
<td><a class="first last reference external" href="mailto:dar@gradha.imap.cc">dar@gradha.imap.cc</a></td></tr>
<tr class="field"><th class="docinfo-name">Translator:</th><td class="field-body">Grzegorz Adam Hankiewicz</td>
</tr>
<tr><th class="docinfo-name">Date:</th>
<td>2012-12-19</td></tr>
<tr class="field"><th class="docinfo-name">Web site:</th><td class="field-body"><a class="reference external" href="http://gradha.github.com/dar-differential-backup-mini-howto/">http://gradha.github.com/dar-differential-backup-mini-howto/</a></td>
</tr>
<tr><th class="docinfo-name">Copyright:</th>
<td>Este documento está bajo dominio público.</td></tr>
<tr class="field"><th class="docinfo-name">Translations:</th><td class="field-body">De la página web puede obtener este documento en
inglés, italiano y español.</td>
</tr>
</tbody>
</table>
<div class="contents topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#introduccion" id="id2">Introducción</a></li>
<li><a class="reference internal" href="#uso-simple-de-dar" id="id3">Uso simple de DAR</a></li>
<li><a class="reference internal" href="#la-estrategia-de-copias-de-seguridad" id="id4">La estrategia de copias de seguridad</a></li>
<li><a class="reference internal" href="#copia-de-seguridad-completa-con-dar" id="id5">Copia de seguridad completa con DAR</a></li>
<li><a class="reference internal" href="#haciendo-copias-de-seguridad-diferenciales-con-dar" id="id6">Haciendo copias de seguridad diferenciales con DAR</a></li>
<li><a class="reference internal" href="#configurando-algunos-scripts-para-automatizar-el-proceso" id="id7">Configurando algunos scripts para automatizar el proceso</a></li>
<li><a class="reference internal" href="#recuperando-su-copia-de-seguridad-desde-cero" id="id8">Recuperando su copia de seguridad desde cero</a></li>
<li><a class="reference internal" href="#anadiendo-verificaciones-a-los-scripts" id="id9">Añadiendo verificaciones a los scripts</a></li>
<li><a class="reference internal" href="#ideas-para-el-futuro" id="id10">Ideas para el futuro</a></li>
<li><a class="reference internal" href="#el-fin" id="id11">El fin</a></li>
</ul>
</div>
<div class="section" id="introduccion">
<h1><a class="toc-backref" href="#id2">Introducción</a></h1>
<blockquote>
<p>Todos deberíamos hacer copias de seguridad de nuestros datos
importantes.  Este consejo omnipresente es habitualmente ignorado
por la mayoría de las personas. Yo lo ignoré también, hasta que
perdí una buena cantidad de datos importantes. Insatisfecho,
continué perdiendo datos en algunos incidentes posteriores,
hasta que decidí que era bastante. Entonces busqué programas de
copias de seguridad en <a class="reference external" href="http://freshmeat.net/">Freshmeat</a> que permitiesen hacer copias
de seguridad diferenciales y encontré <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>.</p>
<p>Una copia de seguridad completa significa que todos los ficheros
bajo su política de seguridad serán guardados. Una copia de
seguridad diferencial o incremental, sólo contendrá aquellos
ficheros cuyos contenidos han cambiado desde la copia de seguridad
anterior, ya sea esta completa o diferencial.</p>
<p><a class="reference external" href="http://dar.linux.free.fr/">DAR</a> le permite crear de forma sencilla un conjunto de copias de
seguridad diferenciales. El método que he desarrollado me ayuda
a tener copias de seguridad automáticas que se ejecutan cada
noche.  El primer día del mes, se realiza una copia de seguridad
completa.  El resto del mes, sólo se realizan copias de seguridad
diferenciales.  En mi situación, muy pocos ficheros cambian de
un día a otro, algunas veces el código fuente del proyecto en
el que estoy trabajando, y siempre mis buzones de correo.</p>
<p>El resultado es que puedo recuperar el contenido de mi ordenador
a un día específico con facilidad, en caso de necesitarlo. <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>
es un programa de línea de comando, y puede hacerse ligeramente
complejo con algunas opciones. Este pequeño mini-howto le
explicará mi solución personal, que es muy cruda, pero me da
buenos resultados.  Si, he verificado que puedo recuperar datos
de las copias de seguridad.  De hecho, a finales del año 2003 me
trasladé a otro país y solamente llevé conmigo un CD ROM con
una <a class="reference external" href="http://www.knoppix.org/">Knoppix</a> autoarrancable, y recuperé el estado exacto de mi
instalación Debian en cuestión de horas.  Sin personalizaciones,
sin largas instalaciones, sin ficheros perdidos.</p>
<p>Este documento fue escrito usando la versión 1.3.0 de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>. Cuando
me actualicé a DAR 2.0.3, todo seguía funcionando, ni si quiera
tuve que actualizar mis archivos de copias de seguridad. Así
que parece que la interfaz y el formato de copias de seguridad
son bastante estables, o al menos compatibles hacia atrás. No
obstante, no confíe a ciegas en este documento. Verifique que la
versión de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> que tiene instalada funciona como espera y que
puede recuperar una copia de seguridad generada antes de tener
que depender de ella.</p>
<p>Esta versión del texto usa reStructuredText (para eso son las
marcas extrañas en la versión en modo texto). Lea más sobre esto
en <a class="reference external" href="http://docutils.sourceforge.net/">http://docutils.sourceforge.net/</a>.</p>
</blockquote>
</div>
<div class="section" id="uso-simple-de-dar">
<h1><a class="toc-backref" href="#id3">Uso simple de DAR</a></h1>
<blockquote>
<p><a class="reference external" href="http://dar.linux.free.fr/">DAR</a> es muy similar a <a class="reference external" href="http://freshmeat.net/projects/tar/">tar</a> en el número de opciones que tiene: hay
suficiente para cada necesidad, pero demasiadas para un novato.
Como es habitual, siempre puede obtener ayuda del programa
tecleando <tt class="docutils literal">dar <span class="pre">-h</span></tt> o <tt class="docutils literal">man dar</tt> tras su instalación. Al
igual que <a class="reference external" href="http://freshmeat.net/projects/tar/">tar</a>, hay un conjunto de parámetros obligatorios que
definen el tipo de operación que va a realizar (crear, extraer,
listar, etc), y un conjunto de parámetros que afectan la opción
seleccionada. Simplemente por probar, imagínese que quiere
realizar una copia de seguridad de su directorio home. Escribiría
algo así:</p>
<pre class="literal-block">dar -c fichero_sin_extension -g file1 -g file2 ... -g fileN
</pre>
<p>La salida debería ser similar a esto:</p>
<pre class="literal-block">$ dar -c mi_copia -g safecopy.py/ -g translate_chars.py/


 --------------------------------------------
 15 inode(s) saved
 with 0 hard link(s) recorded
 0 inode(s) not saved (no file change)
 0 inode(s) failed to save (filesystem error)
 4 files(s) ignored (excluded by filters)
 0 files(s) recorded as deleted from reference backup
 --------------------------------------------
 Total number of file considered: 19
$ ls
mailbox_date_trimmer/  mi_copia.1.dar        sdb.py/
mailbox_reader/        safecopy.py/          translate_chars.py/
</pre>
<p>Tal y como se habrá dado cuenta, <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> añade un número y extensión
a su nombre. El propósito de la extensión es claro, ayuda a saber
visualmente que el fichero es una copia de seguridad de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>. El
número es un <em>trozo</em>, y está relacionada con la característica
de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> de repartir la copia de seguridad en varios dispositivos
de almacenamiento.  Si por ejemplo quisiese hacer una copia de
seguridad en CD ROM, pero sus directorios son mayores que la
capacidad de uno, puede decirle a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> que reparta el archivo
en tantos ficheros como sea necesario, que luego puede grabar
en varios CD ROMs.</p>
<p>¿Quiere recuperar su copia de seguridad? Muy sencillo, teclee
lo siguiente:</p>
<pre class="literal-block">$ mkdir temp
$ cd temp
$ dar -x ../mi_copia
file ownership will not be restored as dar is not run as root.
to avoid this message use -O option [return = OK | esc = cancel]
Continuing...


 --------------------------------------------
 15 file(s) restored
 0 file(s) not restored (not saved in archive)
 0 file(s) ignored (excluded by filters)
 0 file(s) less recent than the one on filesystem
 0 file(s) failed to restore (filesystem error)
 0 file(s) deleted
 --------------------------------------------
 Total number of file considered: 15
$ ls
safecopy.py/  translate_chars.py/
</pre>
</blockquote>
</div>
<div class="section" id="la-estrategia-de-copias-de-seguridad">
<h1><a class="toc-backref" href="#id4">La estrategia de copias de seguridad</a></h1>
<blockquote>
<p>El primer paso para crear una buena copia de seguridad es
determinar qué partes de su sistema necesitan una. Esto
no significa necesariamente que no puede crear una copia de
seguridad completa, sólo que repartir la copia en al menos dos
partes puede ayudar mucho a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> (y cualquier otra herramienta
de copias de seguridad).</p>
<p>Mi sistema en casa se compone de dos discos duros. El primero
está partido en una partición de 3.8 GB donde vive mi sistema
completo, y otra partición de 11 GB donde almaceno mi música y
otros ficheros temporales, como un repositorio local de paquetes
Debian que hago para mí mismo.  El segundo disco duro tiene
una partición de 9.4 GB cuyo único propósito es servir de copia
de seguridad del disco primario. No tengo interés en realizar
copias de seguridad de mi música, porque tengo todos los CDs
originales y scripts para recomprimirlos en formato ogg.</p>
<p>De las 3.8 GB que quiero hacer copia de seguridad, normalmente
entre 1.3 y 1.5 GB están vacías. Repartiré las 2.3 GB usadas
a nivel lógico entre directorios de <em>sistema</em> y <em>home</em> (en el
momento de escribir esto, mi home ocupa 588 MB). La razón de
esta separación es que como usuario normal sólo puedo cambiar
cosas en mi directorio home y otros ficheros de las particiones
que no hago copias de seguridad.  Mientras, la parte <em>sistema</em>
de la partición es bastante estable y no se modifica porque
(des)instalo software muy de vez en cuando.  De hecho, de mi
directorio <em>home</em> las únicas cosas que cambian normalmente
son mis directorios <tt class="docutils literal">Mail</tt> y <tt class="docutils literal">projects</tt>, donde pongo este
documento y otro software que escribo/hackeo.</p>
<p>La diferenciación básica entre <em>directorios home</em> y <em>de sistema</em>
también puede ser útil en organizaciones. Si trabaja para una
universidad, normalmente todas las máquinas tendrán la misma
configuración de sistema, pero dependiendo de la máquina sus
directorios home contendrán datos diferentes. Puede hacer un a
<em>copia de seguridad de sistema</em> de una sola máquina, y <em>copias
de seguridad del home</em> de cada máquina. Otra configuración común
es tener un servidor central que exporta los directorios home por
NFS. Aquí sólo tiene que hacer copia de seguridad del servidor. Si
tiene usuarios con privilegios altos, déjeles la tarea de hacer
una <em>copia de seguridad de sistema</em> de sus propias máquinas,
el directorio home exportado es algo que pueden ignorar dado
que será realizado en el servidor.</p>
<p>Una vez haya decidido qué quiere guardar en su copia de seguridad,
debe decidir cómo configurar <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>. Puede usar parámetros o
ficheros de configuración. Los parámetros están bien cuando no
tiene muchas opciones. Los ficheros de configuración son mejores
cuando quiere añadir complejas reglas de inclusión/exclusión de
ficheros, y además, puede usar comentarios para documentar los
parámetros, indicando por ejemplo la razón por la que incluye
tal o cual directorio. Esto puede ser útil si vuelve dentro de
unos meses y se pregunta qué hacen todas estas opciones.</p>
<p>Con mi configuración, ejecutaré comandos <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> desde scripts shell
llamados periódicamente por cron (<a class="reference internal" href="#configurando-algunos-scripts-para-automatizar-el-proceso">Configurando algunos scripts
para automatizar el proceso</a>), así que no me importa tener
largas líneas de comando, y este mismo documento tiene doble
propósito para documentar esos scripts. Si prefiere ficheros
de configuración, lea la documentación de DAR para aprender su
formato y cómo usarlos.</p>
</blockquote>
</div>
<div class="section" id="copia-de-seguridad-completa-con-dar">
<h1><a class="toc-backref" href="#id5">Copia de seguridad completa con DAR</a></h1>
<blockquote>
<p>Aquí está la línea de comando completa que usaré para mi copia de
seguridad de <em>sistema</em>, ejecutada como <strong>root</strong>. No se preocupe
por el gran número de parámetros, iré describiendo su propósito
uno a uno:</p>
<pre class="literal-block">dar -m 256 -y -s 600M -D -R / -c `date -I`_data -Z "*.gz" \
   -Z "*.bz2" -Z "*.zip" -Z "*.png" -P home/gradha -P tmp \
   -P mnt -P dev/pts -P proc -P floppy -P burner -P cdrom
</pre>
<ul>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-m</span> 256</tt></dt>
<dd><p class="first last"><a class="reference external" href="http://dar.linux.free.fr/">DAR</a> puede comprimir su copia de seguridad. La compresión
se aplica a ficheros individuales, y puede ser perjudicial
para pequeños ficheros. Por defecto los ficheros con 100
bytes o menos no serán comprimidos. Con el parámetro <tt class="docutils literal"><span class="pre">-m</span></tt>
incremento este valor a 256, el cual parece funcionar mejor
para esos pequeños ficheros de configuración que se almacenan
en <tt class="docutils literal">/etc/</tt> y <tt class="docutils literal">/home</tt>. Como puede ver, esta opción es
completamente opcional, básicamente para fanáticos del ajuste
como yo.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-y</span> [nivel]</tt></dt>
<dd><p class="first last">Esta opción activa la compresión <a class="reference external" href="http://sources.redhat.com/bzip2/">Bzip2</a> del archivo, que por
defecto está desactivada. Incluso puede especificar un nivel
numérico de compresión, que va de 0 (no compresión) hasta
9 (mejor compresión, procesado lento). <a class="reference external" href="http://sources.redhat.com/bzip2/">Bzip2</a> por defecto
usa 6, que es la mejor relación velocidad/compresión para
la mayoría de los ficheros. Yo no uso nivel de compresión,
el 6 me va bien.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-s</span> 600M</tt></dt>
<dd><p class="first last">Aquí está la característica de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> de trocear. El tamaño
especificado de 600 Megabytes es el tamaño máximo de fichero
que <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> creará. Si su copia de seguridad es mayor, obtendrá
varios ficheros de copia de seguridad, cada uno con su número
de trozo antes de la extensión del fichero, para que pueda
salvar cada uno en una unidad diferente de almacenamiento
(disquetes, zip, CDROM, etc). Mis copias de seguridad son
mucho más pequeñas que este tamaño, y mantengo este parámetro
sólo por si acaso se me ocurre crear un fichero grande en
mi directorio home y olvido borrarlo. Si este parámetro
le resulta útil, lea también en el manual de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> sobre el
parámetro <tt class="docutils literal"><span class="pre">-S</span></tt>.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-D</span></tt></dt>
<dd><p class="first last">Almacena directorios como directorios vacíos aquellos excluidos
por la opción <tt class="docutils literal"><span class="pre">-P</span></tt> o aquellos ausentes en la línea de
comando como parámetros. Esto es útil cuando recupera una
copia de seguridad desde cero, para que no tenga que crear
manualmente todos los directorios que fueron excluidos.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-R</span> /</tt></dt>
<dd><p class="first last">Especifica el directorio raíz para salvar o recuperar ficheros.
Por defecto esto apunta al directorio de trabajo actual.
Estamos realizando una <em>copia de seguridad de sistema</em>,
así que apuntará al directorio raíz.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-c</span> `date <span class="pre">-I`_data</span></tt></dt>
<dd><p class="first">Este es uno de los parámetros obligatorios de los que hablé
antes, y significa crear una copia de seguridad. Para aquellos
que no entienden lo que sigue, <tt class="docutils literal">`date <span class="pre">-I`</span></tt> es la expansión
de comillas de la shell de línea de comando. En pocas palabras,
<tt class="docutils literal">date <span class="pre">-I</span></tt> proporcionará la fecha en formato AAAA-MM-DD. Con
comillas y usado como parámetro, la salida del comando será
usada como cadena del comando padre. De este modo puede
crear copias de seguridad con la fecha de creación empotrada
en el nombre.  Si todavía no sabe de lo que hablo, intente
ejecutar lo siguiente desde la línea de comando:</p>
<pre class="last literal-block">echo "La fecha de hoy es `date -I`"
</pre>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-Z</span> patrón_fichero</tt></dt>
<dd><p class="first last">Usando las reglas normales de meta caracteres en ficheros puede
especificar patrones de ficheros que quiere almacenar en la
copia de seguridad sin compresión. Esto sólo tiene sentido
si usa el parámetro <tt class="docutils literal"><span class="pre">-y</span></tt>. Comprimir ficheros comprimidos
únicamente crea ficheros mayores y malgasta tiempo de la CPU.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-P</span> ruta_relativa</tt></dt>
<dd><p class="first last">Con este parámetro le dice a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> qué rutas no quiere
almacenar en su copia de seguridad. Aquí posiblemente quiere
poner el directorio home (soy el único usuario de la máquina,
hay algunos más, pero con el propósito de pruebas/sistema),
directorios de sistema que no son realmente ficheros físicos
como <tt class="docutils literal">proc</tt>, otras unidades que pueda tener montadas bajo
<tt class="docutils literal">mnt</tt> (destacando la unidad donde va a poner la copia de
seguridad), etc, etc.  Tenga en cuenta que las rutas que
especifique aquí deben ser relativas a la ruta especificada
por el parámetro <tt class="docutils literal"><span class="pre">-R</span></tt>.</p>
</dd>
</dl>
</li>
</ul>
<p>Eso no fue tan difícil. En el manual de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> puede leer sobre
más parámetros que pueda querer usar. Y aquí está la linea de
comando que ejecutaré como usuario dentro de mi directorio home:</p>
<pre class="literal-block">dar -m 256 -y -s 600M -D -R /home/gradha -c `date -I`_data \
   -Z "*.gz" -Z "*.bz2" -Z "*.zip" -Z "*.png" \
   -P instalacion_manual -P Mail/mail_pa_leer
</pre>
<p>Nada nuevo bajo el sol. Como puede ver, la mayoría de la línea
de comando es idéntica a la anterior, únicamente cambio el nombre
de los directorios que quiero excluir con <tt class="docutils literal"><span class="pre">-P</span></tt> y el directorio
raíz con el parámetro <tt class="docutils literal"><span class="pre">-R</span></tt>.</p>
</blockquote>
</div>
<div class="section" id="haciendo-copias-de-seguridad-diferenciales-con-dar">
<h1><a class="toc-backref" href="#id6">Haciendo copias de seguridad diferenciales con DAR</a></h1>
<blockquote>
<p>Un vez tenga una copia de seguridad completa puede crear una
copia de seguridad diferencial. La primera copia de seguridad
diferencial debe ser realizada usando la copia de seguridad
completa como referencia.  Las siguientes copias de seguridad
diferenciales usan la última copia de seguridad diferencial
como referencia. Aquí está la línea de comando para una copia
de seguridad diferencial de <em>sistema</em>:</p>
<pre class="literal-block">dar -m 256 -y -s 600M -D -R / -c `date -I`_diff -Z "*.gz" \
   -Z "*.bz2" -Z "*.zip" -Z "*.png" -P home/gradha -P tmp \
   -P mnt -P dev/pts -P proc -P floppy -P burner -P cdrom \
   -A copia_previa
</pre>
<ul>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-c</span> `date <span class="pre">-I`_diff</span></tt></dt>
<dd><p class="first last">Sólo cambio el nombre del fichero, por razones cosméticas.</p>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt><tt class="docutils literal"><span class="pre">-A</span> copia_previa</tt></dt>
<dd><p class="first last">Este nuevo parámetro se usa para decirle a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> dónde puede
encontrar la copia de seguridad anterior para que pueda
crear una copia de seguridad diferencial en lugar de una
completa.  La única cosa con la que debe tener cuidado es no
especificar ni trozo ni extensión en el nombre del fichero,
de lo contrario <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> le realizará una pregunta interactiva
en la línea de comando.</p>
</dd>
</dl>
</li>
</ul>
<p>La línea de comando de usuario es exactamente igual. Aquí está:</p>
<pre class="literal-block">dar -m 256 -y -s 600M -D -R /home/gradha -c `date -I`_diff \
   -Z "*.gz" -Z "*.bz2" -Z "*.zip" -Z "*.png" \
   -P instalacion_manual -P Mail/mail_pa_leer -A copia_previa
</pre>
<p><a class="reference external" href="http://dar.linux.free.fr/">DAR</a> tiene otra buena característica que no usamos: <em>catálogos</em>.
Cuando crea una copia de seguridad con <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>, internamente
contiene todos los datos más un <em>catálogo</em>. Este <em>catálogo</em>
contiene información sobre qué ficheros fueron guardados, sus
fechas, su tamaño comprimido, etc.  Puede extraer un <em>catálogo</em>
y almacenarlo por separado. ¿Para qué querría hacer esto? Para
configurar copias de seguridad diferenciales por red.</p>
<p>Para poder crear una copia de seguridad diferencial, necesita
proporcionar a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> la copia de seguridad previa para que pueda
decidir qué ficheros han cambiado. Realizar esto puede consumir
mucho ancho de banda en una red. En su lugar, tras crear la
copia de seguridad, puede extraer el <em>catálogo</em> y enviarlo a la
máquina que realiza las copias de seguridad.  La siguiente vez,
puede usar este fichero con el parámetro <tt class="docutils literal"><span class="pre">-A</span></tt>, y funcionará
como si el fichero completo estuviese ahí.</p>
<p>Esto también puede ser útil si usa trozos, porque el <em>catálogo</em>
se crea a partir del primer y último trozo. Es mucho más cómodo
usar un solo fichero con el comando de copia de seguridad en
lugar de tener que llevar consigo los discos de la copia de
seguridad anterior.</p>
</blockquote>
</div>
<div class="section" id="configurando-algunos-scripts-para-automatizar-el-proceso">
<h1><a class="toc-backref" href="#id7">Configurando algunos scripts para automatizar el proceso</a></h1>
<blockquote>
<p>Tal y como se mencionó anteriormente, es hora de configurar
las copias de seguridad bajo cron. Ponga el siguiente
script ejecutable para copias de seguridad de <em>sistema</em> bajo
<tt class="docutils literal">/root/dar_backup.sh</tt>:</p>
<pre class="literal-block">#!/bin/bash

DIR=/var/backups/system
FILE=${DIR}/`/bin/date -I`_data
# Commands
/usr/local/bin/dar -m 256 -y -s 600M -D -R / -c $FILE -Z "*.gz" \
   -Z "*.bz2" -Z "*.zip" -Z "*.png" -P home/gradha -P tmp \
   -P mnt -P dev/pts -P proc -P floppy -P burner \
   -P cdrom -P var/backups &gt; /dev/null
/usr/local/bin/dar -t $FILE &gt; /dev/null
/usr/bin/find $DIR -type f -exec chown .gradha \{\} \;
/usr/bin/find $DIR -type f -exec chmod 440 \{\} \;
</pre>
<p>Algunas cosas a destacar:</p>
<ul class="simple">
<li>DIR es la variable que contiene el directorio destino.</li>
<li>FILE contendrá la ruta a la copia de seguridad del día.</li>
<li>Uso rutas completas para los comandos porque mi cuenta root no
las tiene incluidas en el entorno por defecto. Esto es un
riesgo de seguridad potencial. Idealmente querría compilar <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>
como root y guardar los binarios donde los cree para que nadie
pueda tocarlos.  Y también ejecutar <a class="reference external" href="http://www.tripwire.org/">Tripwire</a> sobre ellos.</li>
<li><a class="reference external" href="http://dar.linux.free.fr/">DAR</a> genera estadísticas tras cada ejecución. No las queremos
en nuestro cron porque generarían emails innecesarios. Sólo
<tt class="docutils literal">stdout</tt> (la salida estándar) es redireccionada a
<tt class="docutils literal">/dev/null</tt>.  Los errores serán mostrados y un email enviado
si algo va mal.</li>
<li>Los últimos dos comandos <tt class="docutils literal">find</tt> son opcionales. Los uso para
cambiar el propietario a un usuario normal, quien creará
posteriormente las copias de seguridad. De nuevo, otro
riesgo de seguridad. El usuario root debería hacer copias
de seguridad como root, y los usuarios deberían realizar sus
propias copias. Pero en un sistema monousuario me da igual.
Si algún intruso es lo suficientemente bueno para atravesar el
cortafuegos y las palabras claves de mis cuentas de usuarios
para poder leer las copias de seguridad, ya la he fastidiado.</li>
</ul>
<p>Ahora ponga el siguiente script casi idéntico para copias de
seguridad diferenciales en <tt class="docutils literal">/root/dar_diff.sh</tt>:</p>
<pre class="literal-block">#!/bin/bash

DIR=/var/backups/system
FILE=${DIR}/`/bin/date -I`_diff
PREV=`/bin/ls $DIR/*.dar|/usr/bin/tail -n 1`
/usr/local/bin/dar -m 256 -y -s 600M -D -R / -c $FILE -Z "*.gz" \
   -Z "*.bz2" -Z "*.zip" -Z "*.png" -P home/gradha -P tmp -P mnt \
   -P dev/pts -P proc -P floppy -P burner -P cdrom \
   -P var/backups -A ${PREV%%.*} &gt; /dev/null
/usr/local/bin/dar -t $FILE &gt; /dev/null
/usr/bin/find $DIR -type f -exec chown .gradha \{\} \;
/usr/bin/find $DIR -type f -exec chmod 440 \{\} \;
</pre>
<p>Los únicos dos cambios son la adición del parámetro <tt class="docutils literal"><span class="pre">-A</span></tt>
y la generación de la variable PREV con una complicada línea
de comando.  Veamos qué es lo que hace esta línea de comando:</p>
<ul class="simple">
<li>Primero el comando <tt class="docutils literal">ls</tt> crea un listado de los ficheros con
la extensión <tt class="docutils literal">.dar</tt> en el directorio de copias de
seguridad. La salida se pasa por una tubería al siguiente
comando.</li>
<li>Por defecto <tt class="docutils literal">ls</tt> muestra los ficheros en orden alfabético.
Usamos <tt class="docutils literal">tail</tt> para obtener el último fichero con el parámetro
<tt class="docutils literal"><span class="pre">-n</span> 1</tt>, el cual hace que sólo se muestre la última línea.</li>
<li><a class="reference external" href="http://dar.linux.free.fr/">DAR</a> quiere operar siempre con nombres de fichero sin número de
trozo o extensión. Esto significa que si no nos deshacemos de
éstas, <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> detendrá la operación para realizar una pregunta
interactiva al usuario, fastidiando toda la automatización.
Separamos el nombre completo del fichero con una característica
de Bash llamada expansión de parámetros. Hay varios tipos de
expansiones posibles, puede teclear <tt class="docutils literal">man bash</tt> para verlas
todas. Aquella que usa <tt class="docutils literal">%%</tt> eliminará el patrón final más
largo que coincida con lo que va tras <tt class="docutils literal">%%</tt>. El resultado es
el nombre base que queremos pasar a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>.</li>
</ul>
<p>Ahora sólo tenemos que poner estos dos scripts bajo cron. Esto
es lo que tenemos que teclear tras <tt class="docutils literal">crontab <span class="pre">-e</span></tt>:</p>
<pre class="literal-block">15 0 2-31 * * ./dar_diff.sh
15 0 1    * * ./dar_backup.sh
</pre>
<p>Puede informarse sobre la sintaxis con <tt class="docutils literal">man <span class="pre">-S</span> 5 crontab</tt>.
En pocas palabras, estas dos líneas le dicen a cron que ejecute
los scripts 15 minutos tras medianoche. <tt class="docutils literal">dar_backup.sh</tt>
se ejecutará sólo el primer día del mes. El otro script se
ejecutará el resto de los días.</p>
<p>Aquí están los scripts de copia de seguridad para sus usuarios.
Son iguales, cambiando únicamente los parámetros del comando <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>
y algunas rutas:</p>
<pre class="literal-block">#!/bin/bash
# dar_backup.sh

DIR=/var/backups/gradha
FILE=${DIR}/`/bin/date -I`_data
# Commands
/usr/local/bin/dar -m 256 -y -s 600M -D -R /home/gradha -c $FILE \
   -Z "*.gz" -Z "*.bz2" -Z "*.zip" -Z "*.png" \
   -P instalacion_manual -P Mail/mail_pa_leer &gt; /dev/null
/usr/local/bin/dar -t $FILE &gt; /dev/null
/usr/bin/find $DIR -type f -exec chmod 400 \{\} \;

#!/bin/bash
# dar_diff.sh

DIR=/var/backups/gradha
FILE=${DIR}/`/bin/date -I`_diff
PREV=`/bin/ls $DIR/*.dar|/usr/bin/tail -n 1`
/usr/local/bin/dar -m 256 -y -s 600M -D -R /home/gradha -c $FILE \
   -Z "*.gz" -Z "*.bz2" -Z "*.zip" -Z "*.zip" \
   -P instalacion_manual -P Mail/mail_pa_leer \
   -A ${PREV%%.*} &gt; /dev/null
/usr/local/bin/dar -t $FILE &gt; /dev/null
/usr/bin/find $DIR -type f -exec chmod 400 \{\} \;
</pre>
<p>No olvide añadir las entradas crontab requeridas por su usuario
apuntando a la ruta adecuada.</p>
</blockquote>
</div>
<div class="section" id="recuperando-su-copia-de-seguridad-desde-cero">
<h1><a class="toc-backref" href="#id8">Recuperando su copia de seguridad desde cero</a></h1>
<blockquote>
<p>Cuando llegue el momento de recuperar su copia de seguridad,
dependiendo de lo que haya guardado tendrá una copia de seguridad
completa del mes más copias de seguridad diferenciales hasta la
última vez que las pudo realizar.  El proceso de recuperación
es muy simple, es el mismo descrito en el primer capítulo (<a class="reference internal" href="#uso-simple-de-dar">Uso
simple de DAR</a>), sólo que debe hacerlo primero con la copia
de seguridad completa, y entonces con las copias de seguridad
diferenciales.  Esto puede ser muy aburrido, así que aquí tiene
otro script que puede guardar junto con sus ficheros de copia
de seguridad:</p>
<pre class="literal-block">#!/bin/bash

if [ -n "$3" ]; then
   CMD="$1"
   INPUT="$2_data"
   FS_ROOT="$3"
   $CMD -x "$INPUT" -w -R "$FS_ROOT"
   for file in ${INPUT:0:8}*_diff*; do
      $CMD -x "${file:0:15}" -w -R "$FS_ROOT"
   done
   echo "All done."
else
   echo "Not enough parameters.

Usage: script dar_location base_full_backup directory

Where dar_location is a path to a working dar binary, base_full_backup
is a date in the format 'YYYY-MM-DD', and directory is the place where
you want to put the restored data, usually '/' when run as root."
fi
</pre>
<p>Este script es auto explicativo. La única cosa por la que debe
preocuparse es el parámetro <tt class="docutils literal"><span class="pre">-w</span></tt>, que le dice a <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> que
sobreescriba los ficheros que encuentre. Esto es necesario para
copias de seguridad diferenciales. Oh, y ponga el script en el
mismo directorio que sus ficheros de copia de seguridad. Aquí
tiene un ejemplo de uso:</p>
<pre class="literal-block">./recover.sh /usr/local/bin/dar 2003-10-01 /tmp/temp_path/
</pre>
<p>Pruebe ejecutar eso como un usuario normal con algunos ficheros
de copias de seguridad. Puede poner el resultado en un directorio
temporal, así que lo bueno es que no necesita borrar su disco
duro para probarlo.</p>
</blockquote>
</div>
<div class="section" id="anadiendo-verificaciones-a-los-scripts">
<h1><a class="toc-backref" href="#id9">Añadiendo verificaciones a los scripts</a></h1>
<blockquote>
<p>Denis Corbin sugiere que los scripts que crean las copias de
seguridad podrían verificar el código de salida del comando
<a class="reference external" href="http://dar.linux.free.fr/">DAR</a>. Para el propósito de estos scripts tan simples esto no
es crítico porque el propio <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> abortará la operación con un
mensaje de error, y cron informará de cualquier salida de error
por email (algo que no ocurre si todo va bien).</p>
<p>No obstante, verificar el código de salida puede ser útil si
está probando los scripts de forma interactiva y quiere saber
qué comandos están siendo ejecutados:</p>
<pre class="literal-block">#!/bin/bash

DIR=/var/backups/system
FILE=${DIR}/`/bin/date -I`_data
# Commands
if /usr/local/bin/dar -m 256 -y -s 600M -D -R / -c $FILE -Z "*.gz" \
      -Z "*.bz2" -Z "*.zip" -Z "*.png" -P home/gradha -P tmp \
      -P mnt -P dev/pts -P proc -P floppy -P burner \
      -P cdrom -P var/backups &gt; /dev/null ; then
   if /usr/local/bin/dar -t $FILE &gt; /dev/null ; then
      echo "Archive created and successfully tested."
   else
      echo "Archive created but test FAILED."
   fi
else
   echo "Archive creating FAILED."
fi
/usr/bin/find $DIR -type f -exec chown .gradha \{\} \;
/usr/bin/find $DIR -type f -exec chmod 440 \{\} \;
</pre>
<p>Puede probar esta versión fácilmente ejecutando el script
y matando el proceso <a class="reference external" href="http://dar.linux.free.fr/">DAR</a> desde otra terminal o consola con
<tt class="docutils literal">killall dar</tt>.  Esto forzará la terminación del proceso <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>
y verá que una de las ramas de error es alcanzada en el script.</p>
<p>Otro posible uso de la verificación del código de retorno del
comando sería borrar archivos incompletos del disco duro si algo
falla, ejecutar comandos externos adicionales si algo falla,
o evitar verificar el archivo creado cuando sabe que el primer
comando falló. Esto último se puede hacer fácilmente concatenando
los comandos de creación y verificación con <tt class="docutils literal">&amp;&amp;</tt> en una sola
línea. Esto le dice a la shell que ejecute ambos comandos como
una secuencia para evitar ejecutar el segundo si el primero falla.</p>
<p>No obstante, si falla la corriente eléctrica durante una copia
de seguridad, esta versión del script todavía dejaría a medio
escribir archivos inválidos. Para prevenir esto podría mejorar el
script para realizar una <em>verificación positiva</em>. Esto significa
crear el fichero de copia de seguridad en un directorio temporal
junto con un fichero <tt class="docutils literal">*.valid</tt> si se alcanza la rama adecuada
del script con éxito.</p>
<p>Continuando esta estrategia, otro script cron monitorizando el
directorio donde se crean los ficheros temporales de copias de
seguridad movería al directorio final aquellos archivos con un
fichero <tt class="docutils literal">*.valid</tt> correspondiente, borrando todos los demás
cuya última fecha de modificación fuese mayor que una hora.</p>
</blockquote>
</div>
<div class="section" id="ideas-para-el-futuro">
<h1><a class="toc-backref" href="#id10">Ideas para el futuro</a></h1>
<blockquote>
<p>No voy a implementar estas pronto, porque soy muy vago, pero si
usted es uno de esos hackers hiper activos, aquí tiene algunas
cosas que estaría bien tener:</p>
<ul>
<li><p class="first">Unificar tanto el script principal como el diferencial en uno,
por lo que si el script se ejecuta y no hay fichero de copia
de seguridad principal para el mes actual, será creado, y de
lo contrario se creará uno diferencia. Útil si su máquina está
apagada por alguna razón durante el día del mes que realiza
la copia de seguridad no diferencial.</p>
</li>
<li><p class="first">Mejorar los scripts para generar una imagen CDROM diaria con
<a class="reference external" href="http://www.fokus.fhg.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html">cdrecord</a> y grabarla automáticamente en un disco regrabable
colocado en su máquina. Por lo que si su disco duro entero
resulta dañado, todavía tiene la última copia de seguridad
en un otro medio de almacenamiento. Por supuesto, esto es
limitado y no puede ser automático si su copia de seguridad
necesita más de un CDROM. Haga lo mismo para ZIP/JAZZ/loquesea.</p>
</li>
<li><p class="first">Integrar las copias de seguridad generadas con una mini
distribución <a class="reference external" href="http://www.knoppix.org/">Knoppix</a> autoarrancable. O cualquier otra
distribución basada en disquetes que puede arrancar desde
CDROM. Así tendría un CDROM de rescate con las herramientas
para formatear su disco duro, y justo al lado una copia de
seguridad fresca con la cual restablecer su máquina a un
estado funcional.</p>
</li>
<li><p class="first">Sincronización de los directorios con copias de seguridad a
través de Internet con máquinas remotas. Así, si su máquina
acaba quemándose físicamente junto con su casa, todavía tiene
copias de seguridad seguras en alguna otra parte. Podría hacerse
de forma sencilla con programas como <a class="reference external" href="http://rsync.samba.org/">rsync</a> funcionando por <a class="reference external" href="http://www.openssh.com/">ssh</a>
como tarea del cron.</p>
</li>
<li><p class="first">Extraer parámetros comunes en un fichero separado e incluirlo
en sus scripts usando el parámetro -B de <a class="reference external" href="http://dar.linux.free.fr/">DAR</a>. Por ejemplo:</p>
<pre class="literal-block">$ cat &gt; /var/backups/system/common.dcf
-m 256 -y -s 600M -D -R / -Z "*.gz" -Z "*.bz2" -Z "*.zip" \
-Z "*.png" -P home/gradha -P tmp -P mnt -P dev/pts \
-P proc -P floppy -P burner -P cdrom -P var/backups
</pre>
<p>Más tarde puede usar esto en el script:</p>
<pre class="literal-block">DIR=/var/backups/system
FILE=${DIR}/`/bin/date -I`_data
# Commands
/usr/local/bin/dar -B ${DIR}/common.dcf -c $FILE &gt; /dev/null
/usr/local/bin/dar -t $FILE &gt; /dev/null
/usr/bin/find $DIR -type f -exec chown .gradha \{\} \;
</pre>
<p>¡Que también puede reusar en la versión diferencial!</p>
</li>
</ul>
<p>De hecho, hay personas listas que han comenzado a hacer scripts
de este estilo para sí mismas y no les asusta compartirlos. Para
evitar engordar este mini-howto, voy a guardarlos <em>tal y como son</em>
en mi página web:
<a class="reference external" href="https://github.com/gradha/dar-differential-backup-mini-howto/tree/master/contrib">https://github.com/gradha/dar-differential-backup-mini-howto/tree/master/contrib</a>.</p>
<p>Sientase libre de enviarme sus propias mejoras y las añadiré
al directorio.  Ya sea un fichero único o un <tt class="docutils literal">.tar.gz</tt> con una
suite de copias de seguridad completa, por favor añada un fichero
simple <tt class="docutils literal">.txt</tt> que pondré al lado del fichero. Por favor use
inglés en su descripción, ¡y no olvide poner su nombre y dirección
de correo para que la gente pueda enviarle correcciones o mejoras!</p>
</blockquote>
</div>
<div class="section" id="el-fin">
<h1><a class="toc-backref" href="#id11">El fin</a></h1>
<blockquote>
Y esa es toda la <em>magia</em>. Si tiene problemas, algo no está claro
o es incorrecto (lo cual es peor), mándeme un email. Si encuentra
este documento útil y quiere traducirlo, mándeme una traducción
del fichero <tt class="docutils literal">source.en.txt</tt> para que pueda distribuirla junto
con esta versión y otros usuarios puedan encontrar fácilmente su
versión traducida. Hablando de localizar, debería ser capaz de
obtener el código fuente de este documento de mi página personal
(enlace <a class="reference internal" href="#dar-differential-backup-mini-howto-es">al comienzo del documento</a>).</blockquote>
<blockquote>
¡Disfrute!</blockquote>
</div>
</div>
</body></html>