<转载自IBM>在Linux上创建ISO和刻录CD(mkisofs&cdrecord)

Linux 和 Windows 都有可录 CD 的程序可用,但 Linux 版本比起 Windows 版本来功能更强大通用性也更好。在本文中,我们将研究 Linux CD 刻录命令中的两个主力: mkisofs 和 cdrecord 。 mkisofs 创建预先录制的映像,来生成 ISO9660/JOLIET/HFS 混合文件系统。它同时创建和填充文件系统。

由于采用了诸如 CD 刻录之类的新兴技术,最好使用这些程序的较新版本。 cdrecord 的最新版本 V2.0 已经被重命名为 cdrtools 。要查明机器上所安装的版本,请输入:

$ cdrecord --version
$ mkisofs --version

下面是与文件格式有关的一些术语:

  • CD-R:可刻录 CD(CD-Recordable)。它们是 WORM(写一次,读多次,Write Once, Read Many)。CD-R 的使用很广泛,在任何 CD-ROM 驱动器上都应该可读。
  • CD-RW:可重写 CD(CD-Rewritable)。它们是 WMRM(写多次,读多次,Write Many, Read Many)。
  • ISO-9660:旧的文件布局标准,它只允许 8.3 格式的文件名。
  • Joliet:Microsoft 对 ISO 9660 文件系统的扩展,它允许在文件名中使用 Unicode 字符,同样也允许长文件名。
  • HFS(分层文件系统,Hierarchical File System):Macintosh 使用的本机文件系统。
  • CD-UDF(通用盘格式,Universal Disk Format):业界标准递增包写文件系统(incremental packet-writing filesystem)。

创建ISO文件

一旦选择了您想复制的文件,对 CD 进行刻录就只有两步:用 mkisofs 创建 .iso,然后用 cdrecord 将这些文件烧录进盘中。使用以下命令来创建 .iso 文件:

$ mkisofs -o test.iso -Jrv -V test_disk /home/carla/
  • -o 为新的 .iso 映像文件命名(test.iso)
  • -J 为了与 Windows 兼容而使用 Joliet 命名记录
  • -r 为了与 UNIX/Linux 兼容而使用 Rock Ridge 命名约定,它使所有文件都公共可读
  • -v 设置详细模式,以便在创建映像时获得运行注释
  • -V 提供了卷标识(test_disk);该标识就是出现在 Windows 资源管理器中的盘名
  • 列表中的最后一项是选择要打包到 .iso 中的文件(都在 /home/carla/ 中)

现在,挂装 .iso 来进行验证;我喜欢创建一个测试目录:

$ mkdir /test_iso 
$ mount -t iso9660 -o ro,loop=/dev/loop0 test.iso /test_iso

查看目录的内容;所有的文件都应该在那里,并且都可读。否则,就是映像坏掉了,如果您将它烧录到盘上,那么您最终将得到一个刻录失败的光盘。

烧录盘

首先,找到 CD-R/RW 的 SCSI 地址:

$ cdrecord -scanbus 

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jrg Schilling 
Linux sg driver version: 3.1.24 
Using libscg version 'schily-0.5' 
scsibus0: 
0,0,0 0) 'TOSHIBA ' 'DVD-ROM SD-M1202' '1020' Removable CD-ROM 
0,1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM 
0,2,0 2) * 
0,3,0 3) * 
0,4,0 4) * 
0,5,0 5) * 
0,6,0 6) * 
0,7,0 7) * 

每一项的前三个数字分别指 SCSI 总线、设备标识和 LUN(逻辑单元号,Logical Unit Number)。(第四个数字也是设备标识。)cdrecord 需要这三个数字。在上面的示例中,CD 刻录机是 0,1,0。SCSI 总线 0 上的设备都可以缩写为 1,0,即省去头一个 0。这是一个公共约定。如果有其它总线的话,则必须指定 。

现在向盘中写内容:

$ cdrecord -v -eject speed=8 dev=0,1,0 test.iso
    • -v 指详细方式
    • -eject 在完成写任务后弹出盘
    • -speed 指定写速度(8)
    • -dev 是从 cdrecord -scanbus 获得的设备号(0,1,0)
    • 最后一个是所烧录的映像的名称(test.iso)

复制盘

要直接将内容从源盘复制到可刻录盘:

$ cdrecord -v dev=0,1,0 speed=4 -isosize /dev/scd0

这条命令直接将 CD-ROM 即 /dev/scd0 的内容“流”入 CD 刻录机 dev=0,1,0。直接复制速度很快,但却更容易出错。更好的做法是:先将源盘的内容复制到硬盘驱动器,再从硬盘驱动器复制到 CD 刻录机:

$ mount /cdrom 
$ dd if=/dev/scd0 of=/tmp/diskfile.iso 
$ cdrecord dev=0,1,0 speed=8 fs=8m -v -eject -dummy /tmp/diskfile.iso

 fs=8m 定义了环形缓冲区的大小:在一定程度上,越大越好。记住,中断是致命的;如果什么东西让数据传送慢下来了,那么 fs=8m 将创建一个足够大的缓冲区来让刻录机保持运行。如果 8 MB 还不够,那么您可能需要一台更好的 PC。另一方面,超过 8 MB 也不一定更好,因为操作系统重新装入 MMU(内存管理单元,Memory Management Unit)表时会浪费时间。缺省值是 4 MB。

-dummy 是一个了不起的选项,可以用它来先进行一次“排练”,然后在实际的盘上冒险。刻录机执行一切操作,但是不打开激光头,这使用户有机会在将内容提交到盘上之前捕获错误。

多段刻录

CD 由段构建而成,而段由磁道构成。只有一个段的盘上有一个导入点、一个 TOC(目录,table of content)、数据和一个导出点,导出点标记着这张盘的终点,并阻止在这张盘上进行进一步的刻录。 mkisofs 将单独段链接在一起。用 GUI 程序(如 X-CD-Roast 或 KonCD)创建多段刻录盘可能要更容易一些,但这里演示的是如何用命令行工具完成这一任务。

第一次在盘上刻录一个段时,请在 cdrecord 中使用 -multi 开关:

$ cdrecord -v -eject speed=8 dev=0,1,0 -multi test.iso

盘将会以某种方式被固定下来,使得盘可读,也可以添加更多数据。要向这张盘中添加更多段, mkisofs 需要知道起始扇区号和结束扇区号,可以象下面这样来找到这些号码:

$ cdrecord dev=0,1,0 -msinfo 
0,27139

确保把要添加数据的盘放入了 CD 刻录机。然后,添加两个新开关 -C 和 -M :

$ mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,1,0 /files/path/

或者更好的办法是,让命令 shell 完成这项工作:

$ mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,1,0 -msinfo` -M 0,1,0 /files/path/

多段刻录 CD 驱动器读取已写入的最后一个段。上面的命令从最后一个段获取 TOC,然后将它组合进新 TOC 中。在刻录盘上的最后一个段时,请省略 -multi 选项。

结束语

Linux 中的 CD 刻录功能强大且全面。CD 刻录机可以跨越网络共享,还可用于自动备份; mkisofs 和 cdrecord 也能用于 DVD。虽然有许多优秀的图形前端程序,但是完整的功能在命令行程序上。

本文转载自IBM Developworks,源地址:http://www.ibm.com/developerworks/cn/linux/l-cdburn/ 作者Carla Schroder,一切权利归IBM及原作者所有。

转载于:https://www.cnblogs.com/runwen/archive/2012/08/29/2661717.html

你可能感兴趣的:(操作系统,内存管理,前端)