Linux 上的壓縮磁碟映像

Linux 上的壓縮磁碟映像

我剛買了一台配備更大硬碟的新電腦。我想我複製了所有重要文件,但為了確定,我想保留舊磁碟的磁碟映像。為了節省空間,我想壓縮它,但我沒有找到安裝壓縮映像的選項。

我的目標:

  • 結果必須易於訪問
  • 在我可以訪問任何內容之前無需解壓整個內容
  • 檔案應該能夠快速定位 - 無 TAR/CPIO 檔案
  • 所需空間應小於僅複製檔案的空間

因此,理想情況下,我正在尋找一個只讀的壓縮檔案系統,我可以在檔案中建立它並自動增長。

答案1

使用取證分析軟體,例如蓋馬格(開源,sourceforge.net)。它有一個漂亮的用戶介面,允許快速創建整個硬碟的壓縮磁碟映像。

使用「進階取證影像 (.aff)」 這將建立一個單一的壓縮檔案(當然,它也會建立一個 .info 檔案)。

修改預設壓縮率1(最快,但壓縮最少)。如果您有一台具有大量內核的快速計算機,您可以透過建立來變更此設定/etc/guymager/local.cfg

AffCompression = 3

9是最好但最慢的壓縮。3提供良好的壓縮和良好的性能。

更新

安裝並不像看起來那麼簡單。首先,你需要AFFLIB(烏班圖:)aptitude install afflib-tools。現在您可以使用以下命令取得原始磁碟映像[affuse][3] <image> <mount-point>

但由於某種原因,安裝原始映像失敗。parted說第一個分區以1048576Bbut開頭

mount -t ext4 -o loop,ro,offset=1048576 /mnt/backup.raw /mnt/backup

失敗並出現常見的無用安裝錯誤:

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

dmesg說:

EXT4-fs (loop0): VFS: Can't find ext4 filesystem

答案2

正如 Matthias Krull 在上面的評論中所建議的,qcow2 是一種很好的格式,它支援壓縮來儲存磁碟映像。以下是壓縮/dev/sda為壓縮影像檔案的範例命令sda.qcow2。預設使用 zlib 壓縮,但我認為 zstd 可能有更好的壓縮比。使用 8 個執行緒來提高吞吐量,但您應該將其變更為您擁有的處理器核心的數量。

qemu-img convert -c -p -S 512 -o compression_type=zstd" -f raw -O qcow2 -m 8 \
  /dev/sda sda.qcow2

存取鏡像可以使用唯讀塊設備NBD,網路塊設備,如下:

modprobe nbd
qemu-nbd -r -c /dev/nbd0 sda.qcow2
kpartx -av /dev/nbd0

mount然後可以使用中的適當設備正常安裝檔案系統/dev/mapper

答案3

對於支援區塊壓縮的檔案系統,一種選擇是將磁碟映像直接儲存為檔案。我知道 BTRFS 支持這一點,但也可能有其他支援。對於 BTRFS,您可能需要啟用掛載選項compress-force來覆寫不可壓縮啟發式。您還需要建立一個稀疏文件。這可以透過 來完成dd,如本例所示:

dd if=/dev/sda of=/mount/btrfs/sda.img conv=sparse,fsync iflag=nocache oflag=nocache

這將創建一個稀疏文件,因此零扇區不會佔用空間,並且 BTRFS 將壓縮可壓縮的區塊(假設您確實打開了它)。此compsize工具可用於查看檔案的壓縮程度。使用du只會顯示未壓縮檔案減去漏洞的大小,因此不準確。

若要掛載映像中的任何檔案系統,可以使用下列命令:

LOOPDEV=$(losetup --show -f /mount/btrfs/sda.img)
kpartx -av "$LOOPDEV"
mount /dev/mapper/"$LOOPDEV"p3 # To mount the 3rd partition

如果您不使用具有本機壓縮的檔案系統,例如。ext4,您仍然可以使用此方法,將磁碟映像包裝在 BTRFS 檔案系統映像中。這可能看起來像這樣:

truncate -s 100G backup-sda.btrfs.img
mkfs.btrfs backup-sda.btrfs.img
mount -o compress-force=zstd:9 backup-sda.btrfs.img /media/tmp
cd /media/tmp
# Now do commands to create disk image as above

與使用 的方法相比,此方法可以更好地控制壓縮演算法和壓縮級別qemu-img convert,後者僅允許選擇壓縮方法,而不能選擇級別,並且可用的壓縮方法較少。

相關內容