1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
|
=head1 NAME
guestfs-testing - manual testing of libguestfs, you can help!
=head1 DESCRIPTION
This page has manual tests you can try on libguestfs. Everyone has a
slightly different combination of platform, hardware and guests, so
this testing is very valuable. Thanks for helping out!
Tests marked with a B<*> (asterisk) can B<destroy data> if you're not
careful. The others are safe and won't modify anything.
These tests B<require libguestfs E<ge> 1.22>.
You can report bugs you find through this link:
L<https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools>
or post on the mailing list (registration is B<not> required, but if
you're not registered then you'll have to wait for a moderator to
manually approve your message):
L<https://lists.libguestfs.org>
=head1 TESTS
=head2 Run libguestfs-test-tool
Run:
libguestfs-test-tool
This command does a very simple, non-destructive test that basic
libguestfs is functioning. You don't need to run it as root.
If it I<doesn't> print C<===== TEST FINISHED OK =====>, report it as a
bug. It is very important that you include the B<complete, unedited>
output of C<libguestfs-test-tool> in your bug report. See the
L</BUGS> section at the end of this page.
=head2 Check KVM acceleration is being used.
If your host has hardware virt acceleration, then with a hot cache
libguestfs should be able to start up in a few seconds. Run the
following command a few times:
time guestfish -a /dev/null run
After a few runs, the time should settle down to a few seconds (under
3 seconds on fast 64 bit hardware).
If the command above does not work at all, use
L<libguestfs-test-tool(1)>.
=head2 Check which version of libguestfs, qemu, libvirt, etc is being used.
Look at the output of C<libguestfs-test-tool> and check:
=over 4
=item *
Which version of libguestfs is being used? Near the beginning of the
output you'll see a line like:
library version: 1.22.0fedora=19,release=1.fc19,libvirt
=item *
Is libvirt being used? You can tell the difference by looking
for the backend:
guestfs_get_backend: direct
or:
guestfs_get_backend: libvirt
=item *
Which version of qemu is being used? It may be printed out:
libguestfs: qemu version 1.5
=item *
Which kernel is being used? L<supermin(1)> will try to pick the
latest kernel installed on your machine. You can see the version in
the appliance output, eg:
[ 0.000000] Linux version 3.9.2-200.fc18.x86_64 [...]
=back
=head2 Try to open a local guest image with guestfish.
You can use any guest disk image for this test. Make sure you use the
C<--ro> flag so that L<guestfish(1)> will open the disk image
read-only.
guestfish --ro -a /path/to/disk.img -i
If the command is successful, it should print out the guest operating
system name and put you at the guestfish C<E<gt>E<lt>fsE<gt>> prompt.
You can use guestfish commands like S<C<ll />> to look inside the disk
image. To exit, type C<exit>.
If you get an error, try enabling debugging (add C<-v> to the command
line). Also make sure that L<libguestfs-test-tool(1)> succeeds.
=head2 Try to open a remote guest image with guestfish.
You may also have to disable libvirt by setting this:
export LIBGUESTFS_BACKEND=direct
If you have a disk image available over HTTP/FTP, try to open it.
guestfish --ro -i --format=raw -a http://www.example.com/disk.img
For SSH you will need to make sure that ssh-agent is set up so you
don't need a password to log in to the remote machine. Then a command
similar to this should work:
guestfish --ro -i --format=raw \
-a ssh://remote.example.com/path/to/disk.img
If you get an error, try enabling debugging (add C<-v> to the command
line). Also make sure that L<libguestfs-test-tool(1)> succeeds.
=head2 Run virt-alignment-scan on all your guests.
Run L<virt-alignment-scan(1)> on guests or disk images:
virt-alignment-scan -a /path/to/disk.img
or:
virt-alignment-scan -d Guest
Does the alignment report match how the guest partitions are aligned?
=head2 Run virt-cat on some files in guests.
L<virt-cat(1)> can display files from guests. For a Linux guest, try:
virt-cat LinuxGuest /etc/passwd
A recent feature is support for Windows paths, for example:
virt-cat WindowsGuest 'c:\windows\win.ini'
An even better test is if you have a Windows guest with multiple
drives. Do C<D:>, C<E:> etc paths work correctly?
=head2 B<*> Copy some files into a B<shut off> guest.
L<virt-copy-in(1)> can recursively copy files and directories
into a guest or disk image.
virt-copy-in -d Guest /etc /tmp
This should copy local directory F</etc> to F</tmp/etc> in the guest
(recursively). If you boot the guest, can you see all of the copied
files and directories?
Shut the guest down and try copying multiple files and directories:
virt-copy-in -d Guest /home /etc/issue /tmp
=head2 Copy some files out of a guest.
L<virt-copy-out(1)> can recursively copy files and directories
out of a guest or disk image.
virt-copy-out -d Guest /home .
Note the final space and period in the command is not a typo.
This should copy F</home> from the guest into the current directory.
=head2 Run virt-df.
L<virt-df(1)> lists disk space. Run:
virt-df
You can try comparing this to the results from L<df(1)> inside the
guest, but there are some provisos:
=over 4
=item *
The guest must be idle.
=item *
The guest disks must be synched using L<sync(1)>.
=item *
Any action such as booting the guest will write log files causing the
numbers to change.
=back
We don’t guarantee that the numbers will be identical even under these
circumstances. They should be similar. It would indicate a bug if
you saw greatly differing numbers.
=head2 Try importing virt-df CSV output into a spreadsheet or database.
Run:
virt-df --csv > /tmp/report.csv
Now try to load this into your favorite spreadsheet or database. Are
the results reproduced faithfully in the spreadsheet/database?
L<http://www.postgresql.org/docs/8.1/static/sql-copy.html>
L<http://dev.mysql.com/doc/refman/5.1/en/load-data.html>
=head2 B<*> Edit a file in a B<shut off> guest.
L<virt-edit(1)> can edit files in guests. Try this command on
a RHEL or Fedora guest:
virt-edit LinuxGuest /etc/sysconfig/network
On other Linux guests try editing other files such as:
virt-edit LinuxGuest /etc/motd
Are the changes seen inside the guest when it is booted?
=head2 Display the filesystems / partitions / LVs in a guest.
L<virt-filesystems(1)> can be used to display filesystems in
a guest. Try this command on any disk image or guest:
virt-filesystems -a /path/to/disk.img --all --long -h
or:
virt-filesystems -d Guest --all --long -h
Do the results match what is seen in the guest?
=head2 Run virt-inspector on all your guests.
Use L<virt-inspector(1)> to get a report on all of your guests or disk
images:
virt-inspector -a /path/to/disk.img | less
or:
virt-inspector -d Guest | less
Do the results match what is actually in the guest?
If you have an unusual guest (a rare Linux distro, a very new version
of Windows), does virt-inspector recognize it? If not, then it's
probably a bug.
=head2 Try the auditing features of virt-ls on all your guests.
List all setuid or setgid programs in a Linux virtual machine:
virt-ls -lR -d Guest / | grep '^- [42]'
List all public-writable directories in a Linux virtual machine:
virt-ls -lR -d Guest / | grep '^d ...7'
List all Unix domain sockets in a Linux virtual machine:
virt-ls -lR -d Guest / | grep '^s'
List all regular files with filenames ending in ‘.png’:
virt-ls -lR -d Guest / | grep -i '^-.*\.png$'
Display files larger than 10MB in home directories:
virt-ls -lR -d Guest /home | awk '$3 > 10*1024*1024'
Find everything modified in the last 7 days:
virt-ls -lR -d Guest --time-days / | awk '$6 <= 7'
Find regular files modified in the last 24 hours:
virt-ls -lR -d Guest --time-days / | grep '^-' | awk '$6 < 1'
Do the results match what is in the guest?
=head2 Create a disk image from a tarball.
Use L<virt-make-fs(1)> to create a disk image from any tarball
that you happen to have:
virt-make-fs --partition=mbr --type=vfat /any/tarball.tar.gz output.img
Add ‘output.img’ as a raw disk to an existing guest. Check the guest
can see the files. This test is particularly useful if you try it
with a Windows guest.
Try other partitioning schemes, eg. I<--partition=gpt>.
Try other filesystem formats, eg. I<--type=ntfs>, I<--type=ext2>.
=head2 B<*> Run virt-rescue on a B<shut off> disk image or guest.
Use L<virt-rescue(1)> to examine, rescue or repair a B<shut off> guest
or disk image:
virt-rescue -a /path/to/disk.img
or:
virt-rescue -d Guest
Can you use ordinary shell commands to examine the guest?
=head2 B<*> Resize your guests.
Use L<virt-resize(1)> to give a guest some more disk space. For
example, if you have a disk image that is smaller than 30G, increase
it to 30G by doing:
truncate -s 30G newdisk.img
virt-filesystems -a /path/to/olddisk.img --all --long -h
virt-resize /path/to/olddisk.img newdisk.img --expand /dev/sda1
qemu-kvm -m 1024 -hda newdisk.img
Does the guest still boot? Try expanding other partitions.
=head2 B<*> Sparsify a guest disk.
Using L<virt-sparsify(1)>, make a disk image more sparse:
virt-sparsify /path/to/olddisk.img newdisk.img
Is F<newdisk.img> still bootable after sparsifying? Is the resulting
disk image smaller (use C<du> to check)?
=head2 Build and boot a guest
Using L<virt-builder(1)>, choose a guest from the list:
virt-builder -l
build it:
virt-builder -o disk.img [os-version from list above]
and boot it:
qemu-kvm -cpu host -m 2048 -drive file=disk.img,format=raw
Does it boot?
=head2 B<*> "Sysprep" a B<shut off> Linux guest.
B<Note> that this really will mess up an existing guest, so it's
better to clone the guest before trying this.
virt-sysprep --hostname newhost.example.com -a /path/to/disk.img
Was the sysprep successful? After booting, what changes were made and
were they successful?
=head2 Dump the Windows Registry from your Windows guests.
Use L<virt-win-reg(1)> to dump out the Windows Registry from
any Windows guests that you have.
virt-win-reg --unsafe-printable-strings WindowsGuest 'HKLM\Software' |
less
virt-win-reg --unsafe-printable-strings WindowsGuest 'HKLM\System' |
less
Does the output match running C<regedit> inside the guest?
A recent feature is the ability to dump user registries, so try this,
replacing I<username> with the name of a local user in the guest:
virt-win-reg --unsafe-printable-strings WindowsGuest 'HKEY_USERS\username' |
less
=head1 SEE ALSO
L<guestfs(3)>,
L<guestfish(1)>,
L<guestfs-examples(3)>,
L<http://libguestfs.org/>.
=head1 AUTHORS
Richard W.M. Jones (C<rjones at redhat dot com>)
=head1 COPYRIGHT
Copyright (C) 2011-2023 Red Hat Inc.
|