是否可以即時掛載 gzip 壓縮的 dd 映像?
我喜歡在第一次備份系統時創建映像備份。在這第一次之後,我使用 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