为什么我不能用dd复制DVD?


12

我尝试了dd,dd_rescueddrescue,都失败了。我认为这些工具会绕过文件系统并进行按位复制。

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

dd_rescuse和ddrescue抱怨读取错误,并且运行缓慢。这些工具在10分钟内只能复制几MB。

为什么会这样,这些工具为什么会失败?


AnyDVD使光盘可在一秒钟之内在Win7主机上复制。它说UDF文件系统已打补丁,奇怪的是,它还说没有坏扇区。整个光盘可以在10分钟内复制。
更新:至于解决方案,请参阅我对superuser的类似问题

Answers:


16

我认为最简单的答案是dd,dd_rescue和ddrescue并非旨在挫败复制保护方案。他们对数据的格式不做任何假设,并试图维护磁盘上所有原始数据的完整性。

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

您可以dd通过noerror在命令行上将标志传递给文件来复制更多文件。但是,您可能会发现,这只会使您的最终映像损坏。


谢谢,支持。如果我绕过文件系统并执行“按位”复制,并用零字节替换读取错误,那还会产生损坏的图像吗?毕竟,我只将数据替换为零字节,无论如何都无法读取。稍后将包含dmesg输出,我没有DVD。
阿里

真正确定最终图像是否“损坏”的唯一方法是确定其是否可用。其中一部分将确保仅将实际损坏的块读取为零,而不会读取周围的块。这可能意味着您需要将bs = 512(来自CD / DVD块大小的内存)参数传递给dd。确实,尽管dd_rescue被设计用来做这种事情。这可能会花费一些时间,但会尝试丢失尽可能少的数据量。
Richm 2012年

好的,谢谢您的帮助。我搞砸了太多的水平。我最终使用了AnyDVD。
阿里

15

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

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

这种魔术冒犯了我的情感,所以我开始挖掘。问题的根本原因是DVD驱动器对您不利。根据维基百科

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

因此,不仅您会获得加密的数据,而且如果您阅读DVD则无法播放它。除非您的计算机上的某些程序已使用Linux内核公开的某些DVD专用IOCTL(在本例中为DVD_AUTH)对驱动器进行了身份验证,否则该驱动器不会将这些位发送回。这就是为什么这表现为I / O错误。

有关实现这些IOCTL的更多信息,可从实现它们的人员的邮件列表中获得,但基本上,它们为Userland软件提供了一种与DVD驱动器硬件执行秘密握手的方式。

VLC通过这种秘密握手方式进行了交换libdvdcss,这似乎可以GetBusKey()css.c。大概libdvdcss可以编写一个与之链接的独立程序,以解锁驱动器以作为文件进行访问,而不必依赖于所有VLC。解锁后,驱动器无法确定正在读取哪个程序,因此它将(仍加密但现在可读的)位发回给任何人,包括ddcp

(有趣的是,DVD IOCTL也是获得用于读取磁盘上数据的解密密钥的唯一真实方法,一旦您读取它即可。如果您正在播放文件的复制目录,则无权访问IOCTL获取密钥,因此诉诸libdvdcss统计密码分析来破解加密。)


谢谢。我的DVD无法通过VLC打开;不幸的是,我的情况要复杂得多。尽管如此,仍支持您的答案。
阿里(Ali)

这似乎也对我有用。尽管vlc后来打开的并不是所有的iso都能正确显示dvd菜单(虽然不是主要功能-我只是将其作为光盘的备份而不会丢失内容,这对我来说很重要)。我怀疑类似makemkvhandbrake可能也具有与相同的工具vlc。顺便说一句,这对于我vlc在Windows上dd运行以及从Linux VM内运行都有效。
LRE

很好的解释!谢谢亲。这说明了一切。我有同样的困惑,但是没有锻炼维基百科的文章。
Shi B.

1
还有一个程序cssauth,可以从命令行解锁DVD。从本质上讲testdvd /dev/dvd,就是这样。
Antonis Christofides

14

我不确定为什么可以这样做,但是先用VLC打开DVD,仅足以查看菜单,然后暂停即可使dd工作。


谢谢。我的DVD无法通过VLC打开;不幸的是,我的情况要复杂得多。
阿里

在评论之时为我工作,但我以图腾开头(没有vlc)。奇怪的。
凯尔(Kyle)

2

我可以确认使用VLC打开光盘会绕过保护。但是,在使用时dd,我必须在打开VLC之后使用此命令(通过加载光盘并使用VLC中公开的目录来发现)。

dd if=/dev/sr0 of=image_of_disc.iso

这与我读过的很多文章都说此命令应该起作用不同:

dd if=/dev/cdrom of=image_of_disc.iso - NON-WORKING

证明:

me@me:~$ dd if=/dev/cdrom of=/media/me/image_of_disc.iso
dd: error reading ‘/dev/cdrom’: Input/output error
103336+0 records in
103336+0 records out
52908032 bytes (53 MB) copied, 2.04212 s, 25.9 MB/s

me@me:~$ dd if=/dev/sr0 of=/media/me/image_of_disc.iso
dd: error reading ‘/dev/sr0’: Input/output error
2846992+0 records in
2846992+0 records out
1457659904 bytes (1.5 GB) copied, 314.351 s, 4.6 MB/s
me@me:~$ 


0

人们提到使用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`

2
你到底在说什么 您为什么引用“没有人解释为什么是这样以及如何……?” 您是否要回答这个问题?为什么dd在反引号中显示命令?………………………………………………………………请不要发表评论;编辑  您的答案,使其更清晰,更完整。
G-Man说'Resstate Monica''Apr

@ G-ManSays'ReinstateMonica'基本上是使用命令行vlc在没有GUI的情况下提出的答案,从16秒的视频开始播放6秒钟,然后播放vlc。数字有些随意,但这是一个不错的选择。
Shi B.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.