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


30

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

回答:


42

ISOマスター isomasterをインストールする

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

アイソマスター


2

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

Linux用のPowerISOのスクリーンショット


1

これに対する一般的な答えは、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=Nため、異なる点に注意してくださいskip!)。もちろん、ターゲットテキストがある場所に設定します。
  • 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、ファイルはおそらく読み取りキャッシュにあるため、再度使用する必要があります(今回はスクリプトの検索)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.