标签: initrd

为什么我的initrd只有一个目录,即'kernel'?

我正在使用 debian live-build 在可启动系统上工作。在该过程结束时,我获得了用于启动实时系统的典型文件:squashfs 文件、一些 GRUB 模块和配置文件,以及一个 initrd.img 文件。

我可以使用这些文件很好地启动,通过将 initrd 传递给内核

initrd=/path/to/my/initrd.img
Run Code Online (Sandbox Code Playgroud)

在引导加载程序命令行上。但是当我尝试检查 initrd 映像的内容时,如下所示:

$file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
$mkdir initTree && cd initTree
$cpio -idv < ../initrd.img
Run Code Online (Sandbox Code Playgroud)

我得到的文件树看起来像这样:

$tree --charset=ASCII
.
`-- kernel
    `-- x86
        `-- microcode
            `-- GenuineIntel.bin
Run Code Online (Sandbox Code Playgroud)

实际的文件系统树在哪里,典型的 /bin , /etc , /sbin ... 包含引导期间使用的实际文件?

linux debian initrd cpio

41
推荐指数
4
解决办法
2万
查看次数

debian 上的 mkinitcpio.conf 是什么?

我想检查一下用于构建的钩子initrd.img在我的 debian 中是否正确,但我找不到/etc/mkinitcpio.conf像 Archlinux 中的那个文件,debian 中这个文件的等价物是什么以及我如何重建 initrd.img 一旦我'编辑过那个文件吗?

initrd initramfs

18
推荐指数
1
解决办法
3万
查看次数

Linux 如何加载“initrd”映像?

我一直在试图了解启动过程,但只有一件事让我无法理解..

一旦启动了 Linux 内核并安装了根文件系统 (/),就可以运行程序,并且可以集成更多内核模块以提供附加功能。要挂载根文件系统,必须满足某些条件。内核需要相应的驱动来访问根文件系统所在的设备(尤其是SCSI驱动)。内核还必须包含读取文件系统所需的代码(ext2、reiserfs、romfs 等)。也可以想象,根文件系统已经被加密了。在这种情况下,挂载文件系统需要密码。

初始 ramdisk(也称为 initdisk 或 initrd)正好解决了上述问题。Linux 内核提供了一个选项,在挂载实际的根文件系统之前,将一个小文件系统加载到 RAM 磁盘并在那里运行程序。initrd 的加载由引导加载程序(GRUB、LILO 等)处理。引导加载程序只需要 BIOS 例程即可从引导介质加载数据。如果引导加载程序能够加载内核,它也可以加载初始 ramdisk。不需要特殊的驱动程序。

如果 /boot 不是不同的分区,而是存在于 / 分区中,那么引导加载程序是否应该需要 SCSI 驱动程序来访问“initrd”映像和内核映像?如果您可以直接访问图像,那么我们究竟为什么需要 SCSI 驱动程序?

linux boot kernel initrd

16
推荐指数
1
解决办法
4万
查看次数

整个内核是否在启动时加载到内存中?

我通读了这个流行的 IBM 文档(我在网上经常看到它被引用),解释了初始 RAM 磁盘的功能。

不过,我在概念化其工作原理时遇到了障碍。

在文档中它说

引导加载程序(例如 GRUB)识别要加载的内核并将内核映像和任何关联的 initrd复制到内存中

我已经很困惑了:它是将整个内核复制到内存中还是只是其中的一部分?如果整个内核都在内存中,那么为什么我们甚至需要初始 RAM 磁盘?

我认为 initrd 的目的是能够拥有一个小的通用内核映像,initrd 将在加载内核映像之前在其中安装正确的模块。但是如果整个内核已经在内存中,为什么我们还需要 initrd?

这也带来了另一件让我困惑的事情——加载到内核中的模块在哪里?是否所有内核模块都存储在 initrd 中?

linux grub kernel initrd initramfs

15
推荐指数
2
解决办法
8056
查看次数

是否可以在不使用 initrd 的情况下将 root 放在 LVM 中?

我刚刚建立了一个 Gentoo 基本系统(这意味着我现在可以启动和登录并使用它做一些事情)。我的根分区位于 LVM2 虚拟组中(具有单独的/boot分区)。为了启动,我需要将以下参数传递给内核:

root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm
Run Code Online (Sandbox Code Playgroud)

显然,它在挂载 root 之前使用初始 ramdisk 做一些事情(我猜是加载 LVM 的东西)。有没有办法可以将这段代码放入内核本身,这样就不需要 initrd 了?如果没有,我如何自己制作 initrd?

补充一点可能很有用,我曾尝试为非 LVM 根目录编译内核,没有 initrd 并且它运行良好。然后我试图将整个事情放在 LVM 下,但无法启动机器(我猜它无法处理 LVM 的东西)。然后我使用genkernel带有--lvm选项的工具,它创建了我当前正在使用的工作内核和 initrd。

现在我想跳过genkernel并自己做所有事情,最好没有 initrd 以便机器启动得更快(反正我不需要灵活性)。

root boot kernel initrd lvm

13
推荐指数
2
解决办法
1万
查看次数

为什么我的初始 ramdisk 这么大?

我正在运行 Ubuntu 11.10,它带有内核版本3.0.0-14。我从3.1.0分支下载并构建了一个内核。安装新内核后,我看到我的/boot/initrd.img-3.1.0文件很大。它是 114MB,而我/boot/initrd.img-3.0.0-14-generic的大约是 13MB。我想摆脱臃肿,这显然是不必要的。

在构建新内核时,我将我的/boot/config-3.0.0-14-genericto复制到.config我的构建目录中,以保留我原始内核的配置。我运行make oldconfig,为所有新选项选择默认值,然后构建内核。

查看每个 initrd cpio 档案中的文件大小,我看到我所有的 .ko 模块在 3.1.0 ramdisk 中的大小都比 3.0.0-14 大。我假设在我的配置文件中检查了一个不必要的调试标志,但我没有看到任何在 3.0.0-14 配置文件中尚未启用的不同之处。

/boot/config-3.0.0-14-generic在这里:http : //pastebin.com/UjH7nEqd

/boot/config-3.0.1在这里:http : //pastebin.com/HyT0M2k1

谁能解释所有不必要的膨胀来自哪里?

compiling kernel initrd

13
推荐指数
1
解决办法
4876
查看次数

Linux 内核未正确找到 initrd

我已经编译了一个 linux 内核,我想在 QEMU 中调试它。我通过执行命令创建了一个文件来启动

$ qemu-img create -f raw disk.img 200M
$ mkfs.ext2 -F disk.img
# mkdir /mnt/rootfs
# mount -o loop disk.img /mnt/rootfs
Run Code Online (Sandbox Code Playgroud)

然后我做了qemu -kernel bzImage -initrd disk.img并得到了下面的屏幕,上面写着:

Kernel panic - not syncing: VFS: unable to mount root fs on unknown block
Run Code Online (Sandbox Code Playgroud)

我的 QEMU 屏幕

我做错了什么,我能做些什么来解决它?

initrd qemu linux-kernel

11
推荐指数
2
解决办法
2万
查看次数

Ramdisk 和 initrd 是一样的吗?

在阅读ramfs-rootfs-initramfs.txt 中关于 ramdisk 的内核文档时, 我有一个疑问,就像 ramdisk 解释的那样,那里与the-difference-between-initrd-and-initramfs 上的帖子中描述的 initrd 功能相同。

有人可以澄清我吗?

如果它是相同的,我读到它有很多缺点,但仍然在我的 Fedora PC 中,我看到

initrd-2.6.29.4-167.fc11.i686.PAE.img

在我的启动文件夹中。和上面提到的initrd有区别吗??

UPDATE_EDIT :
文章中我什至看到一个命令
# update-initramfs -u all
update-initramfs: Generating /boot/initrd.img-2.6.18-5-amd64

那么这个 initramfs 是如何链接到 initrd.img 的呢?

linux boot initrd

10
推荐指数
1
解决办法
3922
查看次数

构建内核后未找到 vmlinuz 和 initrd?

使用 make 配置和构建内核后,为什么我没有vmlinuz-<version>-default.imgand initrd-<version>.img,但只有一个巨大的vmlinux二进制文件(~150MB)?

linux compiling kernel initrd

10
推荐指数
1
解决办法
1万
查看次数

如何强制 Ubuntu 内核无法挂载 / 并放入 initramfs 救援外壳?

我正在尝试自定义 initramfs 救援环境,并希望强制内核挂载失败/并进入(initramfs)救援外壳,而不是单用户模式。

我怎样才能做到这一点?

注意:我知道如何挂钩initramfs-tools以实现自定义步骤,但我需要能够验证结果。

ubuntu initrd initramfs rescue

10
推荐指数
1
解决办法
8185
查看次数

标签 统计

initrd ×10

kernel ×5

linux ×5

boot ×3

initramfs ×3

compiling ×2

cpio ×1

debian ×1

grub ×1

linux-kernel ×1

lvm ×1

qemu ×1

rescue ×1

root ×1

ubuntu ×1