Dif / parche binario para archivos grandes en Linux?

10

Tengo dos imágenes de partición (A y B) y quiero usarlas para crear un parche que pueda aplicar en A en otra computadora para obtener la nueva imagen B sin inundar la red. Tengo los siguientes requisitos:

  • funciona en Linux
  • puede crear diferencias
  • puede usar diffs para parchear archivos
  • puede manejar archivos binarios
  • puede manejar archivos grandes (algunos cientos de GB deberían funcionar)
  • no requiere interacción del usuario (solo una aplicación de consola)
  • idealmente, debería poder leer / escribir en tuberías (para poder canalizar desde un archivo comprimido con gzip y escribir en uno)

Algo como eso existe?

thejh
fuente

Respuestas:

12

Probablemente debería echar un vistazo a las herramientas relacionadas con rsync: rdiff y rdiff-backup . El rdiffcomando le permite producir un archivo de parche y aplicarlo a otro archivo.

El rdiff-backupcomando utiliza este enfoque para tratar directorios completos, pero supongo que está trabajando con imágenes de disco de un solo archivo, por rdifflo que será el que se utilizará.

njd
fuente
¿Qué significa "firma" y "delta" para rdiff? La página del manual no dice.
Tor Klingberg
1
Para responder mi propia pregunta, crear un delta con rdiff es un proceso de dos pasos. Primero cree un archivo de firma del archivo anterior, luego use la firma y el archivo nuevo para crear el delta. Se pueden ejecutar junto conrdiff signature oldfile | rdiff delta - newfile deltafile
Tor Klingberg
7

xdelta puede hacer todo lo que quieras. Sin embargo, una advertencia justa, si sus imágenes no son muy similares, puede terminar con un parche muy grande, porque xdelta usa la mitad del búfer de memoria definido para encontrar diferencias. Hay más información disponible en la página wiki TuningMemoryBudget . Aumentar el tamaño del búfer puede ayudar bastante.

bsdiff es otra opción, pero requiere mucha RAM y es completamente inapropiado para cualquier cosa del tamaño de una imagen de disco.

bsdiff tiene mucha memoria. Requiere max(17*n,9*n+m)+O(1)bytes de memoria, donde nes el tamaño del archivo antiguo y mel tamaño del archivo nuevo. bspatch requiere n+m+O(1)bytes.

afrazier
fuente
1

JDIFF es un programa que genera las diferencias entre dos archivos (binarios).

totti
fuente