Necesito liberar algún software con bastante frecuencia, y el software está contenido como un archivo de disco VMWare, es decir, archivo .vmdk
. Lo que quiero es algún tipo de utilidad de parche y diferencia binaria para hacer que el delta generado sea lo más pequeño posible.Utilidad de parche y diferencia binaria para una imagen de máquina virtual
Respuesta
Permítanme comenzar con enfoques probados, y luego señalar algunos enfoques más recientes.
enfoques que he visto el trabajo con archivos binarios
Hace mucho tiempo, la gente ampliaron las viejas y las nuevas versiones de un archivo binario en los archivos temporales de "texto" (cada byte ampliado a 3 bytes: 2 dígitos hexadecimales y una nueva línea). Luego ejecute estos dos archivos de "texto" a través de una versión anterior de "diff" (que definitivamente no podría manejar archivos binarios) para crear un archivo de parche. Luego transmitimos ese archivo de parche de "texto" a través de líneas de comunicación que aún no tenían 8 bits de limpieza. En el extremo de recepción, uno expandió el archivo binario antiguo en una versión de texto temporal, luego parchó ese archivo de texto anterior y luego comprimió el nuevo archivo de texto en un archivo binario (comprimiendo cada par de dígitos hexadecimales en un byte y lanzando de distancia de las nuevas líneas y de cualquier retorno de carro que pueda haberse arrastrado).
Más recientemente, he estado usando rsync (o alguna utilidad incorporada encima como Unison). Maneja archivos binarios arbitrarios muy bien. Generalmente hago una actualización en vivo, con Unison ejecutándose en mi máquina local y rsync ejecutándose en el servidor de archivos, conversando entre sí.
No importa cómo se genere un archivo de parche, puede utilizar cualquier utilidad de compresión de datos para comprimir ese archivo.
enfoques que, por lo que yo sé, se debe trabajar con archivos binarios
StackOverflow: "how to crate a PATCH file for the binary difference output file" sugiere el uso bsdiff.
Otro StackOverflow question implica que "vimdiff" parece manejar bytes arbitrariamente de forma adecuada.
StackOverflow: "Useful Binary Diff Tool" menciona algunas otras herramientas de diferencias binarias.
Escuché que algunas herramientas basadas en rsync - "rdiff" y "rdiff-backup" y "duplicity" - le permiten crear un archivo de parche. Luego, una persona que recibe ese archivo de parche puede usarlo para actualizar su antiguo archivo binario a un nuevo archivo binario.
Wikipedia claims que las versiones recientes de las utilidades estándar "diff" y "parche" admiten archivos binarios. ¿Has probado eso?
investigación de vanguardia en la compresión de archivos ejecutables
Si usted está interesado en la investigación de vanguardia en hacer que el archivo delta tan pequeño como sea posible cuando se actualizan los archivos ejecutables, usted querrá echa un vistazo a "How Courgette works" por Stephen Adams 2009 en The Chromium Projects.
Entre otras cosas, la computadora que recibe el parche "desmonta" la aplicación anterior, convirtiendo todas las direcciones y compensaciones absolutas en símbolos; luego parchea el código desmontado; luego "vuelve a ensamblar" el código parcheado en la nueva versión de la aplicación.
Probar xdelta.
Estaba buscando algunas herramientas de diferencias binarias para archivos muy grandes (un volumen lógico LVM y sus instantáneas, porque LVM aún no admite la instantánea de la instantánea) y xdelta funciona para mí.
- 1. Utilidad de parche gráfica
- 2. ¿Cómo funciona una máquina virtual?
- 3. Única máquina virtual
- 4. Aceleración de máquina virtual para Android Emulator
- 5. Cómo escribir una máquina virtual
- 6. ¿El estándar C++ requiere una máquina binaria?
- 7. diferencia entre una función virtual y una función virtual pura
- 8. de código abierto máquina virtual
- 9. Una máquina virtual para C++ para optimizar el rendimiento
- 10. Eliminar el ruido de una imagen binaria
- 11. Cygwin vs Linux ¿Máquina virtual para desarrollo?
- 12. KVM api para iniciar la máquina virtual
- 13. ¿Crear una imagen de máquina virtual como un artefacto de integración continua?
- 14. Encuesta: ¿compilar servidor en una máquina virtual?
- 15. ¿PHP tiene una máquina virtual como Java?
- 16. Cómo cambio el nombre de una máquina virtual de SharePoint
- 17. Cómo crear un archivo PATCH para el archivo de salida de diferencia binaria
- 18. Endianness de la máquina virtual de Java
- 19. Identificación de CPU en la máquina virtual
- 20. Actualización de VirtualBox trashed mi máquina virtual
- 21. Diferencia entre archivos de parche y de diff
- 22. Escribir una máquina virtual - ¿código de bytes bien formado?
- 23. ¿Usar una máquina virtual dentro de un juego?
- 24. Emulador AS400 o máquina virtual
- 25. Conectando a una máquina virtual de Vagrant externamente
- 26. mover una máquina virtual de un vCenter a otro vCenter
- 27. Segmentación de formas circulares de Imagen binaria
- 28. CUDA/OpenCL dentro de una máquina virtual/hipervisor
- 29. Uso de integración continua para implementar en una máquina virtual para ejecutar pruebas de integración
- 30. Diferencia entre las clases de utilidad y auxiliar
Muchas gracias por su amable explicación, David. Para mi problema, xdelta se convirtió en mi elección después de varios experimentos. – tianyapiaozi