There are various attempts to standardize the file system hierarchy of Linux systems. In systemd we leave much of the file system layout open to the operating system, but here’s what systemd strictly requires:
/
, /usr
, /etc
must be mounted when the host systemd is first invoked.
This may be achieved either by using the kernel’s built-in root disk mounting (in which case /
, /usr
and /etc
need to be on the same file system), or via an initrd, which could mount the three directories from different sources.
/bin
, /sbin
, /lib
(and /lib64
if applicable) should reside on /
, or be symlinks to the /usr
file system (recommended).
All of them must be available before the host systemd is first executed.
/var
does not have to be mounted when the host systemd is first invoked, however,
it must be configured so that it is mounted writable before local-fs.target is reached (for example, by simply listing it in /etc/fstab
).
/tmp
is recommended to be a tmpfs (default), but doesn’t have to.
If configured, it must be mounted before local-fs.target is reached (for example, by listing it in /etc/fstab
).
/dev
must exist as an empty mount point and will automatically be mounted by systemd with a devtmpfs. Non-devtmpfs boots are not supported.
/proc
and /sys
must exist as empty mount points and will automatically be mounted by systemd with procfs and sysfs.
/run
must exist as an empty mount point and will automatically be mounted by systemd with a tmpfs.
The other directories usually found in the root directory (such as /home
, /boot
, /opt
) are irrelevant to systemd.
If they are defined they may be mounted from any source and at any time, though it is a good idea to mount them also before local-fs.target is reached.