问题描述
我正在寻找可用于编辑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=N
与skip=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
(这次搜索脚本)。