---
name: "update-initrd"
section: "8"
platform: "linux"
package: "discover1"
version: "1.7.7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/update-initrd"
---

# update-initrd(8)

(re-)generate initialization ramdisk for use with discover

## NAME

update-initrd - (re-)generate initialization ramdisk for use with discover

## SYNOPSIS

**update-initrd** *kernel-version*

## DESCRIPTION

**update-initrd** is used to generate an initialization ramdisk image (initrd for short) for use with the **discover***(8)* utility, to perform boot-time hardware detection.  When a boot loader capable of loading an initrd as well as a kernel image is used, device drivers used to access the root filesystem may be built as modules and placed in the initrd instead of compiled into the kernel itself. **update-initrd** handles the creation of just such an initrd, using the currently installed modules corresponding to *kernel-version*.

Note that the filesystem driver for the initrd filesystem (currently ext2) cannot be thus modularized, because the booting kernel needs to be able to comprehend the initrd.

## OPERANDS

**update-initrd** takes a single argument - the version number of the (installed) kernel for which to generate an initrd image.

## EXTENDED DESCRIPTION

**update-initrd** expects to find the following files, corresponding to an installed Linux kernel-image package, for the Debian GNU/Linux system:

*/boot/vmlinuz-*kernel-version

*/boot/System.map-*kernel-version

*/lib/modules/*kernel-version*/modules.dep*

A check for actual kernel modules in the modules directory is also made.

The only kernel versions currently supported by **update-initrd** are the 2.2 series and the 2.4 series; if some other kernel version is specified, a warning is issued and the program exits without doing anything further.

Next, a temporary directory is created (see ENVIRONMENT below); if it cannot be, **update-initrd** exits with an error.  This temporary directory is used to create the initrd with [**mke2fs**(8)](/mke2fs/8.md), and then mounted as a loop device (thus, the environment in which update-initrd is run needs to support the loop device type).

The initrd is populated with a linuxrc file, found in */usr/share/discover/linuxrc*, the [**ash**(1)](/ash/1.md) shell (installed as "/bin/sh"), [**mount**(8)](/mount/8.md), [**umount**(8)](/umount/8.md), [**discover**(8)](/discover/8.md), [**insmod**(8)](/insmod/8.md), and [**modprobe**(8)](/modprobe/8.md). The C and C math libraries are also installed, as is the discover library and several data files used by discover to identify hardware.  Some other essentials for an (extremely) minimal root filesystem are also prepared.

Finally, the *modules.dep* file and any modules present in the *kernel-version* module directory identified as SCSI drivers by discover, as well as the "sd\_mod" (SCSI disk layer) and "ide-scsi" (SCSI emulation layer for IDE CD-ROM drives) modules, and any modules they depend on, are installed into the initrd.

The initrd loop filesystem is then unmounted, compressed, and placed in */boot/initrd-*kernel-version*.gz*; any existing file of this name is backed up to */boot/initrd-*kernel-version*.gz.old*.

## ENVIRONMENT

- *TMPDIR*

  If defined, **update-initrd** uses the contents of this variable as the parent of its temporary work directory.  Otherwise, */tmp* is used.

## FUTURE DIRECTIONS

It would be nice to be able to arbitrarily specify the modules placed on the initrd, and to use any filesystem type desired for the initrd (in which case it would be a good idea to check for the corresponding kernel module and error out).

## SEE ALSO

[**discover**(8)](/discover/8.md), [**discover.conf**(5)](/discover.conf/5.md).

## AUTHORS

Ian Murdock and Branden Robinson for Progeny Linux Systems, Inc. and Debian GNU/Linux.
