网络上有很多文章描述了从 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 介质可能传递比文件系统更多的块。