如何编辑 ISO 映像(包括可启动 ISO)

Lui*_*ado 35 editor boot iso software-recommendation

我正在寻找可用于编辑ISO 映像的Ubuntu 工具。包括可启动的 ISO 映像,如 Ubuntu 和 Windows ISO。不仅可以编辑而且可以保存编辑过的 ISO,并且在 USB 驱动器或 CD/DVD 上刻录时仍然可以启动。

dv3*_*0ea 45

ISO大师 安装isomaster

我之前使用过 ISO Master 将文件添加到 ISO。它适合您的需求,因为它保留了 ISO 是否可启动的状态。我过去曾使用它向实时磁盘添加其他内容(如音乐)。但是请注意,在对 ISO 文件进行更改后,您只能“另存为”,即会创建另一个 ISO 文件,因此请确保您有足够的磁盘空间用于两者。

异构体


Plo*_*oni 8

PowerISO刚刚发布了他们的 ISO 编辑软件1的免费Linux 版本。与ISO Master一样,它保留了 ISO 是否可启动的状态。但是,它允许您直接保存到原始文件(通过先删除它),因此不需要为两个文件都提供足够的磁盘空间。我还发现它的界面比 ISO Master 更容易、更直观。

Linux 版 PowerISO 的屏幕截图


1不像他们的Windows程序,Linux版本免费使用,没有任何大小限制之类的。

  • 值得一提的是,如果您想取消 300MB 的限制,此应用程序需要支付费用,29.95 美元。 (2认同)

Luc*_*Luc 6

对此的常见答案是解压缩iso文件,修改它,然后再次打包。看起来像 dv3500ea 的回答中提到的“ISO Master”是一个很好的前端。

如果:

  • 你没有足够的空间来做那个
  • 你只想做手术修改而不是重写整个事情
  • 您想修改包含 isofs 文件系统(又名 iso9660)的存储设备而不复制整个设备,或者
  • 如果你认为这个拆包/重新打包的东西不够hacky

那么这个答案就是给你的!

总之,我们将用我们想要的文件替换 isofs 文件系统中的现有文件。我们想要的文件必须小于现有(目标)文件,并且尾随空格(或垃圾)必须是可以接受的。这实际上只需要两个命令,但要小心:一个错字可以完全破坏目标文件系统,甚至覆盖源文件。备份是你的朋友!

就我而言,我想将脚本存储在实时启动中,这样我就不必每次都重新键入它。脚本位于script.py,我的目标(USB 记忆棒)位于/dev/sdc. 脚本的大小是202字节,所以我们的第一步是找到一个大于202字节的文件,这样我们就可以覆盖它。在 安装它后/mnt,我在/mnt/info.txt.

我们不能只覆盖info.txt挂载点,它会抱怨它是一个只读文件系统。不过,我们是 root,所以让我们向他们展示这意味着什么!我们需要弄清楚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 [...]
Run Code Online (Sandbox Code Playgroud)

另外,这也可以使用grep,这是快了很多工作要做,但那么你需要从一开始就指定它:$ sudo grep -oba 'This is ...' /dev/sdc

现在我们知道它在哪里,我们只需要用我们的文件替换这些字节:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202
Run Code Online (Sandbox Code Playgroud)

这一行:

  • 将字节从输入文件 ( if)复制到输出文件 ( of),它并不关心输出文件实际上是一个设备,因为“一切都是文件”。
  • conv=notrunc 告诉它不要截断输出文件,因为我们只想覆盖几个字节,而不是从某个点开始覆盖文件。
  • bs=1 将块大小设置为 1。您通常需要 4k 或更高的块大小,但这既避免了必须进行(内联)数学运算,也让我们指定了与字节准确的位置。
  • seek=N寻找输出文件中的某个点(注意这seek=N不同于skip=N因为skip从输入文件中跳过字节!)。当然,我们将其设置为目标文本所在的位置。
  • count=N只复制这么多字节。我认为这可以省略,因为它会注意到输入文件的结尾,但我把它留在了只是为了确定。

瞧,文件被覆盖了!

但是等等,目标文件比我们的脚本大,所以在 U 盘上,文件现在是这样的:“while do if run() blah; blah(); yright 2007 X Inc.”。有尾随垃圾。解决此问题的两种方法:使我们的输入文件更长(添加空格),或在末尾添加注释符号。请注意,许多编辑器在末尾添加了换行符,因此您可能希望设置count=N-1bytes(如果您的文件现在是 203 个字节,并且您注意到最后一个字节是一个换行符,请将 count 设置为 202)。您可以通过使用xxd script.py | tail并检查最后一个字节是否是0a(或者,在奇怪的情况下,是0d)来检查文件的换行符。

文件的过程是相同的.iso,只是精神上替换/dev/sdcyour.iso.

请注意,当您检查挂载点中的目标以查看它是否有效时,您可能需要strings再次使用(这次搜索您的脚本),因为该文件可能仍在读取缓存中。

  • 这个答案太有趣了,我想投一百个赞哈哈 (2认同)

小智 6

尝试使用xorriso

来自这里的示例

xorriso -indev INPUT.ISO -outdev OUTPUT.ISO -add FILE_TO_ADD.EXT
Run Code Online (Sandbox Code Playgroud)