<?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.swap"
          xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>systemd.swap</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>systemd.swap</refentrytitle>
    <manvolnum>5</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>systemd.swap</refname>
    <refpurpose>Swap unit configuration</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <para><filename><replaceable>swap</replaceable>.swap</filename></para>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para>A unit configuration file whose name ends in
    <literal>.swap</literal> encodes information about a swap device
    or file for memory paging controlled and supervised by
    systemd.</para>

    <para>This man page lists the configuration options specific to
    this unit type. See
    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    for the common options of all unit configuration files. The common
    configuration items are configured in the generic [Unit] and
    [Install] sections. The swap specific configuration options are
    configured in the [Swap] section.</para>

    <para>Additional options are listed in
    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
    which define the execution environment the <citerefentry
    project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>
    program is executed in, in
    <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
    which define the way these processes are
    terminated, and in
    <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
    which configure resource control settings for these processes of the
    unit.</para>

    <para>Swap units must be named after the devices or files they control. Example: the swap device <filename
    index="false">/dev/sda5</filename> must be configured in a unit file <filename>dev-sda5.swap</filename>. For
    details about the escaping logic used to convert a file system path to a unit name, see
    <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Note that swap
    units cannot be templated, nor is possible to add multiple names to a swap unit by creating additional symlinks to
    it.</para>

    <para>Note that swap support on Linux is privileged, swap units are hence only available in the system
    service manager (and root's user service manager), but not in unprivileged user's service manager.</para>
  </refsect1>

  <refsect1>
    <title>Automatic Dependencies</title>

    <refsect2>
      <title>Implicit Dependencies</title>

      <para>The following dependencies are implicitly added:</para>

      <itemizedlist>
        <listitem><para>All swap units automatically get the
        <varname>BindsTo=</varname> and <varname>After=</varname>
        dependencies on the device units or the mount units of the files
        they are activated from.</para></listitem>
      </itemizedlist>

      <para>Additional implicit dependencies may be added as result of
      execution and resource control parameters as documented in
      <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
      and
      <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
    </refsect2>

    <refsect2>
      <title>Default Dependencies</title>

      <para>The following dependencies are added unless <varname>DefaultDependencies=no</varname> is set:</para>

      <itemizedlist>
        <listitem><para>Swap units automatically acquire a <varname>Conflicts=</varname> and a
        <varname>Before=</varname> dependency on <filename>umount.target</filename> so that they are deactivated at
        shutdown as well as a <varname>Before=swap.target</varname> dependency.</para></listitem>
      </itemizedlist>
    </refsect2>
  </refsect1>

  <refsect1>
    <title><filename>fstab</filename></title>

    <para>Swap units may either be configured via unit files, or via
    <filename>/etc/fstab</filename> (see
    <citerefentry project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    for details). Swaps listed in <filename>/etc/fstab</filename> will
    be converted into native units dynamically at boot and when the
    configuration of the system manager is reloaded. See
    <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
    for details about the conversion.</para>

    <para>If a swap device or file is configured in both
    <filename>/etc/fstab</filename> and a unit file, the configuration
    in the latter takes precedence.</para>

    <para>When reading <filename>/etc/fstab</filename>, a few special
    options are understood by systemd which influence how dependencies
    are created for swap units.</para>

    <variablelist class='fstab-options'>
      <varlistentry>
        <term><option>noauto</option></term>
        <term><option>auto</option></term>

        <listitem><para>With <option>noauto</option>, the swap unit
        will not be added as a dependency for
        <filename>swap.target</filename>. This means that it will not
        be activated automatically during boot, unless it is pulled in
        by some other unit. The <option>auto</option> option has the
        opposite meaning and is the default.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><option>nofail</option></term>

        <listitem><para>With <option>nofail</option>, the swap unit
        will be only wanted, not required by
        <filename>swap.target</filename>. This means that the boot
        will continue even if this swap device is not activated
        successfully.</para>
        </listitem>
      </varlistentry>

      <xi:include href="systemd.mount.xml" xpointer="device-timeout" />

      <varlistentry>
        <term><option>x-systemd.makefs</option></term>

        <listitem><para>The swap structure will be initialized on the device. If the device is not
        "empty", i.e. it contains any signature, the operation will be skipped. It is hence expected
        that this option remains set even after the device has been initialized.</para>

        <para>Note that this option can only be used in <filename>/etc/fstab</filename>, and will be
        ignored when part of the <varname>Options=</varname> setting in a unit file.</para>

        <para>See
        <citerefentry><refentrytitle>systemd-mkswap@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
        and the discussion of
        <citerefentry project='man-pages'><refentrytitle>wipefs</refentrytitle><manvolnum>8</manvolnum></citerefentry>
        in <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
        </para></listitem>
      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1>
    <title>Options</title>

    <para>Swap unit files must include a [Swap] section, which carries
    information about the swap device it supervises. A number of
    options that may be used in this section are shared with other
    unit types. These options are documented in
    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    and
    <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
    The options specific to the [Swap] section of swap units are the
    following:</para>

    <variablelist class='unit-directives'>

      <varlistentry>
        <term><varname>What=</varname></term>
        <listitem><para>Takes an absolute path of a device node or file to use for paging. See <citerefentry
        project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
        details. If this refers to a device node, a dependency on the respective device unit is automatically
        created. (See
        <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
        for more information.) If this refers to a file, a dependency on the respective mount unit is
        automatically created. (See
        <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
        more information.) This option is mandatory. Note that the usual specifier expansion is applied to
        this setting, literal percent characters should hence be written as
        <literal class='specifiers'>%%</literal>.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><varname>Priority=</varname></term>

        <listitem><para>Swap priority to use when activating the swap
        device or file. This takes an integer. This setting is
        optional and ignored when the priority is set by <option>pri=</option> in the
        <varname>Options=</varname> key.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><varname>Options=</varname></term>

        <listitem><para>May contain an option string for the swap device. This may be used for controlling discard
        options among other functionality, if the swap backing device supports the discard or trim operation. (See
        <citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>
        for more information.) Note that the usual specifier expansion is applied to this setting, literal percent
        characters should hence be written as <literal>%%</literal>.</para></listitem>
      </varlistentry>

      <varlistentry>
        <term><varname>TimeoutSec=</varname></term>
        <listitem><para>Configures the time to wait for the swapon
        command to finish. If a command does not exit within the
        configured time, the swap will be considered failed and be
        shut down again. All commands still running will be terminated
        forcibly via <constant>SIGTERM</constant>, and after another
        delay of this time with <constant>SIGKILL</constant>. (See
        <option>KillMode=</option> in
        <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.)
        Takes a unit-less value in seconds, or a time span value such
        as "5min 20s". Pass <literal>0</literal> to disable the
        timeout logic. Defaults to
        <varname>DefaultTimeoutStartSec=</varname> from the manager
        configuration file (see
        <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
        </para></listitem>
      </varlistentry>
    </variablelist>

    <para>Check
    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    and
    <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
    for more settings.</para>
  </refsect1>

  <refsect1>
      <title>See Also</title>
      <para>
        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
        <citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
        <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
      </para>
  </refsect1>

</refentry>
