为什么人们在从 DVD 制作 ISO 时使用“notrunc”?

为什么人们在从 DVD 制作 ISO 时使用“notrunc”?

网络上有很多文章描述了从 DVD 视频光盘制作 ISO 映像的命令行,如下所示:

dd if=/dev/sr0 of=mydvd.iso conv=noerror,sync,notrunc

我想了解为什么notrunc有必要。据我所知,以及man该命令的页面,notrunc可以防止输出文件被截断。这基本上意味着,如果文件存在,dd则仅覆盖已存在的内容;如果那里有dd不接触的内容(也许通过寻找文件中的另一个点),那么原始内容将保持不变。

制作 ISO 时,您肯定想从一个新的、干净的空文件开始吗?

我唯一能想到的是,在光盘非常糟糕的情况下,使用notrunc使您可以对同一个输出文件多次运行相同的 dd 命令,以便每次填充不同的位。如果输出文件不存在则notrunc无效。

是这样,还是还有其他每个人都指定的原因notrunc

(我不是问如何绕过 CSS、ARccOS 或其他任何东西;只是问dd用法)

答案1

如果我必须猜测的话,根据来自维基百科文章关于dd:

notrunc 转换选项意味着不截断输出文件 - 也就是说,如果输出文件已经存在,则仅替换指定的字节并保留输出文件的其余部分。

使用notrunc是出于性能原因。没有必要为了更新几个字节/千字节/兆字节/等等而重写整个文件。

笔记:这个问题的最终答案必须是 StackOverflow Q&A@garethTheRed评论中引用,标题为:使用 dd 克隆磁盘时为什么要使用 conv=notrunc?。答案非常出色,并且包含一个 C++ 程序,该程序演示了O_TRUNC对块设备和文件的影响。

答案2

如果您想将整个 DVD 复制到一个文件,该文件随后仅包含该 DVD 的有效负载,则不需要此操作。实际上,notrunc 存在隐私风险,如果覆盖大于 DVD 有效负载的旧文件,可能会导致媒体溢出。在这种情况下,旧文件的剩余块将保留附加到复制的 DVD 内容中。因此它们将与文件系统一起复制到新的 DVD 上。

starfry 的评论中建议仅复制 ISO 9660 文件系统的块(如果它实际上是 ISO 9660),这很有帮助,因为 DVD 介质可能传递比文件系统更多的块。

相关内容