<?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+ -->
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
<refentry id="bootup">
boot loader will then invoke an OS kernel from disk (or the network). On systems using EFI or other types
of firmware, this firmware may also load the kernel directly.</para>
- <para>The kernel (optionally) mounts an in-memory file system, often generated by
- <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- which looks for the root file system. Nowadays this is usually implemented as an initramfs — a compressed
- archive which is extracted when the kernel boots up into a lightweight in-memory file system based on
- tmpfs, but in the past normal file systems using an in-memory block device (ramdisk) were used, and the
+ <para>The kernel (optionally) mounts an in-memory file system, which looks for the root file system.
+ Nowadays this is implemented as an "initramfs" — a compressed CPIO archive that the kernel extracts into
+ a tmpfs. In the past normal file systems using an in-memory block device (ramdisk) were used, and the
name "initrd" is still used to describe both concepts. It's the boot loader or the firmware that loads
both the kernel and initrd/initramfs images into memory, but the kernel which interprets it as a file
- system. <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> may
- be used to manage services in the initrd, similarly to the real system.</para>
+ system.
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> may be used
+ to manage services in the initrd, similarly to the real system.</para>
<para>After the root file system is found and mounted, the initrd hands over control to the host's system
manager (such as
<!-- note: do not use unicode ellipsis here, because docbook will replace that
with three dots anyway, messing up alignment -->
-<programlisting> cryptsetup-pre.target
+<programlisting> cryptsetup-pre.target veritysetup-pre.target
|
(various low-level v
- API VFS mounts: (various cryptsetup devices...)
+ API VFS mounts: (various cryptsetup/veritysetup devices...)
mqueue, configfs, | |
debugfs, ...) v |
| cryptsetup.target |
| v local-fs-pre.target | | | (network file systems)
| swap.target | | v v |
| | v | remote-cryptsetup.target |
- | | (various low-level (various mounts and | | |
- | | services: udevd, fsck services...) | | remote-fs.target
- | | tmpfiles, random | | | /
- | | seed, sysctl, ...) v | | /
- | | | local-fs.target | | /
- | | | | | | /
- \____|______|_______________ ______|___________/ | /
- \ / | /
- v | /
- sysinit.target | /
- | | /
- ______________________/|\_____________________ | /
- / | | | \ | /
- | | | | | | /
- v v | v | | /
- (various (various | (various | |/
+ | | (various low-level (various mounts and | remote-veritysetup.target |
+ | | services: udevd, fsck services...) | | |
+ | | tmpfiles, random | | | remote-fs.target
+ | | seed, sysctl, ...) v | | |
+ | | | local-fs.target | | _____________/
+ | | | | | |/
+ \____|______|_______________ ______|___________/ |
+ \ / |
+ v |
+ sysinit.target |
+ | |
+ ______________________/|\_____________________ |
+ / | | | \ |
+ | | | | | |
+ v v | v | |
+ (various (various | (various | |
timers...) paths...) | sockets...) | |
| | | | | |
v v | v | |
available to the user.</para>
<programlisting>
- (various (various (various
- timers...) paths...) sockets...) (sound devices)
- | | | |
- v v v v
- timers.target paths.target sockets.target sound.target
- | | |
- \______________ _|_________________/ (bluetooth devices)
- \ / |
- V v
- basic.target bluetooth.target
- |
- __________/ \_______ (smartcard devices)
- / \ |
- | | v
- | v smartcard.target
- v graphical-session-pre.target
- (various user services) | (printers)
- | v |
- | (services for the graphical session) v
- | | printer.target
- v v
- <emphasis>default.target</emphasis> graphical-session.target</programlisting>
-
- </refsect1>
+ (various (various (various
+ timers...) paths...) sockets...) (sound devices)
+ | | | |
+ v v v v
+ timers.target paths.target sockets.target sound.target
+ | | |
+ \______________ _|_________________/ (bluetooth devices)
+ \ / |
+ V v
+ basic.target bluetooth.target
+ |
+ __________/ \_______ (smartcard devices)
+ / \ |
+ | | v
+ | v smartcard.target
+ v graphical-session-pre.target
+(various user services) | (printers)
+ | v |
+ | (services for the graphical session) v
+ | | printer.target
+ v v
+ <emphasis>default.target</emphasis> graphical-session.target</programlisting>
+
+ </refsect1>
<refsect1>
- <title>Bootup in the Initial RAM Disk (initrd)</title>
- <para>The initial RAM disk implementation (initrd) can be set up
- using systemd as well. In this case, boot up inside the initrd
- follows the following structure.</para>
-
- <para>systemd detects that it is run within an initrd by checking
- for the file <filename>/etc/initrd-release</filename>.
- The default target in the initrd is
- <filename>initrd.target</filename>. The bootup process begins
- identical to the system manager bootup (see above) until it
- reaches <filename>basic.target</filename>. From there, systemd
- approaches the special target <filename>initrd.target</filename>.
-
- Before any file systems are mounted, it must be determined whether
- the system will resume from hibernation or proceed with normal boot.
- This is accomplished by <filename>systemd-hibernate-resume@.service</filename>
- which must be finished before <filename>local-fs-pre.target</filename>,
- so no filesystems can be mounted before the check is complete.
+ <title>Bootup in the initrd</title>
+
+ <para>Systemd can be used in the initrd as well. It detects the initrd environment by checking for the
+ <filename>/etc/initrd-release</filename> file. The default target in the initrd is
+ <filename>initrd.target</filename>. The bootup process is identical to the system manager bootup until
+ the target <filename>basic.target</filename>. After that, systemd executes the special target
+ <filename>initrd.target</filename>.
+
+ Before any file systems are mounted, the manager will determine whether the system shall resume from
+ hibernation or proceed with normal boot. This is accomplished by
+ <filename>systemd-hibernate-resume.service</filename> which must be finished before
+ <filename>local-fs-pre.target</filename>, so no filesystems can be mounted before the check is complete.
When the root device becomes available,
<filename>initrd-root-device.target</filename> is reached.
<filename>initrd-root-fs.target</filename> is reached. The service
<filename>initrd-parse-etc.service</filename> scans
<filename>/sysroot/etc/fstab</filename> for a possible
- <filename>/usr</filename> mount point and additional entries
+ <filename>/usr/</filename> mount point and additional entries
marked with the <emphasis>x-initrd.mount</emphasis> option. All
entries found are mounted below <filename>/sysroot</filename>, and
<filename>initrd-fs.target</filename> is reached. The service
<filename>/sysroot</filename>.
</para>
-<programlisting> : (beginning identical to above)
- :
- v
- basic.target
- | emergency.service
- ______________________/| |
- / | v
- | initrd-root-device.target <emphasis>emergency.target</emphasis>
- | |
- | v
- | sysroot.mount
- | |
- | v
- | initrd-root-fs.target
- | |
- | v
- v initrd-parse-etc.service
- (custom initrd |
- services...) v
- | (sysroot-usr.mount and
- | various mounts marked
- | with fstab option
- | x-initrd.mount...)
- | |
- | v
- | initrd-fs.target
- \______________________ |
- \|
- v
- initrd.target
- |
- v
- initrd-cleanup.service
- isolates to
- initrd-switch-root.target
- |
- v
- ______________________/|
- / v
- | initrd-udevadm-cleanup-db.service
- v |
- (custom initrd |
- services...) |
- \______________________ |
- \|
- v
- initrd-switch-root.target
- |
- v
- initrd-switch-root.service
- |
- v
- Transition to Host OS</programlisting>
+<programlisting> : (beginning identical to above)
+ :
+ v
+ basic.target
+ | emergency.service
+ ______________________/| |
+ / | v
+ | initrd-root-device.target <emphasis>emergency.target</emphasis>
+ | |
+ | v
+ | sysroot.mount
+ | |
+ | v
+ | initrd-root-fs.target
+ | |
+ | v
+ v initrd-parse-etc.service
+(custom initrd |
+ services...) v
+ | (sysroot-usr.mount and
+ | various mounts marked
+ | with fstab option
+ | x-initrd.mount...)
+ | |
+ | v
+ | initrd-fs.target
+ \______________________ |
+ \|
+ v
+ initrd.target
+ |
+ v
+ initrd-cleanup.service
+ isolates to
+ initrd-switch-root.target
+ |
+ v
+ ______________________/|
+ / v
+ | initrd-udevadm-cleanup-db.service
+ v |
+(custom initrd |
+ services...) |
+ \______________________ |
+ \|
+ v
+ initrd-switch-root.target
+ |
+ v
+ initrd-switch-root.service
+ |
+ v
+ Transition to Host OS</programlisting>
</refsect1>
<refsect1>
<para>System shutdown with systemd also consists of various target
units with some minimal ordering structure applied:</para>
-<programlisting> (conflicts with (conflicts with
- all system all file system
- services) mounts, swaps,
- | cryptsetup
- | devices, ...)
- | |
- v v
- shutdown.target umount.target
- | |
- \_______ ______/
- \ /
- v
- (various low-level
- services)
- |
- v
- final.target
- |
- _____________________________________/ \_________________________________
- / | | \
- | | | |
- v v v v
-systemd-reboot.service systemd-poweroff.service systemd-halt.service systemd-kexec.service
- | | | |
- v v v v
- <emphasis>reboot.target</emphasis> <emphasis>poweroff.target</emphasis> <emphasis>halt.target</emphasis> <emphasis>kexec.target</emphasis></programlisting>
+<programlisting> (conflicts with (conflicts with
+ all system all file system
+ services) mounts, swaps,
+ | cryptsetup/
+ | veritysetup
+ | devices, ...)
+ | |
+ v v
+ shutdown.target umount.target
+ | |
+ \_______ ______/
+ \ /
+ v
+ (various low-level
+ services)
+ |
+ v
+ final.target
+ |
+ ___________________________/ \_________________
+ / | | \
+ | | | |
+ v | | |
+systemd-reboot.service | | |
+ | v | |
+ | systemd-poweroff.service | |
+ v | v |
+ <emphasis>reboot.target</emphasis> | systemd-halt.service |
+ v | v
+ <emphasis>poweroff.target</emphasis> | systemd-kexec.service
+ v |
+ <emphasis>halt.target</emphasis> |
+ v
+ <emphasis>kexec.target</emphasis></programlisting>
<para>Commonly used system shutdown targets are <emphasis>emphasized</emphasis>.</para>
<refsect1>
<title>See Also</title>
- <para>
- <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry project='man-pages'><refentrytitle>boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd-halt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- </para>
+ <para><simplelist type="inline">
+ <member><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
+ <member><citerefentry project='man-pages'><refentrytitle>boot</refentrytitle><manvolnum>7</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>systemd-halt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
+ </simplelist></para>
</refsect1>
</refentry>