網路上有很多文章描述了從 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 媒體可能會比檔案系統提供更多的區塊。