如果我有一個很大的 zip 文件並向其中添加一個文件,Windows 會創建該文件的副本,然後刪除原始文件,從而導致非常大的“寫入放大”,還是只會添加到該文件中?
(也許它是 SSD 還是 HDD 很重要?)
答案1
雖然 壓縮檔案格式 被定義為允許快速追加而無需重新複製整個存檔,我不知道有哪個 Zip/7Zip 程式可以做到這一點。
Zip 檔案包含一個內部目錄,允許直接存取任何包含的項目。目錄儲存在存檔的末尾,包括目錄的所有項目都由標頭標識。
原則上,將新項目附加到存檔可以透過將其附加到存檔文件,然後附加新目錄來完成。然而,在新目錄完全寫入並刷新到磁碟之前發生電腦故障,可能會在存檔的末尾留下垃圾。
雖然理論上這仍然可以透過從存檔末尾掃描最後寫入目錄的標頭來恢復,但僅期望在文件末尾找到目錄的程序將會失敗,並宣布存檔已損壞。
我已經測試了將文件附加到兩個 Zip 產品和 7Zip 的存檔中,並在操作之前和之後查詢存檔的磁碟位址。我為此使用了
fsutil file queryextents
命令。
這三個產品都沒有嘗試優化追加操作。在附加新項目時,這三個人都重新複製了整個存檔。
我的結論是,雖然可能存在這樣的最佳化產品,但最好測試一下您的產品是否是這樣的。如果沒有測試,預設的假設應該是存檔將被重新複製。