1<?xml version='1.0'?> <!--*-nxml-*-->
2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
5
6<refentry id="systemd-detect-virt"
7          xmlns:xi="http://www.w3.org/2001/XInclude">
8
9  <refentryinfo>
10    <title>systemd-detect-virt</title>
11    <productname>systemd</productname>
12  </refentryinfo>
13
14  <refmeta>
15    <refentrytitle>systemd-detect-virt</refentrytitle>
16    <manvolnum>1</manvolnum>
17  </refmeta>
18
19  <refnamediv>
20    <refname>systemd-detect-virt</refname>
21    <refpurpose>Detect execution in a virtualized environment</refpurpose>
22  </refnamediv>
23
24  <refsynopsisdiv>
25    <cmdsynopsis>
26      <command>systemd-detect-virt</command>
27      <arg choice="opt" rep="repeat">OPTIONS</arg>
28    </cmdsynopsis>
29  </refsynopsisdiv>
30
31  <refsect1>
32    <title>Description</title>
33
34    <para><command>systemd-detect-virt</command> detects execution in
35    a virtualized environment. It identifies the virtualization
36    technology and can distinguish full machine virtualization from
37    container virtualization. <filename>systemd-detect-virt</filename>
38    exits with a return value of 0 (success) if a virtualization
39    technology is detected, and non-zero (error) otherwise. By default,
40    any type of virtualization is detected, and the options
41    <option>--container</option> and <option>--vm</option> can be used
42    to limit what types of virtualization are detected.</para>
43
44    <para>When executed without <option>--quiet</option> will print a
45    short identifier for the detected virtualization technology. The
46    following technologies are currently identified:</para>
47
48    <table>
49      <title>Known virtualization technologies (both
50      VM, i.e. full hardware virtualization,
51      and container, i.e. shared kernel virtualization)</title>
52      <tgroup cols='3' align='left' colsep='1' rowsep='1'>
53        <colspec colname="type" />
54        <colspec colname="id" />
55        <colspec colname="product" />
56        <thead>
57          <row>
58            <entry>Type</entry>
59            <entry>ID</entry>
60            <entry>Product</entry>
61          </row>
62        </thead>
63        <tbody>
64          <row>
65            <entry valign="top" morerows="14">VM</entry>
66            <entry><varname>qemu</varname></entry>
67            <entry>QEMU software virtualization, without KVM</entry>
68          </row>
69
70          <row>
71            <entry><varname>kvm</varname></entry>
72            <entry>Linux KVM kernel virtual machine, in combination with QEMU. Not used for other virtualizers using the KVM interfaces, such as Oracle VirtualBox or Amazon EC2 Nitro, see below.</entry>
73          </row>
74
75          <row>
76            <entry><varname>amazon</varname></entry>
77            <entry>Amazon EC2 Nitro using Linux KVM</entry>
78          </row>
79
80          <row>
81            <entry><varname>zvm</varname></entry>
82            <entry>s390 z/VM</entry>
83          </row>
84
85          <row>
86            <entry><varname>vmware</varname></entry>
87            <entry>VMware Workstation or Server, and related products</entry>
88          </row>
89
90          <row>
91            <entry><varname>microsoft</varname></entry>
92            <entry>Hyper-V, also known as Viridian or Windows Server Virtualization</entry>
93          </row>
94
95          <row>
96            <entry><varname>oracle</varname></entry>
97            <entry>Oracle VM VirtualBox (historically marketed by innotek and Sun Microsystems), for legacy and KVM hypervisor</entry>
98          </row>
99
100          <row>
101            <entry><varname>powervm</varname></entry>
102            <entry>IBM PowerVM hypervisor — comes as firmware with some IBM POWER servers</entry>
103          </row>
104
105          <row>
106            <entry><varname>xen</varname></entry>
107            <entry>Xen hypervisor (only domU, not dom0)</entry>
108          </row>
109
110          <row>
111            <entry><varname>bochs</varname></entry>
112            <entry>Bochs Emulator</entry>
113          </row>
114
115          <row>
116            <entry><varname>uml</varname></entry>
117            <entry>User-mode Linux</entry>
118          </row>
119
120          <row>
121            <entry><varname>parallels</varname></entry>
122            <entry>Parallels Desktop, Parallels Server</entry>
123          </row>
124
125          <row>
126            <entry><varname>bhyve</varname></entry>
127            <entry>bhyve, FreeBSD hypervisor</entry>
128          </row>
129
130          <row>
131            <entry><varname>qnx</varname></entry>
132            <entry>QNX hypervisor</entry>
133          </row>
134
135          <row>
136            <entry><varname>acrn</varname></entry>
137            <entry><ulink url="https://projectacrn.org">ACRN hypervisor</ulink></entry>
138          </row>
139
140          <row>
141            <entry valign="top" morerows="9">Container</entry>
142            <entry><varname>openvz</varname></entry>
143            <entry>OpenVZ/Virtuozzo</entry>
144          </row>
145
146          <row>
147            <entry><varname>lxc</varname></entry>
148            <entry>Linux container implementation by LXC</entry>
149          </row>
150
151          <row>
152            <entry><varname>lxc-libvirt</varname></entry>
153            <entry>Linux container implementation by libvirt</entry>
154          </row>
155
156          <row>
157            <entry><varname>systemd-nspawn</varname></entry>
158            <entry>systemd's minimal container implementation, see <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></entry>
159          </row>
160
161          <row>
162            <entry><varname>docker</varname></entry>
163            <entry>Docker container manager</entry>
164          </row>
165
166          <row>
167            <entry><varname>podman</varname></entry>
168            <entry><ulink url="https://podman.io">Podman</ulink> container manager</entry>
169          </row>
170
171          <row>
172            <entry><varname>rkt</varname></entry>
173            <entry>rkt app container runtime</entry>
174          </row>
175
176          <row>
177            <entry><varname>wsl</varname></entry>
178            <entry><ulink url="https://docs.microsoft.com/en-us/windows/wsl/about">Windows Subsystem for Linux</ulink></entry>
179          </row>
180
181          <row>
182            <entry><varname>proot</varname></entry>
183            <entry><ulink url="https://proot-me.github.io/">proot</ulink> userspace chroot/bind mount emulation</entry>
184          </row>
185
186          <row>
187            <entry><varname>pouch</varname></entry>
188            <entry><ulink url="https://github.com/alibaba/pouch">Pouch</ulink> Container Engine</entry>
189          </row>
190        </tbody>
191      </tgroup>
192    </table>
193
194    <para>If multiple virtualization solutions are used, only the
195    "innermost" is detected and identified. That means if both
196    machine and container virtualization are used in
197    conjunction, only the latter will be identified (unless
198    <option>--vm</option> is passed).</para>
199    <para> Windows Subsystem for Linux is not a Linux container,
200    but an environment for running Linux userspace applications on
201    top of the Windows kernel using a Linux-compatible interface.
202    WSL is categorized as a container for practical purposes.
203    Multiple WSL environments share the same kernel and services
204    should generally behave like when being run in a container.</para>
205  </refsect1>
206
207  <refsect1>
208    <title>Options</title>
209
210    <para>The following options are understood:</para>
211
212    <variablelist>
213      <varlistentry>
214        <term><option>-c</option></term>
215        <term><option>--container</option></term>
216
217        <listitem><para>Only detects container virtualization (i.e.
218        shared kernel virtualization).</para></listitem>
219      </varlistentry>
220
221      <varlistentry>
222        <term><option>-v</option></term>
223        <term><option>--vm</option></term>
224
225        <listitem><para>Only detects hardware virtualization.</para></listitem>
226      </varlistentry>
227
228      <varlistentry>
229        <term><option>-r</option></term>
230        <term><option>--chroot</option></term>
231
232        <listitem><para>Detect whether invoked in a
233        <citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
234        environment. In this mode, no output is written, but the return
235        value indicates whether the process was invoked in a
236        <function>chroot()</function>
237        environment or not.</para></listitem>
238      </varlistentry>
239
240      <varlistentry>
241        <term><option>--private-users</option></term>
242
243        <listitem><para>Detect whether invoked in a user namespace.  In this mode, no
244        output is written, but the return value indicates whether the process was invoked
245        inside of a user namespace or not. See
246        <citerefentry project='man-pages'><refentrytitle>user_namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>
247        for more information.</para></listitem>
248      </varlistentry>
249
250      <varlistentry>
251        <term><option>-q</option></term>
252        <term><option>--quiet</option></term>
253
254        <listitem><para>Suppress output of the virtualization
255        technology identifier.</para></listitem>
256      </varlistentry>
257
258      <varlistentry>
259        <term><option>--list</option></term>
260
261        <listitem><para>Output all currently known and detectable container and VM environments.</para></listitem>
262      </varlistentry>
263
264      <xi:include href="standard-options.xml" xpointer="help" />
265      <xi:include href="standard-options.xml" xpointer="version" />
266    </variablelist>
267
268  </refsect1>
269
270  <refsect1>
271    <title>Exit status</title>
272
273    <para>If a virtualization technology is detected, 0 is returned, a
274    non-zero code otherwise.</para>
275  </refsect1>
276
277  <refsect1>
278    <title>See Also</title>
279    <para>
280      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
281      <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
282      <citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
283      <citerefentry project='man-pages'><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>
284    </para>
285  </refsect1>
286
287</refentry>
288