---
title: Initrd Interface
category: Interfaces
layout: default
---


# The initrd Interface of systemd

The Linux initrd mechanism (short for "initial RAM disk") refers to a small
file system archive that is unpacked by the kernel and contains the first
userspace code that runs. It typically finds and transitions into the actual
root file system to use. systemd supports both initrd and initrd-less boots. If
an initrd is used it is a good idea to pass a few bits of runtime information
from the initrd to systemd in order to avoid duplicate work and to provide
performance data to the administrator. In this page we attempt to roughly
describe the interfaces that exist between the initrd and systemd. These
interfaces are currently used by dracut and the ArchLinux initrds.

* The initrd should mount `/run/` as a tmpfs and pass it pre-mounted when
  jumping into the main system when executing systemd. The mount options should
  be `mode=755,nodev,nosuid,strictatime`.

* It's highly recommended that the initrd also mounts `/usr/` (if split off) as
  appropriate and passes it pre-mounted to the main system, to avoid the
  problems described in [Booting without /usr is
  Broken](http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken).

* If the executable `/run/initramfs/shutdown` exists systemd will use it to
  jump back into the initrd on shutdown. `/run/initramfs/` should be a usable
  initrd environment to which systemd will pivot back and the `shutdown`
  executable in it should be able to detach all complex storage that for
  example was needed to mount the root file system. It's the job of the initrd
  to set up this directory and executable in the right way so that this works
  correctly. The shutdown binary is invoked with the shutdown verb as `argv[1]`,
  optionally followed (in `argv[2]`, `argv[3]`, … systemd's original command
  line options, for example `--log-level=` and similar.

* Storage daemons run from the initrd should follow the guide on [systemd
  and Storage Daemons for the Root File
  System](https://systemd.io/ROOT_STORAGE_DAEMONS) to survive properly from the
  boot initrd all the way to the point where systemd jumps back into the initrd
  for shutdown.

One last clarification: we use the term _initrd_ very generically here
describing any kind of early boot file system, regardless whether that might be
implemented as an actual ramdisk, ramfs or tmpfs. We recommend using _initrd_
in this sense as a term that is unrelated to the actual backing technologies
used.

Oh, and one last question before closing: instead of implementing these
features in your own distro's initrd, may I suggest just using Dracut instead?
It's all already implemented there!

## Using systemd inside an initrd

It is also possible and recommended to implement the initrd itself based on
systemd. Here are a few terse notes:

* Provide `/etc/initrd-release` in the initrd image. The idea is that it follows
  the same format as the usual `/etc/os-release` but describes the initial RAM
  disk implementation rather than the OS. systemd uses the existence of this
  file as a flag whether to run in initial RAM disk mode, or not.

* When run in initrd mode, systemd and its components will read a couple of
  additional command line arguments, which are generally prefixed with `rd.`

* To transition into the main system image invoke `systemctl switch-root`.

* The switch-root operation will result in a killing spree of all running
  processes. Some processes might need to be excluded from that, see the guide
  on [systemd and Storage Daemons for the Root File
  System](https://systemd.io/ROOT_STORAGE_DAEMONS).
