为什么不能像普通数据 CD 那样“dd”CD 音频?

为什么不能像普通数据 CD 那样“dd”CD 音频?

我的朋友尝试使用服务器通过网络导出 cdrom 设备nbd,但我们注意到,虽然它适用于数据 CD,但音频 CD 的行为方式与普通数据磁盘不同。我说的不是文件系统的存在与否,而是原始块级访问。

虽然我知道音频 CD 不能真正在文件级别进行解释,因此不能真正,我知道它们包含大量音频专用的附加信息,我知道它们实际上没有像数据磁盘那样的 CRC,因此整个数据读取过程是不同的,我仍然不太明白为什么它们不能像普通块设备一样从或读取/dev/sr0。CDDA/dev/cdrom有什么特别之处,以至于普通软件不能在块级别读取它们?

我的意思是,归根结底它只是字节流 - 如果不像块设备,那么就像任何字符设备一样,那么为什么dd不能catnbd任何其他块/字符设备一样使用它们?是否有一些实际的技术原因,还是因为没有人找到在 Linux 中实现对 CDDA 介质的这种访问的合理用例?

答案1

音频 CD(也称为光盘,在专有红色的书) 是 CD 最古老的格式。该格式的灵感来自音频记录,因此您有一个带有连续数据的螺旋轨道,并且与这些数据交织的是时间信息。没有适当的块头。最小的信息单位是一帧,即 1/75 秒,其中包含 2352 个数据字节(对于 2 个通道、2 个样本/字节、44.1 kHz)。

请注意,这不是 2 的幂,甚至不能除以 256 或 512。因此将音频帧视为数据块有点不方便。除此之外,早期的 CD 驱动器无法始终正确定位,因此如果您告诉它“在 12 分 4 秒 5 1/75 秒处读取帧”,它有时会提前或推迟几个字节开始。这就是为什么有这么多程序可以“正确”读取音频 CD(例如cdparanoia)。

现在将其与数据 CD(也称为 CD-ROM,在黄皮书中指定)进行对比:它们采用音频帧的 2352 个字节,并使用其中一些作为标头信息来识别块。他们还添加了另一级纠错,因此音频帧的 2352 个字节变成了数据帧中的 2048 个字节。

现在我们有了 2 的幂作为块大小,我们有了适当的标头并可以进行精确的查找,而且我们真的可以假装这只是一个块设备。

所以这就是为什么默认情况下音频 CD 不被视为块设备,而数据 CD 则被视为块设备的原因。

尽管如此,没有理由不将音频 CD 上的信息在文件系统中提供,例如,作为每个音轨的 WAV 文件。事实上,有一些开源项目,例如彩色多普勒或者其他我现在想不起来了使用 FUSE 的,以这种方式表示 CD 数据。但是,您仍然会遇到没有抖动校正等问题,因此您最好使用类似cdparanoia.

内核人员还认为这是一个馊主意

答案2

音频 CD 的 CDDA 是在有人为 CD-ROM 创建文件系统之前创建的(首先是 High Sierra,后来是 ISO 9660)。在此之前,CD 根本不能用作普通数据磁盘。在此之后,音频 CD 仍然必须向后兼容旧 CD 播放器,因此他们无法改变这一点。

相关内容