libguestfs is the library I’m writing that lets you examine and modify any virtual machine disk image, offline or online.
I spent about 18 hours finding a bug in the LVM parsing code, but that bug has now been squashed and as of version 0.4 on the website you can examine PVs, VGs and LVs, as well as listing devices and partitions.
Next up: language bindings for Perl, OCaml and Python.
(C and C++ and shell scripting access already exist).
$ guestfish Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help with commands 'quit' to quit the shell ><fs> add /mnt/share/tmp/RHEL52PV32.img ><fs> run ><fs> pvs /dev/sda2 ><fs> lvs /dev/VolGroup00/LogVol00 /dev/VolGroup00/LogVol01 ><fs> mount /dev/VolGroup00/LogVol00 / ><fs> ls / bin boot dev etc home [...]