为什么我无法使用 dd 复制 DVD?

为什么我无法使用 dd 复制 DVD?

我尝试过dd,dd_救援解救,全部失败。我认为这些工具绕过文件系统并进行按位复制。

dd 被愚弄了,它完成了,但只生成了一个小文件并声明它已完成。

dd_rescuse 和 ddrescue 抱怨读取错误并且速度慢得难以忍受。这些工具在 10 分钟内只能复制几 MB。

重要提示:VLC 无法打开 DVD。

为什么会发生这种情况?为什么这些工具会失败?


任意DVD使光盘可以在 Win7 主机上快速复制。它说 UDF 文件系统已打补丁,奇怪的是,它还说没有坏扇区。 10 分钟即可复制整张光盘。


更新:至于解决办法,请看我的关于超级用户的类似问题

答案1

人们提到用 VLC(显示 DVD 菜单)打开 DVD 可以神奇地使数据可以访问dd,但还没有人解释为什么会这样以及 VLC 如何完成这一壮举。

当我尝试从连接到电视的 Kodi 设备在计算机中播放 DVD 时,通过使用 SMB 通过网络共享 DVD 驱动器的根目录,我成功地复制了此行为。没成功,除非我首先用 VLC 打开 DVD,此时 Kodi 可以神奇地播放这些文件。

这种魔法冒犯了我的感情,所以我开始挖掘。问题的根本原因在于你的 DVD 驱动器对你不利。按照维基百科:

但是,如果驱动器检测到已使用 CSS 编译的光盘,它将拒绝访问标记为受版权保护的逻辑块 (§6.15.3[2])。玩家必须首先执行身份验证握手(§4.10.2.2[2])。

因此,如果您阅读 DVD,您不仅会得到无法播放的加密数据,而且还会导致数据丢失。驱动器不会发回位除非您机器上的某些程序已使用 Linux 内核公开的一些特定于 DVD 的 IOCTL 向驱动器验证了自身身份(在这种情况下,DVD_AUTH)。这就是为什么这表现为 I/O 错误。

有关这些 IOCTL 如何工作的更多信息,请参见此邮件列表来自实施者的帖子,但基本上它们为用户层软件提供了一种与 DVD 驱动器硬件执行秘密握手的方法。

VLC 通过 执行此秘密握手libdvdcss,而这又似乎是在GetBusKey()css.c。据推测,可以编写一个链接的独立程序libdvdcss来解锁驱动器以作为文件访问,而不是依赖于所有 VLC。一旦解锁,驱动器就无法判断哪个程序正在从中读取数据,因此它将(仍然加密但现在可读)位发送给任何人,包括ddcp

(有趣的是,一旦您读取了磁盘上的数据,DVD IOCTL 也是获取用于解密磁盘上数据的解密密钥的唯一真正方法。如果您正在播放文件的复制目录,则您无权访问IOCTL 来获取密钥,所以libdvdcss借助统计密码分析来破解加密.)

答案2

我认为最简单的答案是 dd、dd_rescue 和 ddrescue 并不是为了击败复制保护方案而设计的。他们不对数据的格式做出任何假设,并尝试保持磁盘上原始数据的整体完整性。

在这种情况下,dd我怀疑它由于磁盘上的故意读取错误而终止,这是复制保护方案的一部分。如果您dd在问题中包含命令行输出,将有助于确认这一点。您还可能会发现命令输出中记录了一些读取错误dmesg

您可以通过在命令行上将标志dd传递给文件来复制更多文件。noerror然而,您可能会发现这只会导致最终图像损坏。

答案3

我不知道为什么会这样,但首先用 VLC 打开 DVD,足以查看菜单,然后暂停让 dd 工作。

答案4

人们提到用 VLC(显示 DVD 菜单)打开 DVD 可以神奇地使 dd 可以访问数据,但还没有人解释为什么会这样以及 VLC 如何完成这一壮举。

我也体验了“首先用VLC打开DVD”。因此,当在我的脚本中使用 dd 时,我使用以下序列:

cvlc --run-time 6 --start-time 16 /dev/sr0 vlc://quit 

`dd if=/dev/sr0 of=/home/user/Videos/name.iso`

相关内容