I like create an image backup for the first time I'm backing up a system. After this first time I use rsync to do incremental backups.
My usual image backup is as follows:
Mount and zero out the empty space:
dd if=/dev/zero of=temp.dd bs=1M
rm temp.dd
umount and dd the drive while compressing it
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
to put the system back to normal, I will usually do a
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
This is really straightforward and allows my to save the 'whole drive' but really just save the used space.
Here is the problem. Lets say I do the above but not on a clean system and don't get the rsync backups going soon enough and there are files that I want to access that are on the image. Let's say I don't have the storage space to actually unzip and dd the image to a drive but want to mount the image to get individual files off of it…. Is this possible?
Normally, one wouldn't compress the dd image, which will allow you to just mount the image using -o loop
… but this isn't my case…
Any suggestions for mounting the compressed img on the fly?
Would using AVFS to 'mount' the gz file then mounting the internal dd.img work (I don't think so… but would need verification…)?
Best Answer
It depends on whether the disk image is a full disk image, or just a partition.
Washing the partition(s)
If the disk is in good working condition, you will get better compression if you wash the empty space on the disk with zeros. If the disk is failing, skip this step.
If you're imaging an entire disk then you will want to wash each of the partitions on the disk.
CAUTION: Be careful, you want to set the
of
to a file in the mounted partition, NOT THE PARTITION ITSELF!Making a Partition Image
Where
sda
is the name of the device, and1
is the partition number. Adjust accordingly for your system if you want to image a different device or partition.Making a Whole Disk Image
Where
sda
is the name of the device. Adjust accordingly for your system if you want to image a different device.Compression
Make a "squashfs" image that contains the full uncompressed image.
Streaming Compression
To avoid making a separate temporary file the full size of the disk, you can stream into a squashfs image.
Mounting a compressed partition image
First mount the squashfs image, then mount the partition image stored in the mounted squashfs image.
Now you have the compressed image mounted, mount the image itself (that is inside the squashfs image)
Now your image is mounted under
compressed_image
.EDIT: If you wanted to simply restore the disk image onto a partition at this point (instead of mounting it to browse/read the contents), just
dd
the image atsquash_mount/sda1_backup.img
onto the destination instead of doingmount
.Mounting a compressed full disk image
This requires you to use a package called kpartx. kpartx allows you to mount individual partitions in a full disk image.
First, mount your squashed partition that contains the full disk image
Now you need to create devices for each of the partitions in the full disk image:
This will create devices for the partitions in the full disk image at
/dev/mapper/loopNpP
where N is the number assigned for the loopback device, and P is the partition number. For example:/dev/mapper/loop0p1
.Now you have a way to mount the individual partitions in the full disk image: