33.7. Accessing data from a guest disk image
There are various methods for accessing the data from guest image files. One common method is to use the
kpartx
tool, covered by this section, to mount the guest file system as a loop device which can then be accessed.
The
kpartx
command creates device maps from partition tables. Each guest storage image has a partition table embedded in the file.
The libguestfs and guestfish packages, available from the EPEL repository, allow advanced modification and access to guest file systems. The libguestfs and guestfish packages are not covered in this section at this time.
Warning
Guests must be offline before their files can be read. Editing or reading files of an active guest is not possible and may cause data loss or damage.
Procedure 33.1. Accessing guest image data
- Install the kpartx package.
# yum install kpartx
- Use kpartx to list partition device mappings attached to a file-based storage image. This example uses a image file named guest1.img.
# kpartx -l /var/lib/libvirt/images/guest1.img loop0p1 : 0 409600 /dev/loop0 63 loop0p2 : 0 10064717 /dev/loop0 409663
guest1 is a Linux guest. The first partition is the boot partition and the second partition is an EXT3 containing the root partition. - Add the partition mappings to the recognized devices in
/dev/mapper/
.# kpartx -a /var/lib/libvirt/images/guest1.img
- Test that the partition mapping worked. There should be new devices in the /dev/mapper/ directory
# ls /dev/mapper/ loop0p1 loop0p2
The mappings for the image are named in the formatloopXpY
.
- Mount the loop device which to a directory. If required, create the directory. This example uses
/mnt/guest1
for mounting the partition.# mkdir /mnt/guest1 # mount /dev/mapper/loop0p1 /mnt/guest1 -o loop,ro
- The files are now available for reading in the
/mnt/guest1
directory. Read or copy the files. - Unmount the device so the guest image can be reused by the guest. If the device is mounted the guest cannot access the image and therefore cannot start.
# umount /mnt/tmp
- Disconnect the image file from the partition mappings.
# kpartx -d /var/lib/libvirt/images/guest1.img
The guest can now be started again.
Accessing data from guest LVM volumes
Many Linux guests use Logical Volume Management (LVM) volumes. Additional steps are required to read data on LVM volumes on virtual storage images.
- Add the partition mappings for the guest1.img to the recognized devices in the
/dev/mapper/
directory.# kpartx -a /var/lib/libvirt/images/guest1.img
- In this example the LVM volumes are on a second partition. The volumes require a rescan with the
vgscan
command to find the new volume groups.# vgscan Reading all physical volumes . This may take a while... Found volume group "VolGroup00" using metadata type lvm2
- Activate the volume group on the partition (called
VolGroup00
by default) with thevgchange -ay
command.# vgchange -ay VolGroup00 2 logical volumes in volume group VolGroup00 now active.
- Use the
lvs
command to display information about the new volumes. The volume names (theLV
column) are required to mount the volumes.# lvs LV VG Attr Lsize Origin Snap% Move Log Copy% LogVol00 VolGroup00 -wi-a- 5.06G LogVol01 VolGroup00 -wi-a- 800.00M
- Mount
/dev/VolGroup00/LogVol00
in the/mnt/guestboot/
directory.# mount /dev/VolGroup00/LogVol00 /mnt/guestboot
- The files are now available for reading in the
/mnt/guestboot
directory. Read or copy the files. - Unmount the device so the guest image can be reused by the guest. If the device is mounted the guest cannot access the image and therefore cannot start.
# umount /mnt/
- Disconnect the volume group VolGroup00
# vgchange -an VolGroup00
- Disconnect the image file from the partition mappings.
# kpartx -d /var/lib/libvirt/images/guest1.img
The guest can now be restarted.