On Wed, Aug 05, 2009 at 03:30:07PM +0800, Zhang Qian wrote:
Or I can call guestfs_list_partitions() and guestfs_lvs() to list
all
partitions and logic volumes in guest disk images, and for each of
them call guestfs_exists() to check if the file I want exist, then
modify the file.
Right.
Guest filesystem detection is non-trivial with many corner cases,
which is why we didn't write it in C, but wrote a higher level Perl
library to do it:
http://git.et.redhat.com/?p=libguestfs.git;a=blob;f=perl/lib/Sys/Guestfs/...
However you don't need to use this library, or Perl, directly. You
can use virt-inspector to get an XML representation of the guest and
mountpoints.
http://libguestfs.org/virt-inspector.1.html
The example below is using a CentOS 5.3 virtual machine. Note the
<mountpoints> section in the XML:
$ virt-inspector --xml CentOS5x32.img
<operatingsystems>
<operatingsystem>
<name>linux</name>
<distro>centos</distro>
<arch>i386</arch>
<major_version>5</major_version>
<minor_version>3</minor_version>
<package_format>rpm</package_format>
<package_management>yum</package_management>
<root>/dev/VolGroup00/LogVol00</root>
<mountpoints>
<mountpoint dev="/dev/VolGroup00/LogVol00">/</mountpoint>
<mountpoint dev="/dev/sda1">/boot</mountpoint>
<mountpoint dev="/dev/VolGroup00/LogVol01">swap</mountpoint>
</mountpoints>
<filesystems>
<filesystem dev="/dev/VolGroup00/LogVol00">
<label></label>
<uuid>12f2fd13-ac90-4563-a097-391663a17005</uuid>
<type>ext3</type>
<content>linux-root</content>
<spec>/dev/VolGroup00/LogVol00</spec>
</filesystem>
<filesystem dev="/dev/VolGroup00/LogVol01">
<type>swap</type>
<spec>/dev/VolGroup00/LogVol01</spec>
</filesystem>
<filesystem dev="/dev/sda1">
<label>/boot</label>
<uuid>18962ebf-6b17-4380-a179-48f1f6a7d973</uuid>
<type>ext3</type>
<content>linux-grub</content>
<spec>LABEL=/boot</spec>
</filesystem>
</filesystems>
[lots of other stuff omitted]
Rich.
--
Richard Jones, Emerging Technologies, Red Hat
http://et.redhat.com/~rjones
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages.
http://et.redhat.com/~rjones/libguestfs/
See what it can do:
http://et.redhat.com/~rjones/libguestfs/recipes.html