summaryrefslogtreecommitdiffstats
path: root/examples/guestfs-testing.pod
blob: 9bab630cb4ceb67edab93db188359e808a2a0009 (plain)
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
=encoding utf8

=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!

These tests require libguestfs E<ge> 1.14.

Tests marked with a B<*> (asterisk) can B<destroy data> if you're not
careful.  The others are safe and won't modify anything.

You can report bugs you find through this link:

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):

https://www.redhat.com/mailman/listinfo/libguestfs

=head1 TESTS

=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
5 seconds on fast 64 bit hardware).

How to check for hardware virt:

L<http://virt-tools.org/learning/check-hardware-virt/>

If the command above does not work at all, use
L<libguestfs-test-tool(1)>.

=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 C</etc> to C</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 C</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?

=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 C<newdisk.img> still bootable after sparsifying?  Is the resulting
disk image smaller (use C<du> to check)?

=head2 B<*> "sysprep" a B<shut off> Linux guest.

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-2012 Red Hat Inc.