{
    "mode": "man",
    "parameter": "bootup",
    "section": "7",
    "url": "https://www.chedong.com/phpMan.php/man/bootup/7/json",
    "generated": "2026-06-26T07:27:08Z",
    "sections": {
        "NAME": {
            "content": "bootup - System bootup process\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "A number of different components are involved in the boot of a Linux system. Immediately\nafter power-up, the system firmware will do minimal hardware initialization, and hand control\nover to a boot loader (e.g.  systemd-boot(7) or GRUB[1]) stored on a persistent storage\ndevice. This boot loader will then invoke an OS kernel from disk (or the network). On systems\nusing EFI or other types of firmware, this firmware may also load the kernel directly.\n\nThe kernel (optionally) mounts an in-memory file system, often generated by dracut(8), which\nlooks for the root file system. Nowadays this is usually implemented as an initramfs — a\ncompressed archive which is extracted when the kernel boots up into a lightweight in-memory\nfile system based on tmpfs, but in the past normal file systems using an in-memory block\ndevice (ramdisk) were used, and the name \"initrd\" is still used to describe both concepts.\nIt's the boot loader or the firmware that loads both the kernel and initrd/initramfs images\ninto memory, but the kernel which interprets it as a file system.  systemd(1) may be used to\nmanage services in the initrd, similarly to the real system.\n\nAfter the root file system is found and mounted, the initrd hands over control to the host's\nsystem manager (such as systemd(1)) stored in the root file system, which is then responsible\nfor probing all remaining hardware, mounting all necessary file systems and spawning all\nconfigured services.\n\nOn shutdown, the system manager stops all services, unmounts all file systems (detaching the\nstorage technologies backing them), and then (optionally) jumps back into the initrd code\nwhich unmounts/detaches the root file system and the storage it resides on. As a last step,\nthe system is powered down.\n\nAdditional information about the system boot process may be found in boot(7).\n",
            "subsections": []
        },
        "SYSTEM MANAGER BOOTUP": {
            "content": "At boot, the system manager on the OS image is responsible for initializing the required file\nsystems, services and drivers that are necessary for operation of the system. On systemd(1)\nsystems, this process is split up in various discrete steps which are exposed as target\nunits. (See systemd.target(5) for detailed information about target units.) The boot-up\nprocess is highly parallelized so that the order in which specific target units are reached\nis not deterministic, but still adheres to a limited amount of ordering structure.\n\nWhen systemd starts up the system, it will activate all units that are dependencies of\ndefault.target (as well as recursively all dependencies of these dependencies). Usually,\ndefault.target is simply an alias of graphical.target or multi-user.target, depending on\nwhether the system is configured for a graphical UI or only for a text console. To enforce\nminimal ordering between the units pulled in, a number of well-known target units are\navailable, as listed on systemd.special(7).\n\nThe following chart is a structural overview of these well-known units and their position in\nthe boot-up logic. The arrows describe which units are pulled in and ordered before which\nother units. Units near the top are started before units nearer to the bottom of the chart.\n\ncryptsetup-pre.target veritysetup-pre.target\n|\n(various low-level                                v\nAPI VFS mounts:             (various cryptsetup/veritysetup devices...)\nmqueue, configfs,                                |    |\ndebugfs, ...)                                    v    |\n|                                  cryptsetup.target  |\n|  (various swap                                 |    |    remote-fs-pre.target\n|   devices...)                                  |    |     |        |\n|    |                                           |    |     |        v\n|    v                       local-fs-pre.target |    |     |  (network file systems)\n|  swap.target                       |           |    v     v                 |\n|    |                               v           |  remote-cryptsetup.target  |\n|    |  (various low-level  (various mounts and  |  remote-veritysetup.target |\n|    |   services: udevd,    fsck services...)   |             |    remote-fs.target\n|    |   tmpfiles, random            |           |             |             /\n|    |   seed, sysctl, ...)          v           |             |            /\n|    |      |                 local-fs.target    |             |           /\n|    |      |                        |           |             |          /\n\\||   |/             |         /\n\\ /                                |        /\nv                                 |       /\nsysinit.target                           |      /\n|                                 |     /\n/|\\           |    /\n/              |        |      |               \\          |   /\n|              |        |      |               |          |  /\nv              v        |      v               |          | /\n(various       (various      |  (various            |          |/\ntimers...)      paths...)   |   sockets...)        |          |\n|              |        |      |               |          |\nv              v        |      v               |          |\ntimers.target  paths.target   |  sockets.target      |          |\n|              |        |      |               v          |\nv              \\ | /         rescue.service   |\n\\|/                     |          |\nv                      v          |\nbasic.target         rescue.target    |\n|                                 |\nv             |\n/              |              \\            |\n|              |              |            |\nv              v              v            |\ndisplay-    (various system   (various system  |\nmanager.service     services        services)      |\n|         required for        |            |\n|        graphical UIs)       v            v\n|              |            multi-user.target\nemergency.service    |              |              |\n|            \\ | /\nv                          \\|/\nemergency.target                    v\ngraphical.target\n\nTarget units that are commonly used as boot targets are emphasized. These units are good\nchoices as goal targets, for example by passing them to the systemd.unit= kernel command line\noption (see systemd(1)) or by symlinking default.target to them.\n\ntimers.target is pulled-in by basic.target asynchronously. This allows timers units to depend\non services which become only available later in boot.\n",
            "subsections": []
        },
        "USER MANAGER STARTUP": {
            "content": "The system manager starts the user@uid.service unit for each user, which launches a separate\nunprivileged instance of systemd for each user — the user manager. Similarly to the system\nmanager, the user manager starts units which are pulled in by default.target. The following\nchart is a structural overview of the well-known user units. For non-graphical sessions,\ndefault.target is used. Whenever the user logs into a graphical session, the login manager\nwill start the graphical-session.target target that is used to pull in units required for the\ngraphical session. A number of targets (shown on the right side) are started when specific\nhardware is available to the user.\n\n(various           (various         (various\ntimers...)         paths...)        sockets...)    (sound devices)\n|                  |                 |               |\nv                  v                 v               v\ntimers.target      paths.target     sockets.target    sound.target\n|                  |                 |\n\\   |/         (bluetooth devices)\n\\ /                                   |\nV                                    v\nbasic.target                          bluetooth.target\n|\n/ \\                      (smartcard devices)\n/                    \\                           |\n|                    |                           v\n|                    v                      smartcard.target\nv            graphical-session-pre.target\n(various user services)          |                       (printers)\n|                    v                           |\n|       (services for the graphical session)     v\n|                    |                       printer.target\nv                    v\ndefault.target      graphical-session.target\n",
            "subsections": [
                {
                    "name": "BOOTUP IN THE INITIAL RAM DISK (INITRD)",
                    "content": "The initial RAM disk implementation (initrd) can be set up using systemd as well. In this\ncase, boot up inside the initrd follows the following structure.\n\nsystemd detects that it is run within an initrd by checking for the file /etc/initrd-release.\nThe default target in the initrd is initrd.target. The bootup process begins identical to the\nsystem manager bootup (see above) until it reaches basic.target. From there, systemd\napproaches the special target initrd.target. Before any file systems are mounted, it must be\ndetermined whether the system will resume from hibernation or proceed with normal boot. This\nis accomplished by systemd-hibernate-resume@.service which must be finished before\nlocal-fs-pre.target, so no filesystems can be mounted before the check is complete. When the\nroot device becomes available, initrd-root-device.target is reached. If the root device can\nbe mounted at /sysroot, the sysroot.mount unit becomes active and initrd-root-fs.target is\nreached. The service initrd-parse-etc.service scans /sysroot/etc/fstab for a possible /usr/\nmount point and additional entries marked with the x-initrd.mount option. All entries found\nare mounted below /sysroot, and initrd-fs.target is reached. The service\ninitrd-cleanup.service isolates to the initrd-switch-root.target, where cleanup services can\nrun. As the very last step, the initrd-switch-root.service is activated, which will cause the\nsystem to switch its root to /sysroot.\n\n: (beginning identical to above)\n:\nv\nbasic.target\n|                                 emergency.service\n/|                                         |\n/                       |                                         v\n|            initrd-root-device.target                    emergency.target\n|                       |\n|                       v\n|                  sysroot.mount\n|                       |\n|                       v\n|             initrd-root-fs.target\n|                       |\n|                       v\nv            initrd-parse-etc.service\n(custom initrd                 |\nservices...)                  v\n|            (sysroot-usr.mount and\n|             various mounts marked\n|               with fstab option\n|              x-initrd.mount...)\n|                       |\n|                       v\n|                initrd-fs.target\n\\ |\n\\|\nv\ninitrd.target\n|\nv\ninitrd-cleanup.service\nisolates to\ninitrd-switch-root.target\n|\nv\n/|\n/                       v\n|        initrd-udevadm-cleanup-db.service\nv                       |\n(custom initrd                 |\nservices...)                  |\n\\ |\n\\|\nv\ninitrd-switch-root.target\n|\nv\ninitrd-switch-root.service\n|\nv\nTransition to Host OS\n"
                }
            ]
        },
        "SYSTEM MANAGER SHUTDOWN": {
            "content": "System shutdown with systemd also consists of various target units with some minimal ordering\nstructure applied:\n\n(conflicts with  (conflicts with\nall system     all file system\nservices)     mounts, swaps,\n|           cryptsetup/\n|           veritysetup\n|          devices, ...)\n|                |\nv                v\nshutdown.target    umount.target\n|                |\n\\   /\n\\ /\nv\n(various low-level\nservices)\n|\nv\nfinal.target\n|\n/ \\\n/                         |                        |                      \\\n|                         |                        |                      |\nv                         v                        v                      v\nsystemd-reboot.service   systemd-poweroff.service   systemd-halt.service   systemd-kexec.service\n|                         |                        |                      |\nv                         v                        v                      v\nreboot.target             poweroff.target            halt.target           kexec.target\n\nCommonly used system shutdown targets are emphasized.\n\nNote that systemd-halt.service(8), systemd-reboot.service, systemd-poweroff.service and\nsystemd-kexec.service will transition the system and server manager (PID 1) into the second\nphase of system shutdown (implemented in the systemd-shutdown binary), which will unmount any\nremaining file systems, kill any remaining processes and release any other remaining\nresources, in a simple and robust fashion, without taking any service or unit concept into\naccount anymore. At that point, regular applications and resources are generally terminated\nand released already, the second phase hence operates only as safety net for everything that\ncouldn't be stopped or released for some reason during the primary, unit-based shutdown phase\ndescribed above.\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "systemd(1), boot(7), systemd.special(7), systemd.target(5), systemd-halt.service(8),\ndracut(8)\n",
            "subsections": []
        },
        "NOTES": {
            "content": "1. GRUB\nhttps://www.gnu.org/software/grub/\n\n\n\nsystemd 249                                                                                BOOTUP(7)",
            "subsections": []
        }
    },
    "summary": "bootup - System bootup process",
    "flags": [],
    "examples": [],
    "see_also": [
        {
            "name": "systemd",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/systemd/1/json"
        },
        {
            "name": "boot",
            "section": "7",
            "url": "https://www.chedong.com/phpMan.php/man/boot/7/json"
        },
        {
            "name": "systemd.special",
            "section": "7",
            "url": "https://www.chedong.com/phpMan.php/man/systemd.special/7/json"
        },
        {
            "name": "systemd.target",
            "section": "5",
            "url": "https://www.chedong.com/phpMan.php/man/systemd.target/5/json"
        },
        {
            "name": "systemd-halt.service",
            "section": "8",
            "url": "https://www.chedong.com/phpMan.php/man/systemd-halt.service/8/json"
        },
        {
            "name": "dracut",
            "section": "8",
            "url": "https://www.chedong.com/phpMan.php/man/dracut/8/json"
        }
    ]
}