guestfs
libguestfs is a set of tools for accessing and modifying virtual machine (VM) disk images. You can use this for viewing and editing files inside guests, scripting changes to VMs, monitoring disk used/free statistics, P2V, V2V, performing partial backups, cloning VMs, and much else besides.
libguestfs can access nearly any type of filesystem including: all known types of Linux filesystem (ext2/3/4, XFS, btrfs etc), any Windows filesystem (VFAT and NTFS), any Mac OS X and BSD filesystems,LVM2 volume management, MBR and GPT disk partitions, raw disks,qcow2, VirtualBox VDI, VMWare VMDK, CD and DVD ISOs, SD cards, and dozens more. libguestfs doesn't need root permissions.
All this functionality is available through a convenient shell calledguestfish, or use virt-rescue to get a rescue shell for fixing unbootable virtual machines.
libguestfs is also a library that can be linked with C and C++management programs and has bindings for Perl, Python, Ruby, Java,OCaml, PHP, Haskell, Erlang and C#. You can also use it from shell scripts or the command line. Using our FUSE module you can also mount guest filesystems on the host.
There is a subproject to allow you to merge changes into the Windows Registry in Windows guests. You can examine unknown disk images to find out what they contain.
libguestfs is a mature program, in development since Feb 2009, with a 150 page manual, deployed in enterprise environments, and with many successful users.
Some projects using libguestfs today: Aeolus cloud project, JBoss Boxgrinder, virt-tools, virt-v2v.