Command-Line

是否可以即時掛載 gzip 壓縮的 dd 映像?

  • February 27, 2022

我喜歡在第一次備份系統時創建映像備份。在這第一次之後,我使用 rsync 進行增量備份。

我平時的鏡像備份如下:

掛載並清零空白空間:

dd if=/dev/zero of=temp.dd bs=1M

rm temp.dd

umount 和 dd 壓縮驅動器

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz

為了讓系統恢復正常,我通常會做一個

gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K

這真的很簡單,可以讓我保存“整個驅動器”,但實際上只是節省了已用空間。

這是問題所在。假設我做了上述但不是在乾淨的系統上,並且沒有足夠快地進行 rsync 備份,並且圖像上有我想要訪問的文件。假設我沒有儲存空間來實際解壓縮並將圖像 dd 到驅動器,但想掛載圖像以從中獲取單個文件….這可能嗎?

通常,不會壓縮 dd 映像,這將允許您使用-o loop… 掛載映像,但這不是我的情況…

有什麼建議可以即時安裝壓縮的 img 嗎?

是否會使用AVFS來“掛載”gz 文件,然後掛載內部 dd.img 工作(我不這麼認為……但需要驗證……)?

這取決於磁碟映像是完整的磁碟映像,還是只是一個分區。

清洗隔板

如果磁碟處於良好的工作狀態,如果將磁碟上的空白空間用零清洗,您將獲得更好的壓縮。如果磁碟出現故障,請跳過此步驟。

如果要對整個磁碟進行映像,則需要清洗磁碟上的每個分區。

*注意:請注意,您要將 設置為已安裝分區中of的*文件,而不是分區本身!

mkdir image_source
sudo mount /dev/sda1 image_source
dd if=/dev/zero of=image_source/wash.tmp bs=4M
rm image_source/wash.tmp
sudo umount image_source

製作分區映像

mkdir image
sudo dd if=/dev/sda1 of=image/sda1_backup.img bs=4M

其中sda是設備的名稱,1是分區號。如果要映像不同的設備或分區,請針對您的系統進行相應調整。

製作整個磁碟映像

mkdir image
sudo dd if=/dev/sda of=image/sda_backup.img bs=4M

設備名稱在哪裡sda。如果您想對不同的設備進行映像,請針對您的系統進行相應調整。

壓縮

製作一個包含完整未壓縮圖像的“squashfs”圖像。

sudo apt-get install squashfs-tools
mksquashfs image squash.img

流壓縮

為避免使單獨的臨時文件佔磁碟的全部大小,您可以流式傳輸到 squashfs 映像。

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

掛載壓縮分區映像

先掛載 squashfs 鏡像,然後掛載儲存在掛載的 squashfs 鏡像中的分區鏡像。

mkdir squash_mount
sudo mount squash.img squash_mount

現在您已安裝壓縮映像,安裝映像本身(即在 squashfs 映像內)

mkdir compressed_image
sudo mount squash_mount/sda1_backup.img compressed_image

現在您的圖像已安裝在compressed_image.

編輯:如果您現在只想將磁碟映像恢復到分區上(而不是安裝它來瀏覽/讀取內容),只需dd將映像squash_mount/sda1_backup.img放在目標上而不是mount.

掛載壓縮的全盤鏡像

這需要您使用一個名為 kpartx 的包。kpartx 允許您將單個分區掛載到完整的磁碟映像中。

sudo apt-get install kpartx

首先,掛載包含完整磁碟映像的壓縮分區

mkdir compressed_image
sudo mount squash.img compressed_image

現在您需要為完整磁碟映像中的每個分區創建設備:

sudo kpartx -a compressed_image/sda_backup.img

這將為完整磁碟映像中的分區創建設備,/dev/mapper/loopNpP其中N是分配給環回設備的編號,P是分區編號。例如:/dev/mapper/loop0p1

現在您可以將各個分區掛載到完整磁碟映像中:

mkdir fulldisk_part1
sudo mount /dev/mapper/loop0p1 fulldisk_part1

引用自:https://unix.stackexchange.com/questions/31669