| <?xml version='1.0'?> <!--*-nxml-*--> |
| <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> |
| <!-- SPDX-License-Identifier: LGPL-2.1-or-later --> |
| |
| <refentry id="systemd-detect-virt" |
| xmlns:xi="http://www.w3.org/2001/XInclude"> |
| |
| <refentryinfo> |
| <title>systemd-detect-virt</title> |
| <productname>systemd</productname> |
| </refentryinfo> |
| |
| <refmeta> |
| <refentrytitle>systemd-detect-virt</refentrytitle> |
| <manvolnum>1</manvolnum> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>systemd-detect-virt</refname> |
| <refpurpose>Detect execution in a virtualized environment</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <cmdsynopsis> |
| <command>systemd-detect-virt</command> |
| <arg choice="opt" rep="repeat">OPTIONS</arg> |
| </cmdsynopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para><command>systemd-detect-virt</command> detects execution in |
| a virtualized environment. It identifies the virtualization |
| technology and can distinguish full machine virtualization from |
| container virtualization. <filename>systemd-detect-virt</filename> |
| exits with a return value of 0 (success) if a virtualization |
| technology is detected, and non-zero (error) otherwise. By default, |
| any type of virtualization is detected, and the options |
| <option>--container</option> and <option>--vm</option> can be used |
| to limit what types of virtualization are detected.</para> |
| |
| <para>When executed without <option>--quiet</option> will print a |
| short identifier for the detected virtualization technology. The |
| following technologies are currently identified:</para> |
| |
| <table> |
| <title>Known virtualization technologies (both |
| VM, i.e. full hardware virtualization, |
| and container, i.e. shared kernel virtualization)</title> |
| <tgroup cols='3' align='left' colsep='1' rowsep='1'> |
| <colspec colname="type" /> |
| <colspec colname="id" /> |
| <colspec colname="product" /> |
| <thead> |
| <row> |
| <entry>Type</entry> |
| <entry>ID</entry> |
| <entry>Product</entry> |
| </row> |
| </thead> |
| <tbody> |
| <row> |
| <entry valign="top" morerows="13">VM</entry> |
| <entry><varname>qemu</varname></entry> |
| <entry>QEMU software virtualization, without KVM</entry> |
| </row> |
| |
| <row> |
| <entry><varname>kvm</varname></entry> |
| <entry>Linux KVM kernel virtual machine, with whatever software, except Oracle Virtualbox</entry> |
| </row> |
| |
| <row> |
| <entry><varname>zvm</varname></entry> |
| <entry>s390 z/VM</entry> |
| </row> |
| |
| <row> |
| <entry><varname>vmware</varname></entry> |
| <entry>VMware Workstation or Server, and related products</entry> |
| </row> |
| |
| <row> |
| <entry><varname>microsoft</varname></entry> |
| <entry>Hyper-V, also known as Viridian or Windows Server Virtualization</entry> |
| </row> |
| |
| <row> |
| <entry><varname>oracle</varname></entry> |
| <entry>Oracle VM VirtualBox (historically marketed by innotek and Sun Microsystems), for legacy and KVM hypervisor</entry> |
| </row> |
| |
| <row> |
| <entry><varname>powervm</varname></entry> |
| <entry>IBM PowerVM hypervisor - comes as firmware with some IBM POWER servers</entry> |
| </row> |
| |
| <row> |
| <entry><varname>xen</varname></entry> |
| <entry>Xen hypervisor (only domU, not dom0)</entry> |
| </row> |
| |
| <row> |
| <entry><varname>bochs</varname></entry> |
| <entry>Bochs Emulator</entry> |
| </row> |
| |
| <row> |
| <entry><varname>uml</varname></entry> |
| <entry>User-mode Linux</entry> |
| </row> |
| |
| <row> |
| <entry><varname>parallels</varname></entry> |
| <entry>Parallels Desktop, Parallels Server</entry> |
| </row> |
| |
| <row> |
| <entry><varname>bhyve</varname></entry> |
| <entry>bhyve, FreeBSD hypervisor</entry> |
| </row> |
| |
| <row> |
| <entry><varname>qnx</varname></entry> |
| <entry>QNX hypervisor</entry> |
| </row> |
| |
| <row> |
| <entry><varname>acrn</varname></entry> |
| <entry><ulink url="https://projectacrn.org">ACRN hypervisor</ulink></entry> |
| </row> |
| |
| <row> |
| <entry valign="top" morerows="9">Container</entry> |
| <entry><varname>openvz</varname></entry> |
| <entry>OpenVZ/Virtuozzo</entry> |
| </row> |
| |
| <row> |
| <entry><varname>lxc</varname></entry> |
| <entry>Linux container implementation by LXC</entry> |
| </row> |
| |
| <row> |
| <entry><varname>lxc-libvirt</varname></entry> |
| <entry>Linux container implementation by libvirt</entry> |
| </row> |
| |
| <row> |
| <entry><varname>systemd-nspawn</varname></entry> |
| <entry>systemd's minimal container implementation, see <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry></entry> |
| </row> |
| |
| <row> |
| <entry><varname>docker</varname></entry> |
| <entry>Docker container manager</entry> |
| </row> |
| |
| <row> |
| <entry><varname>podman</varname></entry> |
| <entry><ulink url="https://podman.io">Podman</ulink> container manager</entry> |
| </row> |
| |
| <row> |
| <entry><varname>rkt</varname></entry> |
| <entry>rkt app container runtime</entry> |
| </row> |
| |
| <row> |
| <entry><varname>wsl</varname></entry> |
| <entry><ulink url="https://docs.microsoft.com/en-us/windows/wsl/about">Windows Subsystem for Linux</ulink></entry> |
| </row> |
| |
| <row> |
| <entry><varname>proot</varname></entry> |
| <entry><ulink url="https://proot-me.github.io/">proot</ulink> userspace chroot/bind mount emulation</entry> |
| </row> |
| |
| <row> |
| <entry><varname>pouch</varname></entry> |
| <entry><ulink url="https://github.com/alibaba/pouch">Pouch</ulink> Container Engine</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <para>If multiple virtualization solutions are used, only the |
| "innermost" is detected and identified. That means if both |
| machine and container virtualization are used in |
| conjunction, only the latter will be identified (unless |
| <option>--vm</option> is passed).</para> |
| <para> Windows Subsystem for Linux is not a Linux container, |
| but an environment for running Linux userspace applications on |
| top of the Windows kernel using a Linux-compatible interface. |
| WSL is categorized as a container for practical purposes. |
| Multiple WSL environments share the same kernel and services |
| should generally behave like when being run in a container.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Options</title> |
| |
| <para>The following options are understood:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>-c</option></term> |
| <term><option>--container</option></term> |
| |
| <listitem><para>Only detects container virtualization (i.e. |
| shared kernel virtualization).</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-v</option></term> |
| <term><option>--vm</option></term> |
| |
| <listitem><para>Only detects hardware virtualization.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-r</option></term> |
| <term><option>--chroot</option></term> |
| |
| <listitem><para>Detect whether invoked in a |
| <citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry> |
| environment. In this mode, no output is written, but the return |
| value indicates whether the process was invoked in a |
| <function>chroot()</function> |
| environment or not.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--private-users</option></term> |
| |
| <listitem><para>Detect whether invoked in a user namespace. In this mode, no |
| output is written, but the return value indicates whether the process was invoked |
| inside of a user namespace or not. See |
| <citerefentry project='man-pages'><refentrytitle>user_namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry> |
| for more information.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>-q</option></term> |
| <term><option>--quiet</option></term> |
| |
| <listitem><para>Suppress output of the virtualization |
| technology identifier.</para></listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--list</option></term> |
| |
| <listitem><para>Output all currently known and detectable container and VM environments.</para></listitem> |
| </varlistentry> |
| |
| <xi:include href="standard-options.xml" xpointer="help" /> |
| <xi:include href="standard-options.xml" xpointer="version" /> |
| </variablelist> |
| |
| </refsect1> |
| |
| <refsect1> |
| <title>Exit status</title> |
| |
| <para>If a virtualization technology is detected, 0 is returned, a |
| non-zero code otherwise.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| <para> |
| <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, |
| <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, |
| <citerefentry><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>, |
| <citerefentry project='man-pages'><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry> |
| </para> |
| </refsect1> |
| |
| </refentry> |