{
    "mode": "man",
    "parameter": "bootup",
    "section": "7",
    "url": "https://www.chedong.com/phpMan.php/man/bootup/7/json",
    "generated": "2026-08-30T07:13:52Z",
    "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 \u001b[34mGRUB[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 implemented as an \"initramfs\" — a compressed\nCPIO archive that the kernel extracts into a tmpfs. In the past normal file systems using an\nin-memory block device (ramdisk) were used, and the name \"initrd\" is still used to describe\nboth concepts. It's the boot loader or the firmware that loads both the kernel and\ninitrd/initramfs images into memory, but the kernel which interprets it as a file system.\nsystemd(1) may be used to manage 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...)   |             |              |\n|    |   tmpfiles, random            |           |             |    remote-fs.target\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": []
        },
        "BOOTUP IN THE INITRD": {
            "content": "Systemd can be used in the initrd as well. It detects the initrd environment by checking for\nthe /etc/initrd-release file. The default target in the initrd is initrd.target. The bootup\nprocess is identical to the system manager bootup until the target basic.target. After that,\nsystemd executes the special target initrd.target. Before any file systems are mounted, the\nmanager will determine whether the system shall resume from hibernation or proceed with\nnormal boot. This is accomplished by systemd-hibernate-resume.service which must be finished\nbefore local-fs-pre.target, so no filesystems can be mounted before the check is complete.\nWhen the root device becomes available, initrd-root-device.target is reached. If the root\ndevice can be mounted at /sysroot, the sysroot.mount unit becomes active and\ninitrd-root-fs.target is reached. The service initrd-parse-etc.service scans\n/sysroot/etc/fstab for a possible /usr/ mount point and additional entries marked with the\nx-initrd.mount option. All entries found are mounted below /sysroot, and initrd-fs.target is\nreached. The service initrd-cleanup.service isolates to the initrd-switch-root.target, where\ncleanup services can run. As the very last step, the initrd-switch-root.service is activated,\nwhich will cause the system 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",
            "subsections": []
        },
        "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               |               |               |\nsystemd-reboot.service     |               |               |\n|               v               |               |\n|    systemd-poweroff.service   |               |\nv               |               v               |\nreboot.target         |      systemd-halt.service     |\nv               |               v\npoweroff.target         |    systemd-kexec.service\nv               |\nhalt.target          |\nv\nkexec.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\nsystemd 255                                                                                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"
        }
    ]
}