3.12 生成ISO文件及混合ISO
ISO镜像是一种存档格式,它存储了如CD ROM、DVD ROM等光盘的精确存储镜像内容。我们通常都是用ISO镜像刻录光盘。但如果你想创建一个光盘的镜像,又该如何做呢?为此,我们需要制作一个光盘的ISO镜像文件。很多人都是依赖于第三方工具来创建ISO镜像。其实,若使用命令行的话,这也就是一行命令就可以搞定的事儿。
很多人并不知道可引导光盘与不可引导光盘之间的区别。可引导光盘自身具备引导能力,也可以运行操作系统或其他软件。不可引导光盘则做不到这些。人们通常会做的一件事是:将可引导光盘中的内容复制到另一个位置作为副本,然后用副本刻录CD。但是这样刻出的光盘并没有引导能力。要想保留光盘的可引导性,应该将它以磁盘镜像或是ISO文件的形式进行复制。
现在,多数人会用闪存或硬盘作为光盘的代替品。当我们将一个可引导的ISO文件写入闪存后,它却再也没法引导了,除非我们使用一种专门设计用于闪存设备的混合ISO镜像。
这则攻略将带你认识ISO镜像以及它的处理方法。
3.12.1 预备知识
本书已经提到过多次,UNIX是将一切都当做文件来处理的。一个设备也是一个文件。那应该怎样复制一个设备的精确镜像呢?那就需要读出所有的数据,并将其写入另外一个文件,对吧?
正如我们所知,cat
命令可以用来读取任何数据,重定向可以用来写入文件。
3.12.2 实战演练
用下面的命令从 /dev/cdrom创建一个ISO镜像:
- # cat /dev/cdrom > image.iso
这条命令完全可以奏效,它从设备中读出所有的数据并将其写入一个ISO镜像。
用cat
命令创建ISO镜像算是一个小技巧。不过,创建ISO镜像最好的方法是使用dd
工具。
- # dd if=/dev/cdrom of=image.iso
mkisofs
命令用于创建ISO文件系统。可以用cdrecord
之类的工具将mkisofs
的输出文件直接刻录到CD ROM或DVD ROM上。我们可以将需要的所有文件放入同一个目录中,然后用mkisofs
将整个目录的内容写入一个ISO文件。方法如下:
- $ mkisofs -V "Label" -o image.iso source_dir/
mkisofs
命令中的选项 -o
指定了ISO文件的路径。source_dir
是作为ISO文件内容来源的目录路径,选项 -V
指定了ISO文件的卷标。
3.12.3 补充内容
让我们再多学一些有关ISO文件的命令和技术。
- 能够启动闪存或硬盘的混合ISO
通常情况下,不能将可引导的ISO文件写入USB设备来引导操作系统。但是有一种被称为“混合ISO”的特殊的ISO文件可以做到这一切。
我们可以用isohybrid
命令把标准ISO文件转换成混合ISO。isohybrid是一个比较新的工具,大多数的Linux发行版中还未包含这个工具。你可以从http://syslinux.zytor.com下载syslinux软件包。
来看看下面的命令:
- # isohybrid image.iso
执行这个命令,我们将获得一个名为image.iso的混合ISO,它可用于写入USB存储设备。
将ISO写入USB存储设备:
- # dd if=image.iso of=/dev/sdb1
你可以用适当的设备代替sdb1
。
或者使用cat
命令:
- # cat image.iso > /dev/sdb1
- 用命令行刻录ISO
cdrecord
命令可以用来将ISO文件刻入CD ROM或DVD ROM。刻录CD ROM的方法如下:
- # cdrecord -v dev=/dev/cdrom image.iso
还有一些其他的选项,如下所示。
- 我们可以用
-speed
选项指定刻录速度:
-speed SPEED
例如:
- # cdrecord -v dev=/dev/cdrom image.iso -speed 8
参数8
指定其刻录速度为8x
。
- 刻录CD ROM时也可以采用多区段(multisession)方式,这样就能在一张光盘上分多次刻录数据。多区段刻录需要使用
-multi
选项:
- # cdrecord -v dev=/dev/cdrom image.iso -multi
- 玩转CD ROM托盘
想找点乐子,不妨试试下面的命令吧。
$ eject
这个命令用以弹出光驱托盘。
$ eject -t
这个命令用以合上光驱托盘。
不妨试着写一个可以让托盘开关N次的循环吧。