web-dev-qa-db-ja.com

ISOイメージを編集する方法(ブータブルISOを含む)

EDIT ISOイメージに使用できるUbuntu用のツールを探しています。 UbuntuおよびWindows ISOのような起動可能なISOイメージを含みます。編集するだけでなく、編集したISOを保存し、USBドライブまたはCD/DVDに書き込むときに起動することができます。

29
Luis Alvarado

ISOマスターinstall isomaster

以前にISOマスターを使用してファイルをISOに追加しました。 ISOが起動可能かどうかの状態を保持するため、必要なものに適しています。私は過去に他のコンテンツ(音楽など)をライブディスクに追加するために使用しました。ただし、ISOファイルに変更を加えた後は、「名前を付けて保存」しかできません。つまり、別のISOファイルが作成されるので、両方に十分なディスク容量があることを確認してください。

isomaster

41
dv3500ea

PowerISO リリースしたばかりの Linuxバージョン ISO編集ソフトウェア。 ISOマスター のように、ISOが起動可能かどうかの状態を保持します。ただし、(最初に削除することで)元のファイルに直接保存できるため、両方のファイルに十分なディスク容量を確保する必要はありません。また、そのインターフェイスは、ISOマスターよりも簡単で直感的に使用できます。

screenshot of PowerISO for Linux

0
Ploni

これに対する一般的な答えは、isoファイルをアンパックし、変更して、再度パックすることです。 dv3500eaの答えで述べられているように、「ISOマスター」はそれを行うための良いフロントエンドのようです。

次の場合:

  • そのための十分なスペースがありません
  • 全体を書き換えるのではなく、外科的な修正のみを行いたい
  • デバイス全体をコピーせずにisofsファイルシステム(別名:iso9660)を含むストレージデバイスを変更したい、または
  • この開梱/再梱包がだけで十分ではないと思う場合

次に、この答えはあなたです!

要約すると、isofsファイルシステム内の既存のファイルを目的のファイルに置き換えます。目的のファイルは既存の(ターゲット)ファイルより小さく、末尾の空白(またはゴミ)を受け入れられる必要があります。これには実際には2つのコマンドしか必要ありませんが、注意してください。入力ミスはターゲットファイルシステムを完全に破壊したり、ソースファイルを上書きすることさえあります。バックアップはあなたの友達です!

私の場合、毎回スクリプトを再入力する必要がないように、ライブブートにスクリプトを保存したかったのです。スクリプトはscript.pyにあり、ターゲット(USBスティック)は/dev/sdcにあります。スクリプトのサイズは202バイトであるため、最初のステップは、202バイトを超えるファイルを見つけて上書きできるようにすることです。 /mntでマウントした後、/mnt/info.txtで適切なファイルを見つけました。

マウントポイントのinfo.txtを単に上書きすることはできません。読み取り専用のファイルシステムであると文句を言うでしょう。しかし、私たちはルートなので、それが何を意味するのかを見せましょう!ファイルシステム上のinfo.txtの場所を把握する必要があります。 (おそらく)info.txtに固有の文字列(たとえば、This is the official distribution CD of X.)を見つけて、ディスク上で検索します。

$ 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 [...]

別の方法として、これはgrepでも実行できます。これははるかに高速ですが、最初から指定する必要があります:$ Sudo grep -oba 'This is ...' /dev/sdc

場所がわかったので、これらのバイトをファイルに置き換えるだけです。

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

この行:

  • 入力ファイル(if)から出力ファイル(of)にバイトをコピーします。「すべてがファイル」であるため、出力ファイルが実際にデバイスであることを気にしません。
  • conv=notruncは、出力ファイルを切り捨てないように指示します。これは、特定のポイントからファイルを上書きせず、数バイトのみを上書きするためです。
  • bs=1はブロックサイズを1に設定します。通常は4k以上のブロックサイズが必要ですが、これにより(インライン)数学を行う必要がなくなり、バイトに正確な位置を指定できます。
  • seek=Nは、出力ファイル内の特定のポイントをシークします(seek=Nは、skipが入力ファイルからバイトをスキップするため、skip=Nとは異なることに注意してください!)。もちろん、ターゲットテキストがある場所に設定します。
  • count=Nこれだけのバイトをコピーします。入力ファイルの終わりに気付くので、これは省略できると思いますが、念のために残しました。

そして出来上がり、ファイルは上書きされます!

ただし、ターゲットファイルはスクリプトよりも大きいため、USBスティックでは、ファイルは「while do if run()blah; blah(); yright 2007 X Inc.」のようになりました。後続のゴミがあります。これを修正する2つの方法:入力ファイルを長くする(スペースを追加する)か、最後にコメント記号を追加します。多くのエディターは最後に改行を追加するので、count=N-1バイトに設定することをお勧めします(ファイルが203バイトで、最後のバイトが改行であることに気づいたら、 202までカウントします)。 xxd script.py | tailを使用して、最後のバイトが0a(または、奇妙な場合は0d)かどうかを確認することにより、ファイルの改行を確認できます。

このプロセスは、.isoファイルの場合と同じです。精神的に/dev/sdcyour.isoに置き換えてください。

マウントポイントでターゲットが機能しているかどうかを確認するときは、ファイルがおそらく読み取りキャッシュにあるため、stringsを再度使用する必要があることに注意してください(今回はスクリプトを検索します)。

0
Luc