Cómo editar imágenes ISO (incluidas las ISO de arranque)

30

Estoy buscando herramientas para Ubuntu que puedan usarse para EDITAR imágenes ISO. Incluyendo imágenes ISO que son arrancables como Ubuntu y Windows ISO. No solo edita, sino que guarda el ISO editado y aún puede arrancar cuando se graba en una unidad USB o CD / DVD.

Luis Alvarado
fuente

Respuestas:

42

Maestro ISO instalar isomaster

He usado ISO Master para agregar archivos a ISO antes. Es adecuado para lo que necesita porque conserva el estado de si el ISO es o no arrancable. Lo he usado en el pasado para agregar otro contenido (como música) a un disco en vivo. Sin embargo, tenga en cuenta que después de realizar cambios en un archivo ISO, solo puede "Guardar como", es decir, se creará otro archivo ISO, así que asegúrese de tener suficiente espacio en disco para ambos.

isomaster

dv3500ea
fuente
2

PowerISO acaba de lanzar una versión de Linux de su software de edición ISO. Al igual que ISO Master , conserva el estado de si el ISO es o no arrancable. Sin embargo, le permite guardar directamente en el archivo original (eliminándolo primero), por lo que no es necesario tener suficiente espacio en disco para ambos archivos. También encuentro que su interfaz es más fácil y más intuitiva de usar que ISO Master.

captura de pantalla de PowerISO para Linux

Ploni
fuente
1

La respuesta común a esto es desempaquetar el archivo iso, modificarlo y empacarlo nuevamente. Parece que "ISO Master", como se menciona en la respuesta de dv3500ea, es un buen front-end para hacer eso.

Si:

  • no tienes suficiente espacio para eso
  • solo desea hacer una modificación quirúrgica en lugar de reescribir todo
  • desea modificar un dispositivo de almacenamiento que contiene un sistema de archivos isofs (también conocido como iso9660) sin copiar todo el dispositivo, o
  • si crees que esto de desempacar / reempacar no es lo suficientemente hacky

¡Entonces esta respuesta es para ti!

En resumen, reemplazaremos un archivo existente en el sistema de archivos isofs con nuestro archivo deseado. Nuestro archivo deseado debe ser más pequeño que el archivo existente (destino), y los espacios en blanco finales (o basura) deben ser aceptables. En realidad, esto solo requiere dos comandos, pero tenga cuidado: un error tipográfico puede destruir el sistema de archivos de destino por completo o incluso sobrescribir el archivo de origen. ¡Las copias de seguridad son tu amigo!

En mi caso, quería almacenar un script en un arranque en vivo para no tener que volver a escribirlo cada vez. El script está en script.pyy mi objetivo (una memoria USB) está en /dev/sdc. El tamaño del script es de 202 bytes, por lo que nuestro primer paso es encontrar un archivo de más de 202 bytes para poder sobrescribirlo. Después de montarlo en /mnt, encontré un archivo adecuado en /mnt/info.txt.

No podemos simplemente sobrescribir info.txten el punto de montaje, se quejará de que es un sistema de archivos de solo lectura. Sin embargo, somos root, ¡así que demostrémosles lo que eso significa! Necesitamos averiguar dónde info.txtestá el sistema de archivos. Busque alguna cadena que sea (probablemente) exclusiva de info.txt, por ejemplo This is the official distribution CD of X., y búsquela en el disco:

$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]

Por otra parte, esto también se puede hacer con grep, que es mucho más rápido, pero entonces deberá especificar desde el principio: $ sudo grep -oba 'This is ...' /dev/sdc.

Ahora que sabemos dónde está, solo necesitamos reemplazar esos bytes con nuestro archivo:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202

Esta línea:

  • copia bytes del archivo de entrada ( if) al archivo de salida ( of), y no le importa que el archivo de salida sea en realidad un dispositivo, porque "todo es un archivo".
  • conv=notrunc le dice que no trunque el archivo de salida, porque solo queremos sobrescribir unos pocos bytes, no sobrescribir el archivo desde cierto punto en adelante.
  • bs=1 establece el tamaño del bloque en 1. Por lo general, desea un tamaño de bloque de 4k o superior, pero esto evita tener que hacer cálculos matemáticos (en línea) y nos permite especificar la ubicación exacta al byte.
  • seek=Nbusca un cierto punto en el archivo de salida (tenga en cuenta que seek=Nes diferente de skip=Nporque skipomite bytes del archivo de entrada). Lo configuramos, por supuesto, donde está el texto de destino.
  • count=Ncopie solo esta cantidad de bytes. Creo que esto se puede omitir porque notará el final del archivo de entrada, pero lo dejé solo para estar seguro.

Y listo, ¡el archivo se sobrescribe!

Pero espere, el archivo de destino era más grande que nuestro script, por lo que en la memoria USB, el archivo ahora es algo así como: "while do if run () blah; blah (); yright 2007 X Inc.". Hay basura detrás. Hay dos formas de solucionar esto: alargar nuestro archivo de entrada (agregar espacios) o agregar un símbolo de comentario al final. Tenga en cuenta que muchos editores agregan una nueva línea al final, por lo que es posible que desee establecerlos count=en N-1bytes (si su archivo ahora tiene 203 bytes y nota que el último byte es una nueva línea, establezca el número en 202). Puede verificar un archivo en busca de nuevas líneas utilizando xxd script.py | taily verificando si el último byte es 0a(o, en casos extraños 0d).

El proceso es idéntico para un .isoarchivo, solo reemplace mentalmente /dev/sdccon your.iso.

Tenga en cuenta que cuando verifica el objetivo en su punto de montaje para ver si funcionó, es posible que deba usarlo stringsnuevamente (esta vez buscando su secuencia de comandos) ya que el archivo probablemente todavía esté en la memoria caché de lectura.

Luc
fuente