[Solucionado] Copia de seguridad incremental con tar

Imagen de matake
0 puntos

Hola,

Aunque he visto cosas que parecen tratar el mismo asunto ninguna no habla de mi problema asi que lo voy a planterar aqui.

1. Me gustaria saber, si hay alguna opcion de crear un multivolumen tar pero local no en cintas o medios extraibles.

Es decir que al llegar a un limite ( 1GB por ej ) poder hacer de alguna manera que empieza otro archivo añadiendo algun sufijo o prefijo cresciendo ( Ej 01.tar, 02.tar, ... 0n.tar )

He intentado con la opcion --tape-length 10000 ( para splitar al 10 Megas )
pero el programa pide cambio de medios de copia ( cintas etc ) y si continuas sobrescribe el primer archivo ya creado.

Tambien he intentado --multi-volume pero a este no se le puede decir el tamaño, esta opcion parece que espera a que no hay mas espacio para pedir que pasas a otro disco

Al final he intentado tambien hacerlo con el programa "split" (despues de hacer el archivo tar dividirlo con "split") pero aunque funciono, no mes sirviria porque si con 20 Megas de datos, para que los divide en solo dos trozos, tarda tanto ... si intentare split-ear 15 GB por ej, sera una eternidad.

2. Para la copia incremental he empleado la opcion --newer <año-mes-día>

la hora por defecto es 00:00:00 del respectivo dia

¿Alguien sabe de que manera se puede condicionar (cambiar) tambien la hora de creacion del archivo?

Es decir añadir archivos creados a partir de tal dia y tal hora ?

Gracias

Imagen de sansatan
+1
0
-1

Probablemente nadie se ha preocupado de poner esa opción en tar porque es fácil de hacer con otro comando:

man split 

Un ejemplo desde mi consola:

$ ls -l
-rw-r--r-- 1 nemesis users 40878080 2007-12-14 13:43 ejemplo_archivo.tar.bz2

$ split -d -b 10000000 ejemplo_archivo.tar.bz2 prefijo_partes_

$ls -l
-rw-r--r-- 1 nemesis users 40878080 2007-12-14 13:43 ejemplo_archivo.tar.bz2
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_00
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_01
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_02
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_03
-rw-r--r-- 1 nemesis users 878080 2007-12-14 13:49 prefijo_partes_04

$ cat prefijo_partes_00 >> archivo_reconstruido.tar.bz2

$ cat prefijo_partes_01 >> archivo_reconstruido.tar.bz2

$ cat prefijo_partes_02 >> archivo_reconstruido.tar.bz2

$ cat prefijo_partes_03 >> archivo_reconstruido.tar.bz2

$ cat prefijo_partes_04 >> archivo_reconstruido.tar.bz2

$ ls -l
total 120132
-rw-r--r-- 1 nemesis users 40878080 2007-12-14 13:51 archivo_reconstruido.tar.bz2
-rw-r--r-- 1 nemesis users 40878080 2007-12-14 13:43 ejemplo_archivo.tar.bz2
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_00
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_01
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_02
-rw-r--r-- 1 nemesis users 10000000 2007-12-14 13:49 prefijo_partes_03
-rw-r--r-- 1 nemesis users 878080 2007-12-14 13:49 prefijo_partes_04

 

La sucesión de cat puedes hacerla de una vez con:

$ for i in prefijo_partes_00 prefijo_partes_01 prefijo_partes_02 prefijo_partes_03 prefijo_partes_04 ; do cat $i >> archivo_reconstruido.tar.bz2; done

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de matake
+1
0
-1

Hola sansatan,

Gracias por responder pero esto no me resuelve nada ( creo que no habias visto que esto (el split) ya he dicho que lo he probado.

Se tarda bastante tiempo (me parece que mucho mas del doble de tiempo) en hacer primero el tar y luego volver a "cortarlo" cuando si se podria hacer bien desde el principio.

Con el tar seria solo aumentarle un numero en el prefijo-sufijo del nuevo trozo ( ya que veo que tar lleva implementado esto de escribir en varios medios )

Bueno si es asi y que tar no lleva implementado esto, lo considero bastante mal.

En mi caso prefiero hacerlo manualmente que esperar a recortar con split

Es decir utilizar :

$ tar -cf ../mi_archivo.tar * --tape-length 1000000 --exclude cosa_a_excluir

Y cuando me pide cambiar la cinta ( al alcanzar 1 GB del --tape-length ) cambio manualmente el nombre de mi_archivo.tar en mi_archivo_00.tar

Al darle ENTER el tar me crea otro archivo mi_archivo.tar ( creyendo que esta en otra cinta ) hasta alcanzar de nuevo 1 GB etc. etc

Pero esto seria "ENGAÑAR" a tar por esto me habria gustado si alguien sabe si hay alguna opcion para hacer esto de verdad.

Saludos

+1
0
-1
Imagen de slap
+1
0
-1

Hola.
En esta sección del manual de tar hay un ejemplo de cómo usar un script para el renombrado de los volúmenes.

... For example, the following volume script will create a series of archive files, named ‘archive-vol’, where archive is the name of the archive being created (as given by ‘--file’ option) and vol is the ordinal number of the archive being created ...

En cuanto a las copias incrementales, yo uso la opción: --listed-incremental=archivo y tar se encarga de añadir sólo lo que ha cambiado desde la última copia.

Saludos.
slap

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de brunov
+1
0
-1

Yo estoy usando backup-manager (sudo apt-get install backup-manager). Es una aplicación sin GUI, muy sencilla de usar y muy flexible. simplemente hay que instalarla y luego editar un único archivo de configuración (que es muy simple y es auto-explicatorio) para tener backups automáticos de los directorios que quieras. Tiene la opción de hacer backups incrementales, podés explicitar que limpie los backups de edad mayor a  X días (para tener una "ventana" de backup que no ocupe demasiado espacio). Podés partir (slice) el backup en archivos de tamaño arbitrario (esto únicamente si elegís "dar" como formato de archivo comprimido en lugar de .tar, .tar.gz o .zip) y decir que te los suba a un sitio FTP o los grabe en un CD o DVD.

Quizás valga la pena que lo pruebes. Te recomiendo también bajar el manual (sudo apt-get install backup-manager-doc), viene en formato html muy fácil de leer. Es corto. 

+1
0
-1
Imagen de EnriqueK
+1
0
-1

Espero sirva este tutorial que hace referencia al comando dar

http://manualinux.freezoka.com/dar.html 

+1
0
-1
Imagen de krader
+1
0
-1

He estado trasteando con el tar y otras aplicaciones para hacer lo mismo que tu querías (encontré esta entrada buscando información), y he conseguido dar con la solución: como bien se ha dicho, tar no incluye la opción de dividir de forma automática un archivo, porque para ello existen otras alternativas, como split. Aún así, si que permite hacer multivolúmenes, pero indicando el nombre de todos ellos (aún sin saber cuanto nos ocupará), y sin poder comprimirlo con gzip o bzip. Pues bien, la solución consiste en usar tar+split (comprimir) y cat+tar (descomprimir), pero no por separado, sino de forma conjunta y en paralelo (mediante concatenación). A continuación te indico los comandos:

tar -cvz [ARCHIVO/s] | split -b NUMBYTES -d - NOMBREBASE

Como ves, se usa primero el comando tar normal, en mi caso con la opción -z para comprimir con gzip, y se termina con el carácter de concatenación |, sin poner el archivo final. De esta forma, según se va creando el archivo comprimido, se va pasando a split para que lo divida (recordar que concatenar significa pasar la salida estándar de un comando a la entrada estándar de otro).

Para hacer el proceso inverso, se hace de la misma forma:

cat NOMBREBASE* | tar -xzv

Como los archivos creados por split, del estilo NOMBREBASE01, NOMBREBASE02... (o NOMBREBASEaaa... en caso de no haber usado la opción -d) están ordenados alfabéticamente, el shell deunix/linux los ejecutará en orden. Por lo tanto, lo que se hace es ir pasando el contenido de cada parte al tar para su descompresión, en paralelo.

Lo he comprobado varias veces, con diferentes tamaños, y funciona perfectamente. Espero que te haya solucionado tu duda, yo por lo menos es lo que andaba buscando para pasar todos mis datos al disco duro externo fat32 para poder formatear el ordenador, sin perder permisos, nombres de archivo, etc...


Acer Aspire 5630 + Kubuntu 7.10

+1
0
-1

 


Ahora: Acer Aspire 5630 + Ubuntu 8.04
Antes:  Mandrake -> Gentoo 2004 -> Ubuntu 6.10 -> Kubuntu 7.04 -> Kubuntu 7.10 -> Ubuntu 8.04

 

 

 

Imagen de sansatan
+1
0
-1

Gracias krader, estaba delante de las narices y no nos dimos cuenta. 

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de matake
+1
0
-1

Hola,

Soy el que ha abierto este hilo.

Aunque agradezco a todos los que han aportado algo para resolver este asunto y aunque todos los aportes son correctos … después de analizar y probar todas las propuestas … Para mi la mejor solución ha sido la del amigo EnriqueK : emplear el programa “dar”

Ejemplo:


dar -c [archivo_a_crear] -s [tamaño_trozo(En MB)] -X [Fichero(s)_a_excluir] -y9 -Z [Fichero(s)] 

Una vez llegado al valor establecido para la opcion "-s"  el programa crea otro fichero automaticamente añadiendole un sufijo
El "-y9" significa el nivel de compresion de 1 a 9
Los ficheros con la opcion "-Z" del final, no seran comprimidos ( para *.jpg *.mp3 ...etc )

Un GigaBite de datos comprimidos con compresion 9 son +- 300-400 Mb

Tarda casi parecido como tar+bz y el corte en trozos es instantaneo (no tan lento como el del split que ya he dicho desde el principio que lo he probado y no me gustaba el hecho que se tarda el doble en hacer la misma cosa  ... Imaginense si spliteamos 20 GB .)

  Y esto es solo un pequeño ejemplo de lo poderoso que puede ser este programa ( para mi desconocido hasta ahora ) que se llama "dar"  

Mas informacion en http://manualinux.freezoka.com/dar.html 

Saludos a todos y gracias

P.D 

Aunque doy por solucionado este asunto, nuevos aportes y mejoras seran bienvenidos.

 

+1
0
-1
Imagen de sansatan
+1
0
-1

Creo que con la solución de usar el pipe no se tarda más tiempo, cosa que sí ocurre si creas primero el tar.gz y luego usas split.

Cuando tar deja el tamaño que especifiques en el pipe, split crea el archivo directamente. No hay sobrecoste de tiempo.

A falta de un benchmark fiable, no creo que dar pueda ser mucho más rápido, aunque en cualquier caso es también una excelente opción.

Si haces la prueba y resulta que sí hay sobrecoste, no dudes en comentárnoslo. 

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de matake
+1
0
-1

El hecho de usar el "pipe" no añade velocidad

Primero se ejecuta el "tar" y luego, cuando el "tar" termina, lo pasa (por el "pipe") al "split" ( igual que manualmente )

No tengo nada personalmente en contra del "split" pero tarda mas que "tar+bz" juntos. 

O sea el doble de trabajo cuando el hecho de cortar y empezar un nuevo archivo dura, con las otras opciones ("dar" y/o el "script del tar" para nuevo volumen) un segundo como mucho !!!

El ejemplo concreto del amigo  krader

tar -cvz [ARCHIVO/s] | split -b NUMBYTES -d - NOMBREBASE 

seria EXACTAMENTE asi con "dar"

dar -cv [ARCHIVO] -s [NRMBYTES] -y 

Como se obseva incluso el comando es mas corto ADEMAS con "split" se tarda doble de tiempo ( si empleamos como ejemplo unos 10 GB de datos divididos en tamaño de un DVD )

 

Pero bueno, cada uno es libre de usar lo que quiera 

Saludos

P.D.

Como ya he dicho anteriormente se agradece cualquier aporte  sobre el tema

+1
0
-1
Imagen de sansatan
+1
0
-1

Vamos a ver si nos aclaramos:

1.- No tengo nada en contra de dar, parece potente. Puede ser más rápido y eficaz, no tengo nada que hablar sobre ello.

2.-  Sí que se ahorra tiempo al usar el pipe. Lo acabo de comprobar en mi consola con un archivo de 317 MB que comprimo y divido en fragmentos de 100 MB:

> time tar -cvzf doc.tgz doc
doc

real    0m48.226s
user    0m36.546s
sys     0m3.052s

> time split -b 100000000 -d doc.tgz basename

real    0m24.384s
user    0m0.052s
sys     0m1.604s

> rm basename*

> time tar -cvz doc | split -b 100000000 -d - basename
doc

real    0m51.670s
user    0m35.862s
sys     0m5.092s

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.