使用 dd 和 conv=sparse 來建立分割區或完整磁碟映像?

使用 dd 和 conv=sparse 來建立分割區或完整磁碟映像?

由於某種原因,關於使用 dd 創建“較小”圖像檔案似乎沒有太多問題或答案轉換=稀疏選項在這裡。

因此,當使用 dd 進行影像建立時,我可以安全地使用egdd if=/dev/sda of=/media/儲存設備/sda.img 轉換 = 稀疏獲得在目標上使用(少得多)空間的圖像檔案?

不知道這是否重要,但在這種情況下,來源將是具有 EXT4 檔案系統的 SSD,並且僅使用 15%(因為它很新),目標也將使用 EXT4 fs。

或者這可能是一個相當糟糕的主意(在某些情況下)並且可能會導致問題(稍後,例如當我需要恢復它時)?

我還想知道當目標是網路安裝或檔案系統時這是否有效?

目標是獲得一個分割區或(甚至更好)整個磁碟的映像文件,該文件不會佔用比所需更多的空間,同時保持其易於安裝和可用。

額外的壓縮並不是真正需要或想要的,而且我猜它通常也會使生成的映像不再可安裝,所以我可以沒有它。

我知道 Clonezilla 可以做一些事情,例如只保存使用過的扇區,但我不喜歡它的局限性,例如由於鏡像格式限制,無法瀏覽或掛載鏡像。 (當然 dd 已經在每個系統上可用。)

提前謝謝了

答案1

我發現實現此目的的最簡單方法是使用適當的工具(Linux 上的 fstrim,無論 Windows 上呼叫的工具是什麼)修剪磁碟機上的所有分割區,然後使用gdisk每個dd分割區將 gpt 分割區表轉儲到檔案中壓縮器(我通常使用zstd 來提高速度)並將輸出壓縮圖像與分區表轉儲一起保存。您將把每個分割區映像壓縮到低於已使用空間的大小,並且稍後將映像還原到空磁碟機上是微不足道的。我對每台全新筆記型電腦都執行此操作,以便在對驅動器進行核攻擊並安裝Linux 之前拍攝乾淨的工廠映像,如果我需要將機器送去保修維修或決定出售它,則可以輕鬆地將其恢復到出廠狀態。

答案2

無法回答是否conv=sparse明智/安全使用,但dd如果與壓縮一起使用(我使用 zstd)並且“準備”來源磁碟,您將獲得稀疏結果。

我拍攝了安裝了 Win 11 的 256GB SSD 的影像。

在 Windows 中,我修剪了 NTFS 分割區,將所有可用空間寫入零,然後再次進行修剪:

修剪:defrag C: /L

Windows 內的可用空間為零:(sdelete -z C:來自 sysinternals)

dd我用和從 Linux 製作了一個映像ztd

dd bs=1024K if="/dev/nvme0n1" | pv --size 256060514304 | zstd --quiet --force -o "/mnt/data/image.img.zst"

此影像的寫入和壓縮時間約為150-350MB/秒

之後,當遇到來源磁碟的空閒空間時,資料會在以下位置處理:1.2GB:-) 對於剩餘的 220GB 可用空間,影像檔案僅增長了約 100KB。

我想說這和「真正的」稀疏一樣好。圖像檔案的大小是19.3GB。 W11 安裝大小為 48GB(如果刪除 Windows 安裝上的頁面文件,可能會節省一些額外的 MB/GB)。

恢復影像

zstd --quiet --stdout --decompress "/mnt/disk1/image.img.zst" | pv | dd bs=1024K of="/dev/nvme0n1"

額外資訊:
將 Linux 中已安裝的分割區清除cat /dev/zero | pv > /mnt/dis1/zero.dat
另一個例子:W10 LTSC,安裝大小 (C:) 18.2GB(無頁面檔案):
帶有 dd 的圖片大小:6.26GB
帶 dism 的圖片大小:6.28GB

相關內容