5 virt-what - detect if we are running in a virtual machine
13 C<virt-what> is a shell script which can be used to detect if the
14 program is running in a virtual machine.
16 The program prints out a list of "facts" about the virtual machine,
17 derived from heuristics. One fact is printed per line.
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.
30 Amazon Web Services cloud guest.
32 Status: contributed by Qi Guo.
36 This is a bhyve (FreeBSD hypervisor) guest.
38 Status: contributed by Leonardo Brondani Schenkel.
42 This is a Docker container.
44 Status: confirmed by Charles Nguyen
48 This is Microsoft Hyper-V hypervisor.
50 Status: confirmed by RWMJ
52 =item B<ibm_power-kvm>
54 This is an IBM POWER KVM guest.
56 Status: contributed by Adrian Likins.
58 =item B<ibm_power-lpar_shared>
60 =item B<ibm_power-lpar_dedicated>
62 This is an IBM POWER LPAR (hardware partition) in either shared
65 Status: contributed by Adrian Likins.
69 This is an IBM SystemZ (or other S/390) hardware partitioning system.
70 Additional facts listed below may also be printed.
72 =item B<ibm_systemz-direct>
74 This is Linux running directly on a IBM SystemZ hardware partitioning
77 This is expected to be a highly unusual configuration - if
78 you see this result you should treat it with suspicion.
82 =item B<ibm_systemz-lpar>
84 This is Linux running directly on an LPAR on an IBM SystemZ
85 hardware partitioning system.
87 Status: confirmed by Thomas Huth
89 =item B<ibm_systemz-zvm>
91 This is a z/VM guest running in an LPAR on an IBM SystemZ
92 hardware partitioning system.
94 Status: confirmed by RWMJ using a Fedora guest running in z/VM
96 =item B<ibm_systemz-kvm>
98 This is a KVM guest running on an IBM System Z hardware system.
100 Status: contributed by Thomas Huth
104 The guest appears to be running on an Linux SPARC system with
105 Oracle VM Server for SPARC (Logical Domains) support.
107 Status: contributed by Darren Kenny
109 =item B<ldoms-control>
111 The is the Oracle VM Server for SPARC (Logical Domains) control domain.
113 Status: contributed by Darren Kenny
117 The is the Oracle VM Server for SPARC (Logical Domains) guest domain.
119 Status: contributed by Darren Kenny
123 The is the Oracle VM Server for SPARC (Logical Domains) I/O domain.
125 Status: contributed by Darren Kenny
129 The is the Oracle VM Server for SPARC (Logical Domains) Root domain.
131 Status: contributed by Darren Kenny
133 =item B<linux_vserver>
135 This is printed for backwards compatibility with older virt-what which
136 could not distinguish between a Linux VServer container guest and
139 =item B<linux_vserver-guest>
141 This process is running in a Linux VServer container.
143 Status: contributed by Barış Metin
145 =item B<linux_vserver-host>
147 This process is running as the Linux VServer host (VxID 0).
149 Status: contributed by Barış Metin and Elan Ruusamäe
153 This process is running in a Linux LXC container.
155 Status: contributed by Marc Fournier
159 This guest is running on the KVM hypervisor using hardware
162 Note that if the hypervisor is using software acceleration
163 you should I<not> see this, but should see the C<qemu> fact
166 Status: confirmed by RWMJ.
170 This guest is running on the KVM hypervisor using hardware
171 acceleration, and the userspace component of the hypervisor
172 is lkvm (a.k.a kvmtool).
174 Status: contributed by Andrew Jones
178 The guest appears to be running inside an OpenVZ or Virtuozzo
181 Status: contributed by Evgeniy Sokolov
185 The guest is running on an oVirt node.
186 (See also C<rhev> below).
188 Status: contributed by RWMJ, not confirmed
192 The guest is running inside Parallels Virtual Platform
193 (Parallels Desktop, Parallels Server).
195 Status: contributed by Justin Clift
197 =item B<powervm_lx86>
199 The guest is running inside IBM PowerVM Lx86 Linux/x86 emulator.
201 Status: data originally supplied by Jeffrey Scheel, confirmed by
202 Yufang Zhang and RWMJ
206 This is QEMU hypervisor using software emulation.
208 Note that for KVM (hardware accelerated) guests you should I<not> see
211 Status: confirmed by RWMJ.
215 The guest is running on a Red Hat Enterprise Virtualization (RHEV) node.
217 Status: confirmed by RWMJ
221 This is a User-Mode Linux (UML) guest.
223 Status: contributed by Laurent Léonard
227 Some sort of virtualization appears to be present, but we are not sure
228 what it is. In some very rare corner cases where we know that
229 virtualization is hard to detect, we will try a timing attack to see
230 if certain machine instructions are running much more slowly than they
231 should be, which would indicate virtualization. In this case, the
232 generic fact C<virt> is printed.
236 This is Hitachi Virtualization Manager (HVM) Virtage
237 hardware partitioning system.
239 Status: data supplied by Bhavna Sarathy, not confirmed
243 This is a VirtualBox guest.
245 Status: contributed by Laurent Léonard
249 The guest appears to be running on Microsoft VirtualPC.
251 Status: not confirmed
255 This is a vmm (OpenBSD hypervisor) guest.
257 Status: contributed by Jasper Lievisse Adriaanse.
261 The guest appears to be running on VMware hypervisor.
263 Status: confirmed by RWMJ
267 The guest appears to be running on Xen hypervisor.
269 Status: confirmed by RWMJ
273 This is the Xen dom0 (privileged domain).
275 Status: confirmed by RWMJ
279 This is a Xen domU (paravirtualized guest domain).
281 Status: confirmed by RWMJ
285 This is a Xen guest fully virtualized (HVM).
287 Status: confirmed by RWMJ
293 Programs that use or wrap C<virt-what> should check that the exit
294 status is 0 before they attempt to parse the output of the command.
296 A non-zero exit status indicates some error, for example, an
297 unrecognized command line argument. If the exit status is non-zero
298 then the output "facts" (if any were printed) cannot be guaranteed and
301 The exit status does I<not> have anything to do with whether the
302 program is running on baremetal or under virtualization, nor with
303 whether C<virt-what> managed detection "correctly" (which is basically
304 unknowable given the large variety of virtualization systems out there
305 and that some systems deliberately emulate others).
307 =head1 RUNNING VIRT-WHAT FROM OTHER PROGRAMS
309 C<virt-what> is designed so that you can easily run it from
310 other programs or wrap it up in a library.
312 Your program should check the exit status (see the section above).
314 Some programming languages (notably Python: issue 1652) erroneously
315 mask the C<SIGPIPE> signal and do not restore it when executing
316 subprocesses. C<virt-what> is a shell script and some shell commands
317 do not work correctly when you do this. You may see warnings from
318 C<virt-what> similar to this:
320 echo: write error: Broken pipe
322 The solution is to set the C<SIGPIPE> signal handler back to C<SIG_DFL>
323 before running C<virt-what>.
325 =head1 IMPORTANT NOTE
327 Most of the time, using this program is the I<wrong> thing to do.
328 Instead you should detect the specific features you actually want to
329 use. (As an example, if you wanted to issue Xen hypervisor commands
330 you would look for the C</proc/xen/privcmd> file).
332 However people keep asking for this, so we provide it. There are a
337 =item Bug reporting tool
339 If you think that virtualization could affect how your program runs,
340 then you might use C<virt-what> to report this in a bug reporting
343 =item Status display and monitoring tools
345 You might include this information in status and monitoring programs.
347 =item System tuning (sometimes)
349 You might use this program to tune an operating system so it runs
350 better as a virtual machine of a particular hypervisor. However if
351 installing paravirtualized drivers, it's better to check for the
352 specific features your drivers need (eg. for the presence of PCI devices).
358 L<http://people.redhat.com/~rjones/virt-what/>,
359 L<http://www.vmware.com/>,
360 L<http://www.microsoft.com/windows/products/winfamily/virtualpc>,
361 L<http://xensource.com/>,
362 L<http://bellard.org/qemu/>,
363 L<http://kvm.qumranet.com/>,
364 L<http://openvz.org/>
368 Richard W.M. Jones <rjones @ redhat . com>
372 (C) Copyright 2008-2015 Red Hat Inc.,
373 L<http://people.redhat.com/~rjones/virt-what/>
375 This program is free software; you can redistribute it and/or modify
376 it under the terms of the GNU General Public License as published by
377 the Free Software Foundation; either version 2 of the License, or
378 (at your option) any later version.
380 This program is distributed in the hope that it will be useful,
381 but WITHOUT ANY WARRANTY; without even the implied warranty of
382 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
383 GNU General Public License for more details.
385 You should have received a copy of the GNU General Public License
386 along with this program; if not, write to the Free Software
387 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
389 =head1 REPORTING BUGS
391 Bugs can be viewed on the Red Hat Bugzilla page:
392 L<https://bugzilla.redhat.com/>.
394 If you find a bug in virt-what, please follow these steps to report it:
398 =item 1. Check for existing bug reports
400 Go to L<https://bugzilla.redhat.com/> and search for similar bugs.
401 Someone may already have reported the same bug, and they may even
404 =item 2. Capture debug and error messages
408 virt-what > virt-what.log 2>&1
410 and keep I<virt-what.log>. It may contain error messages which you
411 should submit with your bug report.
413 =item 3. Get version of virt-what.
419 =item 4. Submit a bug report.
421 Go to L<https://bugzilla.redhat.com/> and enter a new bug.
422 Please describe the problem in as much detail as possible.
424 Remember to include the version numbers (step 3) and the debug
425 messages file (step 2) and as much other detail as possible.
427 =item 5. Assign the bug to rjones @ redhat.com
429 Assign or reassign the bug to B<rjones @ redhat.com> (without the
430 spaces). You can also send me an email with the bug number if you
431 want a faster response.