跳转至内容

光学光盘驱动器

来自 ArchWiki
(重定向自 DVD 刻录)

来自 Wikipedia

在计算机领域,光学光盘驱动器(ODD)是一种使用激光或电磁波(在可见光光谱内或附近)作为读取或写入数据到光盘的过程一部分的磁盘驱动器。有些驱动器只能读取光盘,而近期驱动器通常兼具读写功能,也称为刻录机或写入器。CD、DVD 和蓝光光盘是常见的 ওর optical media 类型,可以被这些驱动器读取和写入。Optical drive 是通用名称;驱动器通常被描述为“CD”、“DVD”或“蓝光”,后面跟着“drive”、“writer”等。

刻录

本文章或章节需要扩充。

原因:是否有打包到 Arch Linux 的命令行工具可以像 GAFFitter 或 cdrkit 的 dirsplit 一样将文件组织成卷以适合光盘?(在 Talk:Optical disc drive 中讨论)
警告 光学驱动器和光盘本身的质量差异很大。通常,建议使用较慢的刻录速度以获得可靠的刻录。如果您遇到光盘意外行为,请尝试以刻录机支持的最低速度进行刻录。

光学光盘驱动器的刻录过程包括创建或获取一个镜像,并将其写入光学介质。理论上,镜像可以是任何数据文件。如果您想挂载生成的介质,那么它通常是 ISO 9660 文件系统镜像文件。音频 CD 和多媒体 CD 通常是从 .bin 文件刻录的,在 .toc 文件或 .cue 文件控制下,这些文件指定了所需的轨道布局。

安装刻录实用工具

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:重复两次说 X 是传统选择,但没有说明原因。(在 Talk:Optical disc drive 中讨论)

如果您想使用图形用户界面的程序,请按照 #使用 GUI 刻录 CD/DVD/BD 进行操作。

此处列出的程序是面向命令行的。它们是大多数免费 CD、DVD 和 BD GUI 程序使用的后端。GUI 用户在进行故障排除或脚本刻录活动时可能会接触到它们。

您至少需要一个程序来创建文件系统镜像,以及一个能够将数据刻录到您所需媒体类型的程序。

可用的 ISO 9660 镜像创建程序包括

传统选择是 mkisofs,因为它出现得更早。

可用的刻录到介质的程序包括

传统选择是 cdrecord 用于 CD,growisofs 用于 DVD 和蓝光光盘,因为 cdrecord 是第一个在没有描述文件的情况下提供 CD 刻录的,而 growisofs 是第一个在没有刻录程序的人为限制的情况下提供 DVD 和 BD 写入的。要将 TOC/CUE/BIN 文件写入 CD,请安装 cdrdao

免费的 CD、DVD 和 BD 刻录 GUI 程序依赖于上述至少一个软件包。

xorrisofs 支持本文档中显示的 mkisofs 选项。

cdrskin 支持显示的 cdrecord 选项;xorrecord 也支持不涉及音频 CD 的选项。

从现有文件制作 ISO 镜像

创建 ISO 镜像最简单的方法是先将所需文件复制到一个目录中,例如:./for_iso

然后使用 mkisofs 生成镜像文件

$ mkisofs -V "ARCHIVE_2013_07_27" -J -r -o isoimage.iso ./for_iso

这些选项的每一个都在接下来的章节中进行了解释。

基本选项

-V
指定文件系统的名称(分配给它的名称)。ISO 9660 标准规范对字符串长度施加了 32 个字符的限制,并且允许的字符仅限于:“A”到“Z”、“0”到“9”和“_”。这个卷标在介质自动挂载时可能会显示为挂载点。
-J
启用 Joliet 扩展,该扩展为存储文件名分配了特殊空间,使用 Unicode(每个文件最多 64 个 UTF-16 字符)。
-joliet-long
将 Joliet 表中文件名的最大长度从 64 个字符增加到 103 个 UTF-16 字符。不符合 Joliet 规范且不常用。
-r
启用 Rock Ridge 扩展,该扩展为镜像添加了 POSIX 文件系统语义,包括支持 255 个字符的长文件名和类 Unix 文件权限。
-o
设置结果 ISO 镜像的文件路径。

graft-points

还可以让 mkisofs 从各种路径收集文件和目录

$ mkisofs -V "BACKUP_2013_07_27" -J -r -o backup_2013_07_27.iso \
  -graft-points \
  /photos=/home/user/photos \
  /mail=/home/user/mail \
  /photos/holidays=/home/user/holidays/photos

-graft-points 启用对 pathspecs 的识别,这些 pathspecs 由 ISO 文件系统中的目标地址(例如 /photos)和源地址(例如 /home/user/photos)组成。两者都用“=”字符分隔。

因此,此示例将目录 /home/user/photos/home/user/mail/home/user/holidays/photos 分别放入 ISO 镜像中,作为 /photos/mail/photos/holidays

程序 mkisofsxorrisofs 接受相同的选项。为了安全备份,请考虑使用 xorrisofs 和选项 --for_backup,它会记录最终的 ACL 并为每个数据文件存储 MD5 校验和。

有关其选项的更多信息,请参阅 mkisofs(8)xorrisofs(1) 的 man 手册。

挂载 ISO 镜像

如果您想浏览 ISO 镜像中的文件,可以挂载它。要挂载 ISO 镜像,我们可以使用

# mount -t iso9660 -o ro,loop /path/to/file.iso /mount-point

检查完镜像后,不要忘记卸载它

# umount /mount-point

有关无根权限挂载的信息,请参阅 Mounting images as user

将 img/ccd 转换为 ISO 镜像

要转换 img/ccd 镜像,您可以使用 ccd2iso

$ ccd2iso ~/image.img ~/image.iso

了解您的光学驱动器名称

在本节的其余部分,假定您的刻录设备名称为 /dev/sr0

通过以下命令进行检查

$ cdrecord dev=/dev/sr0 -checkdrive

这应该会报告驱动器的 Vendor_infoIdentification 字段。

如果没有找到驱动器,请检查是否存在任何 /dev/sr* 设备,以及它们是否对您或您的组具有读/写权限(wr-)。如果不存在 /dev/sr* 设备,则尝试手动加载 sr_mod 模块。

读取 CD 或 DVD 的卷标

如果您想获取介质的名称/标签,请使用 dd

$ dd if=/dev/sr0 bs=1 skip=32808 count=32

从 CD、DVD 或 BD 创建 ISO 镜像

为了只复制光盘上的实际数据,而不是填充它的空白扇区,首先获取它的块/扇区数和大小(通常是 2048)

$ isosize -x /dev/sr0
sector count: 2041796, sector size: 2048

或者,另一种方法是

$ isoinfo -d -i /dev/sr0 | awk '/block size|Volume size/'
Logical block size is: 2048
Volume size is: 2041796
注意 不要忘记将 /dev/sr0 替换为您的光学驱动器设备名称。

然后使用 dd 命令复制数据,使用获得的值

$ dd if=/dev/sr0 of=discmage.iso bs=sector_size count=sector_count status=progress
提示 如果介质已损坏,最好使用专用实用工具,例如 ddrescue。请参阅 Disk cloning#Using ddrescue

如果原始介质是可引导的,那么副本也将是可引导的镜像。您可以将其用作虚拟机(virtual machine)的伪 CD,或将其刻录到光学介质上,该介质随后应变为可引导。 [1]

使用 dvdisaster 创建错误恢复数据

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:请使用模板的第一个参数提供简要说明。(在 Talk:Optical disc drive 中讨论)

dvdisasterAURdvdisaster-unofficialAUR 是一个工具,它向光学介质添加纠错数据。这些数据可以帮助从划伤或损坏的光盘中恢复内容。

1. 将 CD、DVD 或蓝光光盘插入光学驱动器。
2. 确保光盘未被挂载。您可以使用以下命令卸载它

# umount /dev/cdrom

3. 从命令行运行 dvdisaster 或在应用程序菜单中查找它。
4. 在 dvdisaster 界面中,选择 **Create error correction data**(创建纠错数据)。
5. 从下拉菜单中选择光盘类型(CD/DVD/BD)。
6. 单击 **Load Disc**(加载光盘)按钮扫描光学介质的内容。
7. dvdisaster 将分析光盘并显示其结构。
8. 选择一个位置来保存纠错(ECC)文件。
9. 设置 **error correction level**(纠错级别)。级别越高,恢复效果越好,但 ECC 文件大小也越大。
2. 单击 **Generate**(生成)开始创建纠错数据。
10. 该过程可能需要几分钟,具体取决于您的光盘大小。
11. 创建 ECC 文件后,dvdisaster 会提示您验证文件。
12. 同时保存原始光盘镜像(ISO)和 ECC 文件以备将来使用。
13. 建议将您的 ISO 和 ECC 文件存储在多个设备或云存储中,以获得最大的安全性。

获得最佳结果的技巧

  • 使用高质量的光盘来创建备份。
  • 将 ECC 文件与 ISO 镜像一起存储,以便轻松恢复。
  • dvdisaster 可以与 ISO 文件配合使用,而无需原始光盘。

使用 dvdisaster 重建损坏的光盘

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:请使用模板的第一个参数提供简要说明。(在 Talk:Optical disc drive 中讨论)

如果您的光学光盘划伤或损坏,dvdisaster 可以使用纠错(ECC)文件帮助恢复丢失的数据。1. 将损坏的 CD、DVD 或蓝光光盘插入光学驱动器。
2. 卸载光盘以避免冲突

# umount /dev/cdrom

3. 启动 dvdisaster
4. 在 dvdisaster 界面中,选择 **Scan and Repair**(扫描和修复)模式。
5. 从下拉菜单中选择驱动器或使用 **Load Disc**(加载光盘)按钮加载损坏的光盘。
5. 单击 **Load ECC**(加载 ECC)选择与您最初刻录光盘时创建的对应纠错文件(通常为 `.ecc`)。
6. 确保 ECC 文件与光盘的确切结构匹配。如果您没有匹配的 ECC 文件,此方法将不起作用。
7. 单击 **Scan**(扫描)开始读取光盘并识别损坏的扇区。
8. dvdisaster 将显示光盘状态的视觉表示,显示完好、不可读和已修复的扇区。
9. 扫描完成后,单击 **Repair**(修复)以使用 ECC 文件重建丢失或损坏的数据。10. 恢复的数据将被写入一个新的 ISO 镜像文件。
11. 选择一个位置来保存重建的 ISO 镜像。例如:`/home/user/recovered_disc.iso`
12. 单击 **"Save"**(保存)完成该过程。
13. 挂载 ISO 以验证文件是否已成功恢复

# mount -o loop /home/user/recovered_disc.iso /mnt

14. 检查 `/mnt` 中的内容以确保数据完整性。

获得最佳结果的技巧

  • 使用能够良好读取损坏光盘的可靠光学驱动器。
  • 确保 ECC 文件与您的 ISO 备份安全地一起存储。
  • 如果恢复失败,请清洁光盘并尝试再次扫描。

视频:https://www.youtube.com/watch?v=zolvCcxcN4g

擦除 CD-RW 和 DVD-RW

使用的 CD-RW 介质需要擦除,然后才能覆盖之前记录的数据。这可以通过以下方式完成:

$ cdrecord -v dev=/dev/sr0 blank=fast

有两种空白选项:blank=fastblank=all。完全擦除所需的时间与完整写入过程相当。它会覆盖 CD 上的有效载荷数据。然而,这不应被视为安全地使这些数据不可读。为此,建议进行几次用随机数据进行的完整写入。

替代命令是

$ cdrskin -v dev=/dev/sr0 blank=fast
$ xorriso -outdev /dev/sr0 -blank as_needed

要擦除 DVD-RW,请使用 dvd+rw-format 工具,来自 dvd+rw-tools

$ dvd+rw-format -blank=fast /dev/sr0

替代命令是

$ cdrecord -v dev=/dev/sr0 blank=fast
$ cdrskin -v dev=/dev/sr0 blank=deformat_sequential_quickest
$ xorriso -outdev /dev/sr0 -blank deformat_quickest

这样快速擦除的 DVD-RW 不适合多区段刻录,也不能接受长度不可预测的输入流。为此,必须使用以下命令之一:

$ cdrecord -v dev=/dev/sr0 blank=all
$ dvd+rw-format -blank=full /dev/sr0
$ cdrskin -v dev=/dev/sr0 blank=as_needed
$ xorriso -outdev /dev/sr0 -blank as_needed

其他介质类型要么是一次性写入(CD-R、DVD-R、DVD+R、BD-R),要么无需擦除即可覆盖(DVD-RAM、DVD+RW、BD-RE)。

格式化 DVD-RW

格式化的 DVD-RW 介质可以在不进行先前擦除的情况下被覆盖。因此,考虑在它们的使用寿命中应用一次

$ dvd+rw-format -force /dev/sr0
$ cdrskin -v dev=/dev/sr0 blank=format_if_needed
$ xorriso -outdev /dev/sr0 -format as_needed

与 DVD-RAM、DVD+RW 和 BD-RE 不同,格式化的 DVD-RW 不能直接用作(慢速)硬盘,而是需要驱动程序 pktcdvd 的协助。请参阅 pktsetup(8)

格式化 BD-RE 和 BD-R

BD-RE 在首次使用前需要格式化。当刻录程序检测到未格式化状态时,它们会自动执行此操作。尽管如此,有效载荷区域的大小可以通过上面为 DVD-RW 显示的格式命令的专家版本来影响。

BD-R 可以未格式化或格式化使用。未格式化时,它们以标称全速写入并提供最大存储容量。格式化后,它们在写入操作期间会进行检查读取,并将坏块替换为来自备用区域(Spare Area)的块。这会将写入速度降低到标称速度的一半或更少。默认大小的备用区域会将存储容量减少 768 MiB。

growisofs 默认格式化 BD-R。其他程序则不。growisofs 可以被阻止格式化。cdrskin 和 xorriso 可以在格式化的 BD-RE 或 BD-R 上以标称全速写入。

 $ growisofs -use-the-force-luke=spare:none ...growisofs.or.mkisofs.options...
 $ cdrskin stream_recording=on ...cdrecord.options...
 $ xorriso -stream_recording on ...xorriso.commands...

将 ISO 镜像刻录到 CD、DVD 或 BD

要将已准备好的 ISO 镜像文件 isoimage.iso 刻录到光学介质,对于 CD 请运行

$ cdrecord -v -sao dev=/dev/sr0 isoimage.iso

对于 DVD 或 BD 请运行

$ growisofs -dvd-compat -Z /dev/sr0=isoimage.iso

对于 CD、DVD 或 BD 请运行

$ xorriso -as cdrecord -v -sao dev=/dev/sr0 isoimage.iso

  • 开始写入之前,请确保介质未被挂载。如果介质包含可读的文件系统,则可能会自动发生挂载。在最好的情况下,它会阻止刻录程序使用刻录机设备。在最坏的情况下,由于读取操作干扰了驱动器,将会导致刻录错误。因此,如有疑问,请执行
    # umount /dev/sr0
  • growisofs 在空白 BD-R 介质上有一个小错误。它在刻录完成后会显示一条错误消息。像 k3b 这样的程序 then 认为整个刻录运行失败。为避免此问题,请执行以下任一操作:
    • 在将空白 BD-R 提交给 growisofs 之前,使用 dvd+rw-format /dev/sr0 对其进行格式化
    • 或使用 growisofs 选项 -use-the-force-luke=spare:none

验证刻录的 ISO 镜像

您可以验证刻录介质的完整性,以确保它不包含任何错误。在验证之前,请务必弹出介质并重新插入,这将确保任何内核缓存都不会用于读取数据。

首先计算原始 ISO 镜像的 MD5 校验和

$ md5sum isoimage.iso
 e5643e18e05f5646046bb2e4236986d8 isoimage.iso

接下来计算介质上 ISO 文件系统的 MD5 校验和。虽然某些介质类型提供与刻录程序提交的数据量完全相同的数据,但许多其他类型在读取时会附加尾部垃圾。因此,您应该将读取限制在 ISO 镜像文件的大小。

$ blocks=$(expr $(du -b isoimage.iso | awk '{print $1}') / 2048)
$ dd if=/dev/sr0 bs=2048 count=$blocks | md5sum
43992+0 records in
43992+0 records out
90095616 bytes (90 MB, 86 MiB) copied, 0.359539 s, 251 MB/s
e5643e18e05f5646046bb2e4236986d8  -

这两个运行应该产生相同的 MD5 校验和(此处为:e5643e18e05f5646046bb2e4236986d8)。如果不相同,您可能会在 dd 运行中收到 I/O 错误消息。如果您感兴趣,dmesg 可能会显示 SCSI 错误和块编号。

ISO 9660 和即时刻录

在将正在生成的 ISO 文件系统写入光学介质之前,不必将其存储在硬盘上。只有非常老的计算机上的非常老的 CD 驱动器才可能因驱动器缓冲区为空而导致刻录失败。

如果从 mkisofs 中省略选项 -o,它会将 ISO 镜像写入标准输出。这可以管道传输到刻录程序的标准输入。

$ mkisofs -V "ARCHIVE_2013_07_27" -J -r ./for_iso | \
  cdrecord -v dev=/dev/sr0 -waiti -

此处不需要选项 -waiti。它阻止 cdrecordmkisofs 开始输出之前写入介质。这将允许 mkisofs 在不干扰已开始的刻录运行的情况下读取介质。有关多区段的信息,请参阅下一节。

在 DVD 和 BD 上,您可以让 growisofs 为您操作 mkisofs 并即时刻录其输出

$ growisofs -Z /dev/sr0 -V "ARCHIVE_2013_07_27" -r -J ./for_iso

多区段

ISO 9660 多区段意味着具有可读文件系统的介质在第一个未使用块地址处仍然是可写的,并且新的 ISO 目录树将被写入这个未使用部分。新树伴随着新添加或覆盖的数据文件的内容块。打算保留在旧 ISO 树中的数据文件的块将不会再次写入。

Linux 和许多其他操作系统将挂载介质上的最后一个区段的目录树。这个最新的树通常也会显示旧区段的文件。

使用 cdrecord 进行多区段刻录

如果使用了 cdrecord 选项 -multi,CD-R 和 CD-RW 仍然是可写的(也称为“可追加”)。

$ cdrecord -v -multi dev=/dev/sr0 isoimage.iso

然后可以查询介质以获取下一区段的参数

$ m=$(cdrecord dev=/dev/sr0 -msinfo)

借助这些参数和驱动器中可读的介质,您可以生成附加的 ISO 区段

$ mkisofs -M /dev/sr0 -C "$m" \
   -V "ARCHIVE_2013_07_28" -J -r -o session2.iso ./more_for_iso

最后将区段追加到介质并保持其可追加状态

$ cdrecord -v -multi dev=/dev/sr0 session2.iso

程序 cdrskinxorrecord 在 DVD-R、DVD+R、BD-R 和未格式化的 DVD-RW 上也能做到这一点。程序 cdrecord 至少支持 DVD-R 和 DVD-RW 的多区段刻录。当然,它们都支持 CD-R 和 CD-RW。

大多数可重用介质类型不记录可被挂载内核识别的区段历史。但使用 ISO 9660,即使在这些介质上也能实现多区段效果。

growisofsxorriso 可以做到这一点,并隐藏了大部分复杂性。

使用 growisofs 进行多区段刻录

默认情况下,growisofs 使用 mkisofs 作为创建 ISO 镜像的后端,并将大部分程序参数传递给它。请参阅上面的 mkisofs 示例。它禁止使用选项 -o 并弃用选项 -C。默认情况下,它使用 mkisofs。您可以通过设置环境变量 MKISOFS 来指定使用其他兼容的后端程序之一。

$ export MKISOFS="xorrisofs"

通过选项 -Z 来表达在光学介质上开始一个新 ISO 文件系统的愿望。

$ growisofs -Z /dev/sr0 -V "ARCHIVE_2013_07_27" -r -J ./for_iso

通过选项 -M 来表达将更多文件作为新区段追加到现有 ISO 文件系统的愿望。

$ growisofs -M /dev/sr0 -V "ARCHIVE_2013_07_28" -r -J ./more_for_iso

有关详细信息,请参阅 growisofs(1) 手册以及 mkisofsxorrisofs 的手册。

使用 xorriso 进行多区段刻录

xorriso 从介质的空白状态得知开始新 ISO 文件系统的愿望。因此,如果它包含数据,则需要对其进行空白处理。命令 -blank as_needed 适用于所有可重用介质类型,甚至适用于硬盘上的数据文件中的 ISO 镜像。当应用于空白的一次性介质时,它不会导致错误。

$ xorriso -outdev /dev/sr0 -blank as_needed \
          -volid "ARCHIVE_2013_07_27" -joliet on -add ./for_iso --

在非空白可写介质上,如果使用命令 -dev 而不是 -outdevxorriso 会追加新提供的光盘文件。当然,这里不应给出 -blank 命令。

$ xorriso -dev /dev/sr0 \
          -volid "ARCHIVE_2013_07_28" -joliet on -add ./more_for_iso --

有关详细信息,请参阅 xorriso(1) man 手册,特别是其中的示例。

BD 缺陷管理

BD-RE 和格式化的 BD-R 介质通常在启用了缺陷管理(Defect Management)的情况下写入。此功能会在写入的块仍存储在驱动器缓冲区中时读取它们。如果读取质量差,则会重新写入这些块或将其重定向到“备用区域”(Spare Area),数据将被存储在替换块中。

此检查读取会将写入速度降低到驱动器和 BD 介质标称速度的一半或更低。有时甚至更糟。大量使用备用区域会导致读取操作期间的长时间延迟。因此,并非总是需要缺陷管理。

cdrecord 不格式化 BD-R。但它也无法阻止在 BD-RE 介质上进行缺陷管理。

growisofs 默认格式化 BD-R。可以通过选项 -use-the-force-luke=spare:none 来阻止缺陷管理。但它也无法阻止在 BD-RE 介质上进行缺陷管理。

cdrskinxorrisoxorrecord 默认不格式化 BD-R。它们分别使用 cdrskin blank=format_if_neededxorriso -format as_neededxorrecord blank=format_overwrite 来格式化。这三个程序可以通过 cdrskin stream_recording=onxorriso -stream_recording onxorrecord stream_recording=on 来禁用 BD-RE 和已格式化的 BD-R 的缺陷管理。

刻录音频 CD

创建您的音频音轨,并将它们存储为未压缩的、16 位、44100 Hz、立体声 WAV 文件。

如果文件是 24 位编码的(例如,在线音乐服务只提供 24 位 WAV 文件),则需要将其转换为 16 位,以便能在符合 RedBook 标准的 CD 播放器上播放。要检查,请确保已安装 soxcd 到包含您的 WAV 文件的目录,然后运行

$ soxi *.wav

如果文件编码不正确,请使用 sox 转换文件

$ for f in *.wav; do sox "$f" -b 16 output.wav; mv output.wav "$f"; done

要将 MP3 转换为 WAV,请确保已安装 lamecd 到包含您的 MP3 文件的目录,然后运行

$ for FILE in *.mp3; do lame --decode "$FILE" "${FILE%.mp3}.wav"; done

如果您在尝试刻录 LAME 转换的 WAV 文件时遇到错误,请尝试使用 mpg123 进行解码

$ for FILE in *.mp3; do mpg123 --rate 44100 --stereo --buffer 3072 --resync -w "${FILE%.mp3}.wav" "$FILE"; done

要将 AAC 转换为 WAV,请确保已安装 faad2 并运行

$ for FILE in *.m4a; do faad "$FILE"; done

要修复已存在的 WAV 文件(或许多其他格式)的比特率,请尝试使用 sox

$ for FILE in *.wav; do sox "$FILE" -c 2 -r 44100 "${FILE%.wav}-ok.wav"; done

以一种方式命名音频文件,使其在按字母顺序排序时按所需的音轨顺序出现,例如 01.wav02.wav03.wav 等。

使用 cdrtools,使用以下命令模拟将 WAV 文件刻录为音频 CD

$ cdrecord -dummy -v -pad speed=X dev=/dev/sr0 -dao -swab *.wav

如果一切顺利,您可以删除 -dummy 标志以实际刻录 CD。

注意 生成的光盘可能无法在所有 CD 播放器上播放。对于纯音频光盘(丢弃一些音轨元数据),请添加 -audio 标志。

或者,使用 cdrdao,创建一个“目录内容”文件,命令如下:

$ {
    echo "CD_DA"
    printf 'TRACK AUDIO\nFILE "%s" 0\n' *.wav
  } > toc

这将导致音轨之间没有间隔。可选地,如果您想在特定音轨之间插入 X 秒的间隔,您可以编辑 toc 文件并在该音轨的 TRACK AUDIO 和 FILE 行之间插入以下行:

PREGAP 00:0X:00

然后,我们刻录 CD

$ cdrdao write --speed X toc

速度可以调整,较低的速度会产生更高的质量结果。这是因为 Audio-CD 格式的错误纠正比数据存储格式的错误纠正要不先进。

要测试新的音频 CD,请使用 MPlayer

$ mplayer cdda://

刻录 BIN/CUE

要刻录 BIN/CUE 镜像,请运行

$ cdrdao write --device /dev/sr0 image.cue

混合模式光盘的 TOC/CUE/BIN

ISO 镜像仅存储一个数据轨道。如果想创建混合模式光盘(数据轨道后跟多个音频轨道)的镜像,则需要创建一个 TOC/BIN 对。

$ cdrdao read-cd --read-raw --datafile image.bin --driver generic-mmc:0x20000 --device /dev/cdrom image.toc

某些软件只支持 CUE/BIN 对,您可以使用 toc2cuecdrdao 的一部分)创建一个 CUE 文件。

$ toc2cue image.toc image.cue

刻录后端问题

如果您遇到问题,可以在邮件列表 cdwrite@other.debian.org 寻求帮助,或者尝试向支持邮箱地址之一发送邮件(如果程序手册的末尾附近有列出)。

请提供您尝试过的命令行、介质类型(例如 CD-R、DVD+RW 等)以及失败的症状(程序消息、用户期望落空等)。您可能会被要求获取受影响程序的最新版本或开发版本,并进行测试运行。但也可能被告知您的驱动器不喜欢特定的介质。

使用 GUI 刻录 CD/DVD/BD

有几种应用程序可用于在图形环境中刻录 CD。

另请参见 Wikipedia:Comparison of disc authoring software

  • AcetoneISO — 多合一 ISO 工具(支持 BIN、MDF、NRG、IMG、DAA、DMG、CDI、B5I、BWI、PDI 和 ISO)。
https://sourceforge.net/projects/acetoneiso || acetoneiso2AUR
  • BashBurn — 轻量级的基于终端的菜单前端,用于 CD/DVD 刻录工具。
https://web.archive.org/web/20161118032849/https://bashburn.dose.se/ || bashburn
  • Brasero — GNOME 桌面的光盘刻录应用程序,设计得尽可能简单。
https://wiki.gnome.org/Apps/Brasero || brasero
  • cdwcdrecordmkisofsgrowisofsdvd+rw-mediainfodvd+rw-formatxorriso 的 Ncurses 前端。
https://cdw.sourceforge.net/ || cdwAUR
  • Gnome CD Master (gcdmaster) — 用于创建音频 CD 并使用 cdrdao 刻录它们的 GUI 前端。
https://cdrdao.sourceforge.net/gcdmaster/ || cdrdao
  • Graveman — 基于 GTK 的 CD/DVD 刻录应用程序。需要配置才能指向正确的设备。
https://graveman.tuxfamily.org/ || gravemanAUR
  • isomaster — ISO 镜像编辑器。
http://littlesvr.ca/isomaster || isomasterAUR
  • K3b — 基于 KDElibs 的功能丰富且易于操作的 CD 刻录和翻录应用程序。是 kde-multimedia 的一部分。
https://apps.kde.org/k3b/ || k3b
  • X-CD-Roast — 轻量级的 cdrtools 前端,用于 CD 和 DVD 刻录。
http://www.xcdroast.org/ || xcdroastAUR
  • Xfburn — libburnia 库的简单前端,支持 CD/DVD(-RW)、ISO 镜像和 BurnFree。
https://docs.xfce.org/apps/xfburn/start || xfburn
  • xorriso-tcltk — ISO 和 CD/DVD/BD 刻录工具 xorriso 的图形前端。
https://gnu.ac.cn/software/xorriso/ || libisoburn

播放

CD

播放音频 CD 需要 libcdio 包。要使 Dolphin 等 KDE 应用程序能够读取音频 CD,请安装 audiocd-kio

DVD

如果您想播放加密的 DVD,必须安装 libdvd* 包

此外,您必须安装播放器软件。流行的 DVD 播放器有 MPlayerxineVLC。请参阅 视频播放器列表、MPlayer 的具体说明以及VLC 的具体说明。

蓝光

请参阅 Blu-ray#Playback

翻录

翻录是将音频或视频内容复制到硬盘的过程,通常是从可移动介质或媒体流。

多格式

  • Aaru — 用于 CD、DVD 和硬盘的归档翻录软件。
https://aaru.app || aaru-gitAUR
  • redumper — 支持增量转储、高级 SCSI/C2 修复、智能音频 CD 偏移检测和许多其他功能的先进字节完美光盘转储程序。
https://github.com/superg/redumper || redumperAUR

音频 CD

控制台

  • abcde — 用于翻录音频 CD 的综合性命令行工具。
https://abcde.einval.com/ || abcdeAUR
  • cdda2wav — 支持 paranoia 的 CD 音频提取程序。
http://www.cdda2wav.de/ || cdrtools
  • cdparanoia — Compact Disc Digital Audio (CDDA) Digital Audio Extraction (DAE) 工具。
https://xiph.org/paranoia/index.html || cdparanoia
  • cyanrip — 功能丰富的 CD 翻录器,支持 musicbraniz 集成、错误检测、日志生成、多种格式、HDCD 解码、封面自动下载。
https://github.com/cyanreg/cyanrip/ || cyanripAUR
  • ripit — 支持 MusicBrainz、freedb 和各种编解码器的命令行翻录器。
https://www.ripit.pl/ || ripitAUR
  • ripright — 受 autorip 启发的最小 CD 翻录器。
https://www.mcternan.me.uk/ripright/ || riprightAUR
  • shnsplit — 根据 CUE 文件分割 .wav 和 .flac 文件并对结果进行编码。ABCDE 的有用伴侣。
http://shnutils.freeshell.org/shntool/ || shntoolAUR
  • whipper — 旨在准确性而非速度的 CD 翻录器。使用 cdparanoia、MusicBrainz、AccurateRip。
https://github.com/whipper-team/whipper || whipper

图形界面

  • Asunder — 基于 GTK 的 CD 翻录程序。
http://littlesvr.ca/asunder/ || asunderAUR
  • Audex — 基于 KDE 的 CD-ROM 驱动器音频抓取工具。是 kde-multimedia 的一部分。
https://apps.kde.org/audex/ || audex
  • fre:ac — 支持各种流行格式和编码器的音频转换器和 CD 翻录器。
https://freac.org/ || freacAUR
  • Goobox — GNOME 的 CD 播放器和翻录器。
https://gitlab.gnome.org/Archive/goobox || goobox
  • Grip — GNOME 项目中一个快速轻量的 CD 翻录器,类似于 Audiograbber
https://sourceforge.net/projects/grip/ || gripAUR
  • K3b — 基于 KDElibs 的功能丰富且易于操作的 CD/DVD 刻录和翻录应用程序。是 kde-multimedia 的一部分。
https://apps.kde.org/k3b/ || k3b
  • KAudioCreator — 用于翻录和编码 Audio-CD 的 KDE 程序。已弃用且不再启动
https://invent.kde.org/unmaintained/kaudiocreator || kaudiocreator-gitAUR
  • ripperX — GTK 程序,用于翻录 CD 音轨并将其编码为 Ogg、MP3 或 FLAC 格式。
https://sourceforge.net/projects/ripperx/ || ripperxAUR
  • rubyripper — 音频光盘翻录器,尝试通过多次翻录同一曲目并纠正任何差异来提供安全翻录。
https://github.com/bleskodev/rubyripper || rubyripperAUR
https://wiki.gnome.org/Apps/SoundJuicer || sound-juicer
  • soundKonverter — 各种音频转换器的前端。
https://www.linux-apps.com/p/1126634 || soundkonverterAUR

DVD-Video

另请参见 Wikipedia:Comparison of DVD ripper software

通常,翻录 DVD 的过程可以分解为两个子任务:

  1. 数据提取 — 将音频和/或视频数据复制到硬盘,
  2. 转码 — 将提取的数据转换为合适的格式。

有些工具执行两个任务,而有些则侧重于一个方面。

控制台

  • dvdbackup — 用于纯数据提取的工具,不进行转码。它可用于创建加密 DVD 的精确副本(结合 libdvdcss)或解密视频供其他无法读取加密 DVD 的实用程序使用。
https://dvdbackup.sourceforge.net/ || dvdbackup
  • FFmpeg — Linux/Unix 的完整免费互联网直播音频和视频解决方案,能够直接从 DVD-Video ISO 镜像以任何格式(音频/视频)进行翻录,只需选择 ISO 镜像作为输入并根据所需选项进行操作。它还允许进行下混、缩放、分割、选择流等。
https://ffmpeg.net.cn/ || ffmpeg
  • HandBrake CLI — 简单而强大的视频转码器,非常适合批量 mkv/x264 翻录。
https://handbrake.fr/ || handbrake-cli
  • MEncoder — 免费的命令行视频解码、编码和过滤工具。它支持翻录和转码 DVD-Video。
http://www.mplayerhq.hu/ || mencoder
  • subtitleripper — 将 DVD 字幕转换为文本格式。
https://subtitleripper.sourceforge.net/ || subtitleripperAUR
|| transcodeAUR
  • Vobcopy — 将 DVD .vob 文件复制到硬盘,并在复制过程中解密。
https://github.com/barak/vobcopy || vobcopyAUR

图形界面

  • dvd::riptranscodeAUR 的前端,用于将 DVD 提取到硬盘并进行转码,或即时提取和转码。
https://www.exit1.org/dvdrip/ || dvdripAUR
  • HandBrake — 简单而强大的视频转码器,非常适合批量 mkv/x264 翻录。GTK 版本。
https://handbrake.fr/ || handbrake
  • K3b — 基于 KDElibs 的功能丰富且易于操作的 CD/DVD 刻录和翻录应用程序。是 kde-multimedia 的一部分。
https://apps.kde.org/k3b/ || k3b
  • OGMRip — 一个应用程序和一套库,用于使用各种编解码器将 DVD 翻录和编码为 AVI、OGM、MP4 或 Matroska 文件。它依赖 mplayer、mencoder、ogmtools、mkvtoolnix、mp4box、oggenc、lame 和 faac 来执行其任务。
https://ogmrip.sourceforge.net/ || ogmripAUR

DVD-Audio

  • Python Audio Tools — 包括 dvda2track,这是一个易于使用的命令行工具,用于将 DVD-Audio 音轨提取为未压缩的 wav 文件。
https://audiotools.sourceforge.net/ || audiotoolsAUR

故障排除

Brasero 无法标准化音频 CD

如果您尝试刻录,可能会在称为“标准化”的第一步停止。

作为一种解决方法,您可以使用“编辑 > 插件”菜单禁用标准化插件。

VLC: 错误“... 无法打开光盘 /dev/dvd”

如果您遇到类似这样的错误:

vlc dvdread could not open the disc "/dev/dvd"

可能是因为您的系统上没有设备节点 /dev/dvd。Udev 不再创建 /dev/dvd,而是使用 /dev/sr0。要解决此问题,请编辑 VLC 配置文件(~/.config/vlc/vlcrc)。

# DVD device (string)
dvd=/dev/sr0

DVD 驱动器噪音大

如果播放 DVD 视频导致系统声音非常大,可能是因为光盘旋转速度过快。要临时更改驱动器速度,请运行

# eject -x 12 /dev/dvd

有时

# hdparm -E12 /dev/dvd

可以使用驱动器支持的任何速度,或 0 表示最大速度。

设置 CD-ROM 和 DVD-ROM 驱动器速度

如果光驱不断检查新光盘导致不必要的噪音,请考虑在 BIOS 中为您的光驱启用 SATA“热插拔”。

新电脑(新 DVD 驱动器)无法播放

如果无法播放,并且您有新电脑(新 DVD 驱动器),原因可能是未设置区域代码。您可以使用 regionsetAUR 包读取和设置区域代码。

以上程序都无法将 DVD 翻录/编码到我的硬盘!

请确保您的 DVD 读取器的区域已正确设置;否则,您将遇到大量与CSS相关的莫名错误。使用 regionsetAUR 包进行设置。

如果设置了正确的区域后仍然无法翻录,请参阅 libdvdcss 开发者文档以启用日志消息和设置其他相关选项。

GUI 程序日志显示后端程序有问题

如果您使用 GUI 程序并遇到问题,而程序的日志将其归咎于某个后端程序,则尝试使用日志中的后端程序参数重现问题。无论您是否成功重现,都可以将记录的行和您自己的发现报告给 #刻录后端问题 部分提到的地方。

特殊情况:介质错误/写入错误

以下是关于驱动器不兼容介质的一些典型消息。这只能通过使用不同的驱动器或不同的介质来解决。使用不同的程序几乎无济于事。

Brasero 使用 growisofs 后端

BraseroGrowisofs stderr: :-[ WRITE@LBA=0h failed with SK=3h/ASC=0Ch/ACQ=00h]: Input/output error

Brasero 使用 libburn 后端

BraseroLibburn Libburn reported an error SCSI error on write(16976,16): [3 0C 00] Write error

BD-R DL 50GB 在尝试刻录第二层时出错

使用来自 dvd+rw-toolsgrowisofs 刻录 50GB BD-R DL 光盘可能会导致致命错误和介质损坏,例如

$ growisofs -Z /dev/sr0 -J -R -V "label" files
Executing 'mkisofs -J -R -V label files | builtin_dd of=/dev/sr0 obs=32k seek=0'
I: -input-charset not specified, using utf-8 (detected in locale settings)
  0.03% done, estimate finish Fri Jan 29 19:50:36 2016
  0.05% done, estimate finish Fri Jan 29 19:50:36 2016
  0.08% done, estimate finish Fri Jan 29 19:50:36 2016
/dev/sr0: pre-formatting blank BD-R for 49.8GB...
/dev/sr0: "Current Write Speed" is 8.2x4390KBps.
  0.11% done, estimate finish Sat Jan 30 03:29:13 2016
  0.13% done, estimate finish Sat Jan 30 02:10:01 2016
...
 63.20% done, estimate finish Fri Jan 29 20:43:45 2016
:-[ WRITE@LBA=b6d820h failed with SK=3h/WRITE ERROR]: Input/output error
:-( write failed: Input/output error
/dev/sr0: flushing cache
/dev/sr0: closing track
/dev/sr0: closing session
:-[ CLOSE SESSION failed with SK=5h/INVALID FIELD IN CDB]: Input/output error
/dev/sr0: reloading tray

这发生在开始刻录第二层时,在 25GB 的边界。使用来自 cdrtoolscdrecord 可以正常工作。使用“HL-DT-ST BD-RE WH16NS40”LG 刻录机和 Verbatim BD-R DL 6x 光盘(#96911)进行了测试。FS#47797

光盘托盘自动关闭

如果您在弹出 CD 后(无论是使用 eject 命令还是按下驱动器按钮),驱动器光盘托盘在您能取出光盘之前就自动关闭,请尝试以下命令:

# sysctl -w dev.cdrom.autoclose=0

如果这解决了问题,请使更改永久化:

/etc/sysctl.d/60-cdrom-autoclose.conf
dev.cdrom.autoclose = 0

如果以上方法无效,作为最后的手段,您可以从内核中卸载光盘模块:

# rmmod sr_mod

光驱现在应该按预期工作,但将不再挂载光盘。将光盘放入驱动器后,通过以下命令重新激活模块:

# modprobe sr_mod

光盘现在应该可以挂载了。

外部光驱未识别

请参阅 General troubleshooting#Cannot use some peripherals after kernel upgrade

参见