initrd — boot loader initialized RAM disk
The /dev/initrd is a
      read-only block device assigned major number 1 and minor
      number 250. Typically /dev/initrd is owned by root.disk with mode 0400 (read access by
      root only). If the Linux system does not have /dev/initrd already created, it can be
      created with the following commands:
        mknod −m 400 /dev/initrd b 1 250
        chown root:disk /dev/initrd
      Also, support for both "RAM disk" and "Initial RAM disk"
      (e.g., CONFIG_BLK_DEV_RAM=y and
      CONFIG_BLK_DEV_INITRD=y) must be
      compiled directly into the Linux kernel to use /dev/initrd. When using /dev/initrd, the RAM disk driver cannot be
      loaded as a module.
The special file /dev/initrd
      is a read-only block device. This device is a RAM disk that
      is initialized (e.g., loaded) by the boot loader before the
      kernel is started. The kernel then can use /dev/initrd's contents for a two-phase
      system boot-up.
In the first boot-up phase, the kernel starts up and
      mounts an initial root filesystem from the contents of
      /dev/initrd (e.g., RAM disk
      initialized by the boot loader). In the second phase,
      additional drivers or other modules are loaded from the
      initial root device's contents. After loading the additional
      modules, a new root filesystem (i.e., the normal root
      filesystem) is mounted from a different device.
When booting up with initrd, the system boots as follows:
The boot loader loads the kernel program and
              /dev/initrd's contents
              into memory.
On kernel startup, the kernel uncompresses and
              copies the contents of the device /dev/initrd onto device
              /dev/ram0 and then
              frees the memory used by /dev/initrd.
The kernel then read-write mounts the device
              /dev/ram0 as the
              initial root filesystem.
If the indicated normal root filesystem is also
              the initial root filesystem (e.g., /dev/ram0) then the kernel skips to
              the last step for the usual boot sequence.
If the executable file /linuxrc is present in the initial
              root filesystem, /linuxrc is executed with UID 0.
              (The file /linuxrc must
              have executable permission. The file /linuxrc can be any valid
              executable, including a shell script.)
If /linuxrc is not
              executed or when /linuxrc terminates, the normal
              root filesystem is mounted. (If /linuxrc exits with any filesystems
              mounted on the initial root filesystem, then the
              behavior of the kernel is UNSPECIFIED. See the NOTES section
              for the current kernel behavior.)
If the normal root filesystem has a directory
              /initrd, the device
              /dev/ram0 is moved from
              / to /initrd. Otherwise, if the
              directory /initrd does
              not exist, the device /dev/ram0 is unmounted. (When moved
              from / to /initrd, /dev/ram0 is not unmounted and
              therefore processes can remain running from
              /dev/ram0. If directory
              /initrd does not exist
              on the normal root filesystem and any processes
              remain running from /dev/ram0 when /linuxrc exits, the behavior of the
              kernel is UNSPECIFIED.
              See the NOTES section for the current kernel
              behavior.)
The usual boot sequence (e.g., invocation of
              /sbin/init) is
              performed on the normal root filesystem.
The following boot loader options, when used with
        initrd, affect the kernel's
        boot-up operation:
initrd=filenameSpecifies the file to load as the contents of
              /dev/initrd. For
              LOADLIN this is a
              command-line option. For LILO you have to use this command
              in the LILO
              configuration file /etc/lilo.config. The filename
              specified with this option will typically be a
              gzipped filesystem image.
noinitrdThis boot option disables the two-phase boot-up
              operation. The kernel performs the usual boot
              sequence as if /dev/initrd was not initialized.
              With this option, any contents of /dev/initrd loaded into memory by
              the boot loader contents are preserved. This option
              permits the contents of /dev/initrd to be any data and need
              not be limited to a filesystem image. However, device
              /dev/initrd is
              read-only and can be read only one time after system
              startup.
root=device-nameSpecifies the device to be used as the normal root
              filesystem. For LOADLIN
              this is a command-line option. For LILO this is a boot time option or
              can be used as an option line in the LILO configuration file
              /etc/lilo.config. The
              device specified by the this option must be a
              mountable device having a suitable root
              filesystem.
By default, the kernel's settings (e.g., set in the
        kernel file with rdev(8) or compiled into the
        kernel file), or the boot loader option setting is used for
        the normal root filesystems. For an NFS-mounted normal root
        filesystem, one has to use the nfs_root_name and nfs_root_addrs boot options to give the
        NFS settings. For more information on NFS-mounted root see
        the kernel documentation file Documentation/filesystems/nfsroot.txt.
        For more information on setting the root filesystem see
        also the LILO and
        LOADLIN documentation.
It is also possible for the /linuxrc executable to change the normal
        root device. For /linuxrc to
        change the normal root device, /proc must be mounted. After mounting
        /proc, /linuxrc changes the normal root device
        by writing into the proc files /proc/sys/kernel/real-root-dev,
        /proc/sys/kernel/nfs-root-name, and
        /proc/sys/kernel/nfs-root-addrs. For a
        physical root device, the root device is changed by having
        /linuxrc write the new root
        filesystem device number into /proc/sys/kernel/real-root-dev. For an
        NFS root filesystem, the root device is changed by having
        /linuxrc write the NFS
        setting into files /proc/sys/kernel/nfs-root-name and
        /proc/sys/kernel/nfs-root-addrs and then
        writing 0xff (e.g., the pseudo-NFS-device number) into file
        /proc/sys/kernel/real-root-dev. For
        example, the following shell command line would change the
        normal root device to /dev/hdb1:
    echo 0x365 >/proc/sys/kernel/real-root-dev
        For an NFS example, the following shell command lines
        would change the normal root device to the NFS directory
        /var/nfsroot on a local
        networked NFS server with IP number 193.8.232.7 for a
        system with IP number 193.8.232.2 and named "idefix":
    echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
    echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \
        >/proc/sys/kernel/nfs-root-addrs
    echo 255 >/proc/sys/kernel/real-root-dev
        | ![[Note]](../stylesheet/note.png) | Note | 
|---|---|
| The use of  | 
The main motivation for implementing initrd was to allow for modular kernel
        configuration at system installation.
A possible system installation scenario is as follows:
The loader program boots from floppy or other
              media with a minimal kernel (e.g., support for
              /dev/ram, /dev/initrd, and the ext2
              filesystem) and loads /dev/initrd with a gzipped version
              of the initial filesystem.
The executable /linuxrc determines what is needed
              to (1) mount the normal root filesystem (i.e., device
              type, device drivers, filesystem) and (2) the
              distribution media (e.g., CD-ROM, network, tape,
              ...). This can be done by asking the user, by
              auto-probing, or by using a hybrid approach.
The executable /linuxrc loads the necessary
              modules from the initial root filesystem.
The executable /linuxrc creates and populates the
              root filesystem. (At this stage the normal root
              filesystem does not have to be a completed system
              yet.)
The executable /linuxrc sets /proc/sys/kernel/real-root-dev,
              unmount /proc, the
              normal root filesystem and any other filesystems it
              has mounted, and then terminates.
The kernel then mounts the normal root filesystem.
Now that the filesystem is accessible and intact, the boot loader can be installed.
The boot loader is configured to load into
              /dev/initrd a
              filesystem with the set of modules that was used to
              bring up the system. (e.g., Device /dev/ram0 can be modified, then
              unmounted, and finally, the image is written from
              /dev/ram0 to a
              file.)
The system is now bootable and additional installation tasks can be performed.
The key role of /dev/initrd in the above is to reuse the
        configuration data during normal system operation without
        requiring initial kernel selection, a large generic kernel
        or, recompiling the kernel.
A second scenario is for installations where Linux runs
        on systems with different hardware configurations in a
        single administrative network. In such cases, it may be
        desirable to use only a small set of kernels (ideally only
        one) and to keep the system-specific part of configuration
        information as small as possible. In this case, create a
        common file with all needed modules. Then, only the
        /linuxrc file or a file
        executed by /linuxrc would be
        different.
A third scenario is more convenient recovery disks.
        Because information like the location of the root
        filesystem partition is not needed at boot time, the system
        loaded from /dev/initrd can
        use a dialog and/or auto-detection followed by a possible
        sanity check.
Last but not least, Linux distributions on CD-ROM may
        use initrd for easy
        installation from the CD-ROM. The distribution can use
        LOADLIN to directly load
        /dev/initrd from CD-ROM
        without the need of any floppies. The distribution could
        also use a LILO boot floppy
        and then bootstrap a bigger RAM disk via /dev/initrd from the CD-ROM.
With the current kernel, any filesystems that remain
            mounted when /dev/ram0 is
            moved from / to
            /initrd continue to be
            accessible. However, the /proc/mounts entries are not
            updated.
With the current kernel, if directory /initrd does not exist, then
            /dev/ram0 will
            not be fully
            unmounted if /dev/ram0 is
            used by any process or has any filesystem mounted on
            it. If /dev/ram0 is
            not fully
            unmounted, then /dev/ram0
            will remain in memory.
Users of /dev/initrd
            should not depend on the behavior give in the above
            notes. The behavior may change in future versions of
            the Linux kernel.
chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8)
Documentation/initrd.txt in
      the Linux kernel source tree, the LILO documentation, the
      LOADLIN documentation, the SYSLINUX documentation
This page is part of release 4.07 of the Linux man-pages project. A
      description of the project, information about reporting bugs,
      and the latest version of this page, can be found at
      https://www.kernel.org/doc/man−pages/.
| This man-page is Copyright (C) 1997 John S. Kallal %%%LICENSE_START(VERBATIM) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and author(s) of this work. %%%LICENSE_END If the you wish to distribute versions of this work under other conditions than the above, please contact the author(s) at the following for permission: John S. Kallal - email: <kallalvoicenet.com> mail: 518 Kerfoot Farm RD, Wilmington, DE 19803-2444, USA phone: (302)654-5478 $Id: initrd.4,v 0.9 1997/11/07 05:05:32 kallal Exp kallal $ |