Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I read through this popular IBM doc (I see it referred quite often on the web) explaining the function of the initial RAM disk.

I hit a wall in conceptualizing how this works though.

In the doc it says

The boot loader, such as GRUB, identifies the kernel that is to be loaded and copies this kernel image and any associated initrd into memory

I'm already confused: Does it copy the entire kernel into memory or just part of it? If the entire kernel is in memory then why do we even need the initial RAM disk?

I thought the purpose of initrd was to be able to have a small generalized kernel image and initrd will install the correct modules in it before the kernel image is loaded. But if the entire kernel is already in memory why do we need initrd?

That also brings up another thing that confuses me - where are the modules that get loaded into the kernel located? Are all the kernel modules stored inside initrd?

share|improve this question
    
Yes. The entire kernel. And its first rootfs. But linux kernels havent used initrd in many years. – mikeserv Jan 26 at 18:22
    
Right I was reading that. Its been largely replaced by initramfs right? And its still a similar process with initramfs correct? – user1028270 Jan 26 at 18:35
1  
its been completely replaced for all kernels since the 2.6 series. But the process is somewhat similar except that initramfs is never unmounted - its always there and its always root, too. You have to mount your root dev over it, actually. There are also the benefits of not needing to emulate a separate block dev and similar. – mikeserv Jan 26 at 18:38
    
Cool I'm going to read that article you linked to. So the kernel modules are store in the initramfs rootfs? – user1028270 Jan 26 at 18:43
1  
@edwardtorvalds - thats all handled by udev usually, and yes, automatically. – mikeserv Jan 26 at 18:57
up vote 14 down vote accepted

The entire kernel is loaded into memory at boot, typically along with an initramfs nowadays. (It is still possible to set up a system to boot without an initramfs but that's unusual on desktops and servers.)

The initramfs's role is to provide the functionality needed to mount the "real" filesystems and continue booting the system. That involves kernel modules, and also various binaries: you need at least udev, perhaps some networking, and kmod which loads modules.

Modules can be loaded into the kernel later than just boot, so there's no special preparation of the kernel by the initramfs. They can be stored anywhere: the initramfs, /lib/modules on the real filesystem, in a development tree if you're developing a module... The initramfs only needs to contain the modules which are necessary to mount the root filesystem (which contains the rest).

share|improve this answer
    
OK that makes sense to me. I think I was conflating the kernel image and the file system it uses which obviously are totally separate. – user1028270 Jan 26 at 18:45

The entire kernel (but not its modules) will be loaded into memory. If there are modules which the kernel will need before any filesystems are available (this usually means the drivers for the filesystems and their devices), then those modules will be in the initramfs (in memory), and the kernel will load them from there. Other modules can be loaded later from the file system.

share|improve this answer

The kernel in modern Linux setups is heavily module based, i.e., the kernel proper (loaded on boot into RAM) includes just the bare minimum functionality, all the rest is compiled as modules (loadable at runtime). To make this work even when e.g. the devices or filesystems required for boot are modules, an initramfs is loaded with the kernel (as the name implies, this is a RAM area with a simple filesystem, mounted on boot). This temporary filesystem is mounted on /, and contains startup programs and the required modules. Once the startup on initramfs is done, Linux executes a pivot_root(8), mouning the real / and tossing the initramfs contents.

The point of this complexity is that e.g. a distribution can compile one kernel (minimal kernel and full set of modules), and on installation of the kernel create an initramfs tailored to the hardware and setup of the target machine. All this is required due to the wild variety of devices and configurations of "Personal Computers".

share|improve this answer
    
It doesnt do pivot_root. – mikeserv Jan 27 at 1:56

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.