当前位置: 首页>>技术教程>>正文


如何编辑ISO映像(包括可引导的ISO)

, , ,

问题描述

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

最佳回答

ISO Master

我以前使用过ISO Master来向ISO添加文件。它适合您的要求,因为它保留了ISO是否可引导的状态。过去,我曾使用它向实时磁盘添加其他内容(例如音乐)。但是请注意,对ISO文件进行更改后,您只能添加”Save As”,即将创建另一个ISO文件,因此请确保您有足够的磁盘空间来容纳这两个文件。

次佳回答

PowerISO刚刚发布了他们的ISO编辑软件的Linux version。与ISO Master一样,它保留ISO是否可引导的状态。但是,它允许您直接保存到原始文件(首先删除它),因此不需要两个文件都有足够的磁盘空间。我还发现它的界面比ISO Master更容易使用。

第三种回答

常见的解决方法是解压缩iso文件,对其进行修改,然后再次打包。就像dv3500ea的答案中提到的,”ISO Master”看起来是个很好的front-end。

如果:

  • 你没有足够的空间

  • 您只想进行手术修改,而不是重写整个内容

  • 您要修改包含isofs文件系统(也称为iso9660)的存储设备,而不复制整个设备,或者

  • 如果您认为拆包这个东西还不够hacky

那么这个答案适合您!

总而言之,我们将用所需的文件替换isofs文件系统中的现有文件。我们所需的文件必须小于现有(目标)文件,并且尾随空白(或垃圾)必须可接受。实际上,这仅需要两个命令,但要小心:输入错误可能会完全破坏目标文件系统,甚至覆盖源文件。备份是您的朋友!

就我而言,我想将脚本存储在实时启动中,因此不必每次都重新输入脚本。脚本位于script.py,我的目标(USB memory 棒)位于/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 [...]

另外,也可以使用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在输出文件中寻找特定点(请注意,由于skip跳过了输入文件中的字节,因此seek=Nskip=N不同)。当然,我们将其设置为目标文本所在的位置。

  • count=N仅复制这么多字节。我认为可以将其省略,因为它会注意到输入文件的末尾,但是为了确定起见,我将其保留了下来。

瞧,文件被覆盖了!

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

对于.iso文件,该过程相同,只是将/dev/sdc替换为your.iso即可。

请注意,当您在挂载点中检查目标以查看其是否工作时,由于文件可能仍在读取缓存中,因此可能需要再次使用strings(这次搜索脚本)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10104.html,未经允许,请勿转载。