Shell 生成ISO及混合型ISO文件,ISO镜像是一种存档格式,它存储了如CD-ROM、DVD-ROM等光盘的精准镜像。ISO文件通常用于存储待刻录的数据。在本节中,我们会看到如何使用光盘来创建能够以环回设备挂载的ISO文件以及如何生成可用于刻录的ISO文件。
我们需要区分可引导光盘与不可引导光盘。可引导光盘自身具备引导能力,也可以运行操作系统或其他软件。系统安装盘和Live系统(如Knoppix和Puppy)都属于可引导光盘。不可引导光盘则做不到这些。升级盘和源代码DVD都属于不可引导光盘。
注意,将可引导光盘中的内容复制到另一张光盘上并不足以生成一张新的可引导光盘。要想保留光盘的可引导性,应该使用ISO文件将其保存为磁盘镜像。
现在很多人使用闪存作为光盘的代替品。当我们将一个可引导的ISO文件写入闪存后,它却再也无法引导了,除非我们使用一种专门为此设计的混合ISO镜像。本章将带你认识ISO镜像及其处理方法。
预备知识
我们之前提到过,Unix将一切都作为文件来处理。所有的设备都是文件。因此,如果你想复制设备的精准镜像,需要从中读出所有的数据并将其写入另外一个文件。光驱对应的设备文件位于目录/dev中,其名称如/dev/cdrom、/dev/dvd,或者也可能是/dev/sd0。在访问形如sd*
的设备时得留心。多种设备的名字都是以sd
开头。比如说,你的硬盘也许是sd0
,CD-ROM是sd1
。
cat
命令可以用来读取任何数据,重定向可以将读出的数据写入文件。这样做当然没有问题,不过我们还有更好的方法。
实战演练
用下面的命令从/dev/cdrom创建一个ISO镜像:
# cat /dev/cdrom > image.iso
尽管可以奏效,但创建ISO镜像最好的方法还是使用dd
命令:
# dd if=/dev/cdrom of=image.iso
mkisofs
命令可以创建ISO镜像文件。该命令生成的输出文件能够被cdrecord
这类实用工具刻录到CD-ROM或DVD-ROM。我们需要将所有文件放入同一个目录中,然后用mkisofs命令将整个目录中的内容写入ISO文件:
$ mkisofs -V "Label" -o image.iso source_dir/
其中选项-o
指定了ISO文件的路径。source_dir
是作为ISO文件内容来源的目录路径,选项-V
指定了ISO文件的卷标。
补充内容
让我们继续学习一些ISO文件相关的命令和技巧。
- 能够启动闪存或硬盘的混合型ISO
通常无法通过将可引导的ISO文件写入USB存储设备来创建可引导的U盘。但是有一种被称为“混合ISO”的特殊ISO文件可以实现这一点。
我们可以用isohybrid
命令把标准ISO文件转换成混合ISO。isohybrid
是一个比较新的实用工具,尚未包含在大多数的Linux发行版中。你可以从http://www.syslinux.org 下载syslinux软件包,也可以使用yum
或apt-get
获取syslinux-utils
。
下面的命令能够制作出可引导的ISO文件:
# isohybrid image.iso
这个混合型ISO文件可用于写入USB存储设备,将该ISO写入USB存储设备:
# dd if=image.iso of=/dev/sdb1
你可以用相应的设备代替/dev/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时也可以采用多区段(multi-session)方式,这样就能在一张光盘上分多次刻录数据。多区段刻录需要使用
-multi
选项:
# cdrecord -v dev=/dev/cdrom image.iso -multi
- 玩转CD-ROM托盘
如果你用的是桌面电脑,不妨试试下面的命令来找点乐子。
$ eject
这个命令可以弹出光驱托盘。
$ eject -t
这个命令可以合上光驱托盘,不妨试着写一个可以让托盘重复开合n次的循环吧。可千万别趁你的同事外出喝咖啡时把这段代码放入他们的.bashrc
中。