Come modificare le immagini ISO (compresi gli ISO avviabili)


30

Sto cercando strumenti per Ubuntu che possano essere utilizzati per MODIFICARE le immagini ISO. Comprese immagini ISO che sono avviabili come Ubuntu e Windows ISO. Non solo modifica, ma salva l'ISO modificato e può ancora avviarsi quando masterizzato su un'unità USB o CD / DVD.

Risposte:


42

Maestro ISO installa isomaster

Ho usato ISO Master per aggiungere file agli ISO prima. È adatto a ciò di cui hai bisogno perché mantiene lo stato di avvio o meno dell'ISO. L'ho usato in passato per aggiungere altri contenuti (come la musica) a un disco live. Si noti, tuttavia, che dopo aver apportato modifiche a un file ISO, è possibile solo "Salva con nome", ovvero verrà creato un altro file ISO, quindi assicurarsi di disporre di spazio su disco sufficiente per entrambi.

isomaster


2

PowerISO ha appena rilasciato una versione Linux del proprio software di editing ISO. Come ISO Master , mantiene lo stato di avvio o meno dell'ISO. Tuttavia, consente di salvare direttamente nel file originale (eliminandolo prima), quindi non è necessario disporre di spazio su disco sufficiente per entrambi i file. Trovo anche che la sua interfaccia sia più semplice e intuitiva da usare rispetto a ISO Master.

screenshot di PowerISO per Linux


1

La risposta comune a questo è decomprimere il file ISO, modificarlo e imballarlo di nuovo. Sembra che "ISO Master", come menzionato nella risposta di dv3500ea, sia un buon front-end per farlo.

Se:

  • non hai abbastanza spazio per quello
  • vuoi solo fare una modifica chirurgica invece di riscrivere il tutto
  • si desidera modificare un dispositivo di archiviazione che contiene un filesystem isofs (aka iso9660) senza copiare l'intero dispositivo, oppure
  • se pensi che questa cosa di disimballaggio / reimballaggio non sia abbastanza confusa

Quindi questa risposta è per te!

In breve, sostituiremo un file esistente nel filesystem isofs con il nostro file desiderato. Il nostro file desiderato deve essere più piccolo del file esistente (di destinazione) e gli spazi vuoti finali (o immondizia) devono essere accettabili. Questo in realtà richiede solo due comandi, ma fai attenzione: un errore di battitura può distruggere completamente il file system di destinazione o persino sovrascrivere il file di origine. I backup sono i tuoi amici!

Nel mio caso, volevo archiviare uno script in un avvio live in modo da non doverlo digitare nuovamente ogni volta. Lo script è a script.pye il mio target (una chiavetta USB) è a /dev/sdc. La dimensione dello script è di 202 byte, quindi il nostro primo passo è trovare un file più grande di 202 byte, in modo da poterlo sovrascrivere. Dopo averlo montato su /mnt, ho trovato un file adatto su /mnt/info.txt.

Non possiamo semplicemente sovrascrivere info.txtsul mountpoint, ci si lamenterà che è un filesystem di sola lettura. Siamo root, però, quindi mostriamo loro cosa significa! Dobbiamo capire dove si info.txttrova il filesystem. Trova una stringa che è (probabilmente) unica per info.txt, per esempio This is the official distribution CD of X., e cercala sul 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 [...]

In alternativa, questo può essere fatto anche con grep, che è molto più veloce, ma poi è necessario specificare fin dall'inizio: $ sudo grep -oba 'This is ...' /dev/sdc.

Ora che sappiamo dove si trova, dobbiamo solo sostituire quei byte con il nostro file:

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

Questa linea:

  • copia i byte dal file di input ( if) nel file di output ( of) e non importa che il file di output sia effettivamente un dispositivo, perché "tutto è un file".
  • conv=notrunc gli dice di non troncare il file di output, perché vogliamo sovrascrivere solo pochi byte, non sovrascrivere il file da un certo punto in poi.
  • bs=1 imposta la dimensione del blocco su 1. Di solito si desidera una dimensione del blocco di 4k o superiore, ma questo evita entrambi di fare matematica (inline) e ci consente di specificare la posizione esatta del byte.
  • seek=Ncerca un certo punto nel file di output (nota che seek=Nè diverso skip=Nperché skipsalta i byte dal file di input!). Lo impostiamo, ovviamente, su dove si trova il testo di destinazione.
  • count=Ncopia solo così tanti byte. Penso che questo possa essere omesso perché noterà la fine del file di input, ma l'ho lasciato solo per essere sicuro.

E voilà, il file viene sovrascritto!

Ma aspetta, il file di destinazione era più grande del nostro script, quindi sulla chiavetta USB, il file ora è qualcosa del tipo: "while do if run () blah; blah (); yright 2007 X Inc.". C'è immondizia residua. Due modi per risolvere questo problema: allungare il nostro file di input (aggiungere spazi) o aggiungere un simbolo di commento alla fine. Si noti che molti editori aggiungono una nuova riga alla fine, così si potrebbe desiderare di set count=di N-1byte (se il file è ora di 203 byte, e si nota che l'ultimo byte è un ritorno a capo, il conteggio set a 202). Puoi controllare un file per le nuove righe usando xxd script.py | taile controllando se l'ultimo byte è 0a(o, in casi strani, 0d).

Il processo è identico per un .isofile basta sostituire mentalmente /dev/sdccon your.iso.

Si noti che quando si controlla la destinazione nel proprio mountpoint per vedere se ha funzionato, potrebbe essere necessario utilizzarlo stringsnuovamente (questa volta cercando lo script) poiché il file è probabilmente ancora nella cache di lettura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.