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