Add LDoms Support.
[virt-what.git] / virt-what.pod
1 =encoding utf8
2
3 =head1 NAME
4
5 virt-what - detect if we are running in a virtual machine
6
7 =head1 SUMMARY
8
9 virt-what [options]
10
11 =head1 DESCRIPTION
12
13 C<virt-what> is a shell script which can be used to detect if the
14 program is running in a virtual machine.
15
16 The program prints out a list of "facts" about the virtual machine,
17 derived from heuristics.  One fact is printed per line.
18
19 If nothing is printed and the script exits with code 0 (no error),
20 then it can mean I<either> that the program is running on bare-metal
21 I<or> the program is running inside a type of virtual machine which we
22 don't know about or cannot detect.
23
24 =head1 FACTS
25
26 =over 4
27
28 =item B<bhyve>
29
30 This is a bhyve (FreeBSD hypervisor) guest.
31
32 Status: contributed by Leonardo Brondani Schenkel.
33
34 =item B<docker>
35
36 This is a Docker container.
37
38 Status: confirmed by Charles Nguyen
39
40 =item B<hyperv>
41
42 This is Microsoft Hyper-V hypervisor.
43
44 Status: confirmed by RWMJ
45
46 =item B<ibm_power-kvm>
47
48 This is an IBM POWER KVM guest.
49
50 Status: contributed by Adrian Likins.
51
52 =item B<ibm_power-lpar_shared>
53
54 =item B<ibm_power-lpar_dedicated>
55
56 This is an IBM POWER LPAR (hardware partition) in either shared
57 or dedicated mode.
58
59 Status: contributed by Adrian Likins.
60
61 =item B<ibm_systemz>
62
63 This is an IBM SystemZ (or other S/390) hardware partitioning system.
64 Additional facts listed below may also be printed.
65
66 =item B<ibm_systemz-direct>
67
68 This is Linux running directly on a IBM SystemZ hardware partitioning
69 system.
70
71 This is expected to be a highly unusual configuration - if
72 you see this result you should treat it with suspicion.
73
74 Status: not confirmed
75
76 =item B<ibm_systemz-lpar>
77
78 This is Linux running directly on an LPAR on an IBM SystemZ
79 hardware partitioning system.
80
81 Status: confirmed by Thomas Huth
82
83 =item B<ibm_systemz-zvm>
84
85 This is a z/VM guest running in an LPAR on an IBM SystemZ
86 hardware partitioning system.
87
88 Status: confirmed by RWMJ using a Fedora guest running in z/VM
89
90 =item B<ibm_systemz-kvm>
91
92 This is a KVM guest running on an IBM System Z hardware system.
93
94 Status: contributed by Thomas Huth
95
96 =item B<ldoms>
97
98 The guest appears to be running on an Linux SPARC system with
99 Oracle VM Server for SPARC (Logical Domains) support.
100
101 Status: contributed by Darren Kenny
102
103 =item B<ldoms-control>
104
105 The is the Oracle VM Server for SPARC (Logical Domains) control domain.
106
107 Status: contributed by Darren Kenny
108
109 =item B<ldoms-guest>
110
111 The is the Oracle VM Server for SPARC (Logical Domains) guest domain.
112
113 Status: contributed by Darren Kenny
114
115 =item B<ldoms-io>
116
117 The is the Oracle VM Server for SPARC (Logical Domains) I/O domain.
118
119 Status: contributed by Darren Kenny
120
121 =item B<ldoms-root>
122
123 The is the Oracle VM Server for SPARC (Logical Domains) Root domain.
124
125 Status: contributed by Darren Kenny
126
127 =item B<linux_vserver>
128
129 This is printed for backwards compatibility with older virt-what which
130 could not distinguish between a Linux VServer container guest and
131 host.
132
133 =item B<linux_vserver-guest>
134
135 This process is running in a Linux VServer container.
136
137 Status: contributed by Barış Metin
138
139 =item B<linux_vserver-host>
140
141 This process is running as the Linux VServer host (VxID 0).
142
143 Status: contributed by Barış Metin and Elan Ruusamäe
144
145 =item B<lxc>
146
147 This process is running in a Linux LXC container.
148
149 Status: contributed by Marc Fournier
150
151 =item B<kvm>
152
153 This guest is running on the KVM hypervisor using hardware
154 acceleration.
155
156 Note that if the hypervisor is using software acceleration
157 you should I<not> see this, but should see the C<qemu> fact
158 instead.
159
160 Status: confirmed by RWMJ.
161
162 =item B<lkvm>
163
164 This guest is running on the KVM hypervisor using hardware
165 acceleration, and the userspace component of the hypervisor
166 is lkvm (a.k.a kvmtool).
167
168 Status: contributed by Andrew Jones
169
170 =item B<openvz>
171
172 The guest appears to be running inside an OpenVZ or Virtuozzo
173 container.
174
175 Status: contributed by Evgeniy Sokolov
176
177 =item B<ovirt>
178
179 The guest is running on an oVirt node.
180 (See also C<rhev> below).
181
182 Status: contributed by RWMJ, not confirmed
183
184 =item B<parallels>
185
186 The guest is running inside Parallels Virtual Platform
187 (Parallels Desktop, Parallels Server).
188
189 Status: contributed by Justin Clift
190
191 =item B<powervm_lx86>
192
193 The guest is running inside IBM PowerVM Lx86 Linux/x86 emulator.
194
195 Status: data originally supplied by Jeffrey Scheel, confirmed by
196 Yufang Zhang and RWMJ
197
198 =item B<qemu>
199
200 This is QEMU hypervisor using software emulation.
201
202 Note that for KVM (hardware accelerated) guests you should I<not> see
203 this.
204
205 Status: confirmed by RWMJ.
206
207 =item B<rhev>
208
209 The guest is running on a Red Hat Enterprise Virtualization (RHEV) node.
210
211 Status: confirmed by RWMJ
212
213 =item B<uml>
214
215 This is a User-Mode Linux (UML) guest.
216
217 Status: contributed by Laurent Léonard
218
219 =item B<virt>
220
221 Some sort of virtualization appears to be present, but we are not sure
222 what it is.  In some very rare corner cases where we know that
223 virtualization is hard to detect, we will try a timing attack to see
224 if certain machine instructions are running much more slowly than they
225 should be, which would indicate virtualization.  In this case, the
226 generic fact C<virt> is printed.
227
228 =item B<virtage>
229
230 This is Hitachi Virtualization Manager (HVM) Virtage
231 hardware partitioning system.
232
233 Status: data supplied by Bhavna Sarathy, not confirmed
234
235 =item B<virtualbox>
236
237 This is a VirtualBox guest.
238
239 Status: contributed by Laurent Léonard
240
241 =item B<virtualpc>
242
243 The guest appears to be running on Microsoft VirtualPC.
244
245 Status: not confirmed
246
247 =item B<vmm>
248
249 This is a vmm (OpenBSD hypervisor) guest.
250
251 Status: contributed by Jasper Lievisse Adriaanse.
252
253 =item B<vmware>
254
255 The guest appears to be running on VMware hypervisor.
256
257 Status: confirmed by RWMJ
258
259 =item B<xen>
260
261 The guest appears to be running on Xen hypervisor.
262
263 Status: confirmed by RWMJ
264
265 =item B<xen-dom0>
266
267 This is the Xen dom0 (privileged domain).
268
269 Status: confirmed by RWMJ
270
271 =item B<xen-domU>
272
273 This is a Xen domU (paravirtualized guest domain).
274
275 Status: confirmed by RWMJ
276
277 =item B<xen-hvm>
278
279 This is a Xen guest fully virtualized (HVM).
280
281 Status: confirmed by RWMJ
282
283 =back
284
285 =head1 EXIT STATUS
286
287 Programs that use or wrap C<virt-what> should check that the exit
288 status is 0 before they attempt to parse the output of the command.
289
290 A non-zero exit status indicates some error, for example, an
291 unrecognized command line argument.  If the exit status is non-zero
292 then the output "facts" (if any were printed) cannot be guaranteed and
293 should be ignored.
294
295 The exit status does I<not> have anything to do with whether the
296 program is running on baremetal or under virtualization, nor with
297 whether C<virt-what> managed detection "correctly" (which is basically
298 unknowable given the large variety of virtualization systems out there
299 and that some systems deliberately emulate others).
300
301 =head1 RUNNING VIRT-WHAT FROM OTHER PROGRAMS
302
303 C<virt-what> is designed so that you can easily run it from
304 other programs or wrap it up in a library.
305
306 Your program should check the exit status (see the section above).
307
308 Some programming languages (notably Python: issue 1652) erroneously
309 mask the C<SIGPIPE> signal and do not restore it when executing
310 subprocesses.  C<virt-what> is a shell script and some shell commands
311 do not work correctly when you do this.  You may see warnings from
312 C<virt-what> similar to this:
313
314  echo: write error: Broken pipe
315
316 The solution is to set the C<SIGPIPE> signal handler back to C<SIG_DFL>
317 before running C<virt-what>.
318
319 =head1 IMPORTANT NOTE
320
321 Most of the time, using this program is the I<wrong> thing to do.
322 Instead you should detect the specific features you actually want to
323 use.  (As an example, if you wanted to issue Xen hypervisor commands
324 you would look for the C</proc/xen/privcmd> file).
325
326 However people keep asking for this, so we provide it.  There are a
327 few legitimate uses:
328
329 =over 4
330
331 =item Bug reporting tool
332
333 If you think that virtualization could affect how your program runs,
334 then you might use C<virt-what> to report this in a bug reporting
335 tool.
336
337 =item Status display and monitoring tools
338
339 You might include this information in status and monitoring programs.
340
341 =item System tuning (sometimes)
342
343 You might use this program to tune an operating system so it runs
344 better as a virtual machine of a particular hypervisor.  However if
345 installing paravirtualized drivers, it's better to check for the
346 specific features your drivers need (eg. for the presence of PCI devices).
347
348 =back
349
350 =head1 SEE ALSO
351
352 L<http://people.redhat.com/~rjones/virt-what/>,
353 L<http://www.vmware.com/>,
354 L<http://www.microsoft.com/windows/products/winfamily/virtualpc>,
355 L<http://xensource.com/>,
356 L<http://bellard.org/qemu/>,
357 L<http://kvm.qumranet.com/>,
358 L<http://openvz.org/>
359
360 =head1 AUTHORS
361
362 Richard W.M. Jones <rjones @ redhat . com>
363
364 =head1 COPYRIGHT
365
366 (C) Copyright 2008-2015 Red Hat Inc.,
367 L<http://people.redhat.com/~rjones/virt-what/>
368
369 This program is free software; you can redistribute it and/or modify
370 it under the terms of the GNU General Public License as published by
371 the Free Software Foundation; either version 2 of the License, or
372 (at your option) any later version.
373
374 This program is distributed in the hope that it will be useful,
375 but WITHOUT ANY WARRANTY; without even the implied warranty of
376 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
377 GNU General Public License for more details.
378
379 You should have received a copy of the GNU General Public License
380 along with this program; if not, write to the Free Software
381 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
382
383 =head1 REPORTING BUGS
384
385 Bugs can be viewed on the Red Hat Bugzilla page:
386 L<https://bugzilla.redhat.com/>.
387
388 If you find a bug in virt-what, please follow these steps to report it:
389
390 =over 4
391
392 =item 1. Check for existing bug reports
393
394 Go to L<https://bugzilla.redhat.com/> and search for similar bugs.
395 Someone may already have reported the same bug, and they may even
396 have fixed it.
397
398 =item 2. Capture debug and error messages
399
400 Run
401
402  virt-what > virt-what.log 2>&1
403
404 and keep I<virt-what.log>.  It may contain error messages which you
405 should submit with your bug report.
406
407 =item 3. Get version of virt-what.
408
409 Run
410
411  virt-what --version
412
413 =item 4. Submit a bug report.
414
415 Go to L<https://bugzilla.redhat.com/> and enter a new bug.
416 Please describe the problem in as much detail as possible.
417
418 Remember to include the version numbers (step 3) and the debug
419 messages file (step 2) and as much other detail as possible.
420
421 =item 5. Assign the bug to rjones @ redhat.com
422
423 Assign or reassign the bug to B<rjones @ redhat.com> (without the
424 spaces).  You can also send me an email with the bug number if you
425 want a faster response.
426
427 =back