Questions tagged «initrd»

initrd是一种在引导Linux内核的过程中将临时文件系统加载到内存中的方法。

6
为什么我的initrd只有一个目录,即“内核”?
我正在使用debian live-build在可启动系统上工作。在该过程结束时,我得到了用于引导实时系统的典型文件:squashfs文件,一些GRUB模块和配置文件以及initrd.img文件。 我可以使用这些文件启动,并通过以下方式将initrd传递给内核 initrd=/path/to/my/initrd.img 在引导加载程序命令行上。但是,当我尝试检查initrd图像的内容时,如下所示: $file initrd.img initrd.img: ASCII cpio archive (SVR4 with no CRC) $mkdir initTree && cd initTree $cpio -idv < ../initrd.img 我得到的文件树如下所示: $tree --charset=ASCII . `-- kernel `-- x86 `-- microcode `-- GenuineIntel.bin 实际的文件系统树在哪里,其中典型的/ bin,/ etc,/ sbin ...包含引导期间使用的实际文件?
28 linux  debian  initrd  cpio 

1
在debian上相当于mkinitcpio.conf?
我想回顾一下,用于构建initrd.imgDebian 的钩子在我的debian中是正确的,但是我找不到与/etc/mkinitcpio.confArchlinux中的文件类似的文件,在debian中该文件的等效性是什么,一旦完成,如何重新构建initrd.img我已经编辑过该文件了吗?
15 initramfs  initrd 

3
整个内核在启动时是否已加载到内存中?
我通读了这份流行的IBM文档(我在网络上经常看到该文档),解释了初始RAM磁盘的功能。 我在构想这是如何工作的过程中碰壁了。 在文档中说 引导加载程序(例如GRUB)标识要加载的内核,并将该内核映像和任何相关的initrd复制到内存中 我已经很困惑:它将整个内核复制到内存中还是仅复制其中一部分?如果整个内核都在内存中,那为什么我们还需要初始的RAM磁盘? 我认为initrd的目的是为了拥有一个小的通用内核映像,并且initrd会在加载内核映像之前在其中安装正确的模块。但是,如果整个内核已经在内存中,为什么我们需要initrd? 这也引起了另一件事,使我感到困惑-装入内核的模块在哪里?是否所有内核模块都存储在initrd中?

3
Linux如何加载“ initrd”映像?
我一直在尝试了解引导过程,但是我头顶上只有一件事。 一旦启动Linux内核并安装了根文件系统(/),就可以运行程序并可以集成其他内核模块以提供其他功能。要挂载根文件系统,必须满足某些条件。内核需要相应的驱动程序来访问根文件系统所在的设备(特别是SCSI驱动程序)。内核还必须包含读取文件系统所需的代码(ext2,reiserfs,romfs等)。还可以想到,根文件系统已被加密。在这种情况下,需要密码来挂载文件系统。 初始ramdisk(也称为initdisk或initrd)精确地解决了上述问题。Linux内核提供了一个选项,即将小型文件系统加载到RAM磁盘,然后在安装实际的根文件系统之前在其中运行程序。initrd的加载由引导加载程序(GRUB,LILO等)处理。引导加载程序仅需要BIOS例程即可从引导介质加载数据。如果引导加载程序能够加载内核,则它也可以加载初始虚拟磁盘。不需要特殊的驱动程序。 如果/ boot不是一个不同的分区,而是/分区中的分区,那么引导加载程序是否不要求SCSI驱动程序访问“ initrd”映像和内核映像?如果您可以直接访问图像,那么为什么我们确实需要SCSI驱动程序?
13 linux  kernel  boot  initrd 

1
为什么我最初的虚拟磁盘这么大?
我正在运行带有内核版本的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-generic到.config到我的构建目录中,以保留原始内核的配置。我运行make oldconfig,为所有新选项选择了默认值,然后构建了内核。 查看每个initrd cpio归档文件中的文件大小,我发现在3.1.0 ramdisk中,所有.ko模块的大小都比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 谁能解释所有不必要的膨胀来自何处?

5
是否可以在不使用initrd的情况下将root放在LVM中?
我刚刚建立了一个Gentoo基本系统(这意味着我现在可以启动和登录并使用它进行操作)。我的根分区位于LVM2虚拟组中(具有单独的/boot分区)。为了启动,我需要将以下参数传递给内核: root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm 显然,它是在挂载root之前使用初始ramdisk做一些事情(我猜是加载LVM事情)。有没有一种方法可以将该代码放入内核本身,从而不需要initrd?如果没有,我该如何使自己成为initrd? 补充一下,我曾尝试在没有initrd的情况下为非LVM根目录编译内核,并且运行良好。然后,我试图将整个东西放在LVM下,并且无法启动计算机(我想它无法处理LVM的东西)。然后,我将该genkernel工具与该--lvm选项一起使用,它会创建当前正在使用的工作内核和initrd。 现在,我想跳过genkernel并自己完成所有操作,最好不要使用initrd,这样计算机可以更快地启动(无论如何我都不需要灵活性)。
12 kernel  boot  root  initrd  lvm 

3
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 然后我做了qemu -kernel bzImage -initrd disk.img,得到下面的屏幕: Kernel panic - not syncing: VFS: unable to mount root fs on unknown block 我做错了什么,该如何解决?


1
Ramdisk和initrd是否相同?
在阅读ramfs-rootfs-initramfs.txt中 ramdisk的内核文档时, 我有一个疑问,就像ramdisk解释的那样,它与post -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呢?
10 linux  boot  initrd 

2
构建自己的initrd时如何填充/ dev目录?
我正在尝试学习有关initrd的知识。我已按照本教程从头开始构建自己的initrd,并在其上安装了busybox。然后我用isolinux从中制作了一个.iso,因此可以在virtualbox中对其进行测试。效果很好! 我有来自busybox的基本命令,所以我想挂载文件系统。但是/ dev目录几乎是空的(没有sda),除了我在按照教程学习时创建的某些文件之外。我了解了udev,我认为这是我所需要的。但是,我不确定该如何进行。 我应该只是从udev中获取最新的源代码,对其进行编译并将其添加到initrd吗?然后在我的初始化脚本中调用/ bin / udev或类似的内容?还是有其他/更好的方法来填充/ dev目录? 编辑:一些其他信息和有关我已经做的更新。 我在虚拟框中测试所有内容。我只是在虚拟盒子中安装了ubuntu minimal,从initrd中创建了一个.iso,然后从virtualbox中的iso中启动。 我使用了vmlinuz,并将/lib/modules其存在于debian-businesscard.iso上,然后将其复制到我的initrd中,该initrd是按照前面链接的教程创建的。 内核有 CONFIG_DEVTMPFS=y 有些设备显示在中/dev,如tty0-tty63和其他一些设备,但没有sda / hda。 然lspci -k在我当前正在运行的操作系统和虚拟框来检查哪些模块使用。SATA Controller说它ahci用作模块。 当我执行modprobe -v ahci它抱怨了很多关于“未知符号:ata_some_stuff”,但之后它返回像SCSI Subsystem initialized,ATA-6: VBOX HARDDISK和Direct-Access ATA VBOX HARDDISK。但是,仍然没有找到硬盘驱动器设备/dev。 我当前的/init/脚本如下: #!/bin/ash mount -t devtmpfs none /dev mount -t proc /proc /proc mount -t sysfs none /sys modprobe -v ahci …
9 udev  initrd 


2
Ubuntu:如何在启动时组装md设备?
md在Ubuntu中启动时如何组装设备?是/etc/mdadm/mdadm.conf名副其实的相关因素,在这里? 我mdadm.conf的声音很正常,并且在应急CD环境中检查了一下。运行时,mdadm -A --scan它会根据需要查找并分配设备名称。该mdadm.conf包含AUTO -all从组装阵列采取了所有自动性。 我需要做的是能够在启动时自动组装md设备,mdadm.conf或者在组装时能够super-minor接受0.9阵列的值和name(显然<hostname>:<super-minor>)1.2阵列的值,而无需进行正确的操作mdadm.conf。我想念什么拼图? 我有以下问题。有两台md具有RAID1(md0和md1)的设备,一台具有RAID6(md2)的设备。我通过所需的设备名称来指代它们。md0具有元数据版本0.9,其他两个具有版本1.2。md0映射到/和其他两个与引导无关。 引导驱动器已分区。上面有一个胶水“ BIOS引导分区”(sda1)。grub-install --no-floppy /dev/sda报告成功。 md0 == sda3 + sdb3 md1 == sda2 + sdb2 md2 == sdc + sdd + sde + sdf + sdg + sdh sda1并sdb1有“BIOS引导分区”每 GRUB2是高兴的/boot/grub/devicemap我把它和我说part_gpt,raid,mdraid09并ext2在模块预载GRUB2。 由于我仍然在救援环境中拥有根卷,因此我只需安装所有内容,然后进行操作chroot: mkdir /target mount /dev/md0 /target mount -o bind /dev /target/dev mount -o bind …
8 linux  ubuntu  grub2  mdadm  initrd 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.