Copia de seguridad incremental con 7zip

Respuestas:

11

Debe ser simple, use esto para crear y actualizar gradualmente el archivo:

7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}

Esta página ofrece una referencia para las opciones de actualización.

Se traducen de la siguiente manera:

  • p0 - Si "El archivo existe en el archivo, pero no coincide con el comodín", elimine el archivo del archivo.
  • q3- Si "El archivo existe en el archivo, pero no existe en el disco", elimine el archivo del archivo y elimínelo del sistema de archivos al extraerlo .
  • r2 - Si "El archivo no existe en el archivo, pero existe en el disco", empaque el archivo en el archivo.
  • x2 - Si "El archivo en el archivo es más nuevo que el archivo en el disco", empaque el archivo anterior en el archivo.
  • y2 - Si "El archivo en el archivo es más antiguo que el archivo en el disco", empaque el archivo más nuevo en el archivo.
  • z1 - Si "Archivo en archivo es el mismo que el archivo en disco", reutilice la versión empaquetada del archivo.
  • w2 - Si el tamaño del archivo es diferente, empaque el archivo modificado en el archivo.
ArtemGr
fuente
Hola, ¿qué significan esas muchas opciones?
Zhianc
Es un mapa de un estado de archivo a una acción. Hay siete estados posibles.
ArtemGr
3
No es una copia de seguridad incremental. Este comando realiza una copia de seguridad diferencial y crea un nuevo archivo con cambios desde la última copia de seguridad completa. La copia de seguridad incremental rastrea los cambios desde la copia de seguridad incremental anterior (diferencia de diferencia)
stil
Creo que esto es simplemente incorrecto, ya que solo actualiza el archivo.7z para que sea casi lo mismo que simplemente crear un nuevo archivo, pero un poco más rápido ya que se reutilizará. La respuesta de Javier a continuación parece ser un diferencial.
Aplicable el
Cuando el archivo es grande y los incrementos son pequeños, el " bit más rápido " es bastante sustancial. No reempacar todo el archivo es uno de los puntos de las copias de seguridad incrementales. Además, esto no es una copia de seguridad diferencial: estamos actualizando el archivo principal y no almacenando la diferencia en un archivo separado. Si le gustan más las otras soluciones, siéntase libre de votarlas, hay más de una forma de pelar a un gato.
ArtemGr
8

Si tuviera que hacer una copia de seguridad incremental , necesitaría proporcionar 7-zip con la lista de los archivos modificados (con -i@fileList), y necesitaría elaborar dicha lista de alguna manera. En el espejo de archive.org de la pregunta eliminada Copia de seguridad incremental fuera de línea a través de la unidad de disco , puede encontrar una línea de comandos de Unix usando firmas md5 para crear la lista de archivos.

La operación de actualización 7-zip permite crear un archivo secundario con las diferencias (incluidos los archivos eliminados) que se producen desde el archivo base / primario. Eso se denomina correctamente una copia de seguridad diferencial (como se indica en la pregunta en sí).

Encontré un excelente artículo sobre este tema en WPCTips "Copias de seguridad diferenciales con 7-zip" (archivado) . Recomiendan usar un programa GUI (Toucan) o usar esta receta para la línea de comando:

7z u {base archive.7z} -u- -"up0q3r2x2y2z0w2!{differential.7z}" {folder to archive}

Esto es un poco diferente de lo 7zr u -up0q3r2x2y2z1w2 {archive}.7z {path}propuesto por ArtemGr:

  • -u- dice que el archivo principal no debe modificarse
  • "-up0q3r2x2y2z0w2!{differential.7z}"especifica el archivo diferencial de destino y qué acción hacer para cada archivo para cada condición / estado: agregar archivos nuevos o modificados en el sistema de archivos, eliminar archivos que solo están en el archivo 7zip, ignorar el resto.
    Tenga en cuenta que el "!" el carácter será interceptado a bashmenos que se cite.

En caso de que tenga curiosidad sobre los detalles de esa críptica p0q3r2x2y2z0w2

<state> | State condition
p | File exists in archive, but is not matched with wildcard.   Exists, but is   not matched 
q | File exists in archive, but doesn't exist on disk.
r | File doesn't exist in archive, but exists on disk.
x | File in archive is newer than the file on disk.
y | File in archive is older than the file on disk.
z | File in archive is same as the file on disk
w | Can not be detected what file is newer (times are the same, sizes are different)

<action> | Description 
0 | Ignore file (don't create item in new archive for this file) 
1 | Copy file (copy from old archive to new) 
2 | Compress (compress file from disk to new archive) 
3 | Create Anti-item (item that will delete file or directory during extracting). This feature is supported only in 7z format. 
Javier
fuente
2
Gracias por la respuesta Javier, y bienvenido a Super User. Aquí hay una política de resumir enlaces en caso de que desaparezcan. ¿Podría explicar cómo el comando logra la copia de seguridad incremental? (¡particularmente la up0q3r2x2y2z0w2parte!) Gracias :-)
bertieb
1
@bertieb gracias por tu consejo. Espero que esté más claro ahora.
Javier
1
@DanielSokolowski No estoy seguro si esto responde a su pregunta. Si realizó una copia de seguridad incremental (A + b + c + d), tendrá que extraer de cada archivo en el orden en que los realizó. Si realizó una copia de seguridad diferencial (A + (b + c + d)). Son 2 archivos que debes extraer. Sería bueno que el último archivo contuviera información sobre archivos anteriores y el orden de extracción, por lo que la extracción podría realizarse con un solo comando. Pero no estoy al tanto de tal característica.
Javier
1
Artículo compartes hace @Javier no abierta
Alper
1
Gracias @alper. Archive.org tiene una instantánea del extinto artículo WPC Tips en web.archive.org/web/20160822111118/http://www.wpctips.com:80/… . Supongo que tendré que enmendar la respuesta.
Javier
4

Puede hacer fácilmente una copia de seguridad incremental cambiando la dirección en el tiempo. es decir, siempre conserva la última copia de seguridad como copia completa y mantiene los archivos diferenciales en el pasado.

# create the difference step into the past
7z u {base archive.7z} {folder to archive} -mx=9 -u- -up1q1r3x1y1z0w1!{decrement.7z}

# update the Archive to the latest files
7z u {base archive.7z} {folder to archive} -mx=9 -up0q0x2

El Archivo base siempre contiene la última versión y, al aplicar los "decrementos" paso a paso, puede recrear versiones anteriores. Con un poco de secuencia de comandos, puede aplicar la numeración correcta a los archivos decrementales.

iligido
fuente
¿Puedes explicarlo amablemente? Me encantaría ver un ejemplo de creación de una copia de seguridad actual, copia de seguridad hace 1 día, copia de seguridad hace 2 días. Y luego un ejemplo de restauración de la copia de seguridad 'hace 2 días'.
Daniel Sokolowski el
0

En un archivo por lotes, con enabledelayedexpansion, debe citar "!" con dos ^^ como este

7z u {existing archive.7z} -u- -up0q3r2x2y2z0w2^^!{new differential.7z} {folder or files to archive}

Me tomó un tiempo ver eso.

Manejable
fuente